From c8abbd8bef5349ab892a2853a4e5e3d5ed16b670 Mon Sep 17 00:00:00 2001 From: Jakob Heher Date: Tue, 12 May 2026 15:33:19 +0200 Subject: Update docs & various fixes discovered in the process (#86) - update documentation for pdf-as 5 - document the v2 json api - fix a number of documentation quirks - document `keyId` parameter - px (pixels) -> pt (pdf page units) - document --verify_level - remove a number of documented features that were never implemented: - `adobeSignFieldValue` and `sigLogoAltText` from signature profiles - `UNDERLINE` and `STRIKETHRU` from fonts - `num-bytes` parameter - `verify_only`/`sign_only` enable states for profiles - update mobile BKU base URL - update pdfbox backend default to 3 in sample configurations - consistently made boolean parsing from configuration files case permissive - add moa verification timeout - add support for BOLDITALIC to all base fonts, and for ITALIC to helvetica and courier - fix a number of small quirks - hibernate properties are now reloaded properly - fix the signature block parameter key regex - v1 json api now correctly checks for onlinebku/mobilebku being enabled - pdfbox 2 module correctly compares for integer equality regardless of cached boxed ints - test operationcountwatcher no longer sometimes breaks due to spring context differences --- .../src/main/configuration/pdf-as-web.properties | 6 +- .../gv/egiz/pdfas/web/config/WebConfiguration.java | 142 +++----------- .../at/gv/egiz/pdfas/web/helper/PdfAsHelper.java | 33 +--- .../pdfas/web/helper/PdfAsParameterExtractor.java | 12 +- .../gv/egiz/pdfas/web/json_api/JacksonConfig.java | 8 + .../egiz/pdfas/web/servlets/ExternSignServlet.java | 5 +- .../gv/egiz/pdfas/web/servlets/JSONAPIServlet.java | 4 +- .../web/stats/impl/StatisticMicrometerBackend.java | 24 ++- .../egiz/pdfas/web/ws/PDFASVerificationImpl.java | 6 +- pdf-as-web/src/main/webapp/egiz.jsp | 8 +- .../pdfas/web/servlets/SimpleSignServletTest.java | 4 - .../web/servlets/SimpleVerifyServletTest.java | 9 - .../at/gv/egiz/pdfas/web/test/JsonApiTest.java | 6 +- .../web/test/JsonSoapParameterNamingTest.java | 207 +++++++++++++++++++++ .../gv/egiz/pdfas/web/test/MockMoaSigningTest.java | 73 +++----- .../egiz/pdfas/web/test/SimpleWebServiceTest.java | 9 - .../SimpleWebServiceWithoutVerificationTest.java | 8 - .../java/at/gv/egiz/pdfas/web/test/TestUtils.java | 24 ++- .../config/pdfas/cfg/advancedconfig.properties | 6 +- .../config/pdfas/cfg/advancedconfig.properties~ | 83 --------- .../resources/config/pdfas/cfg/config.properties | 2 +- .../config/pdfas/cfg/config.properties_backup | 4 +- .../cfg/profiles/AMTSSIGNATURBLOCK_BASE.properties | 2 - .../profiles/AMTSSIGNATURBLOCK_BASE_EN.properties | 2 - .../cfg/profiles/BAIK_ARCHIV_SIGNATUR.properties | 5 - .../cfg/profiles/BAIK_URKUNDE_SIGNATUR.properties | 4 - .../pdfas/cfg/profiles/BASE_MINIMAL.properties | 4 - .../pdfas/cfg/profiles/BASE_MINIMAL_EN.properties | 3 - .../pdfas/cfg/profiles/BASE_NORMAL.properties | 16 +- .../pdfas/cfg/profiles/BASE_NORMAL_EN.properties | 3 - .../pdfas/cfg/profiles/BASE_SMALL_EN.properties | 3 - .../config/pdfas/cfg/profiles/INVISIBLE.properties | 1 - .../profiles_bkp/AMTSSIGNATURBLOCK_BASE.properties | 2 - .../AMTSSIGNATURBLOCK_BASE_EN.properties | 2 - .../profiles_bkp/BAIK_ARCHIV_SIGNATUR.properties | 5 - .../profiles_bkp/BAIK_URKUNDE_SIGNATUR.properties | 4 - .../pdfas/cfg/profiles_bkp/BASE_MINIMAL.properties | 4 - .../cfg/profiles_bkp/BASE_MINIMAL_EN.properties | 3 - .../pdfas/cfg/profiles_bkp/BASE_NORMAL.properties | 16 +- .../cfg/profiles_bkp/BASE_NORMAL_EN.properties | 3 - .../cfg/profiles_bkp/BASE_SMALL_EN.properties | 3 - .../pdfas/cfg/profiles_bkp/INVISIBLE.properties | 1 - .../pdfas/pdf-as-web-verify-disabled.properties | 7 +- .../resources/config/pdfas/pdf-as-web.properties | 6 +- 44 files changed, 337 insertions(+), 445 deletions(-) create mode 100644 pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonSoapParameterNamingTest.java delete mode 100644 pdf-as-web/src/test/resources/config/pdfas/cfg/advancedconfig.properties~ (limited to 'pdf-as-web/src') diff --git a/pdf-as-web/src/main/configuration/pdf-as-web.properties b/pdf-as-web/src/main/configuration/pdf-as-web.properties index 98249adf..4b3102f9 100644 --- a/pdf-as-web/src/main/configuration/pdf-as-web.properties +++ b/pdf-as-web/src/main/configuration/pdf-as-web.properties @@ -20,7 +20,7 @@ ext.overwrite.wl.1=^$ ############################################################################## ## Signing by Security-Layer bku.local.url=http://127.0.0.1:3495/http-security-layer-request -bku.mobile.url=https://www.handy-signatur.at/mobile/https-security-layer-request/default.aspx +bku.mobile.url=https://service.a-trust.at/mobile/https-security-layer-request/default.aspx ############################################################################## @@ -58,13 +58,13 @@ moal.test.Certificate=KG_ECC_TEST.crt ############################################################################## ###### Enable SOAP Service # Enable signing endpoint -soap.sign.enabled=true +# soap.sign.enabled=true # Enable implicide signature-verification during WebService signing soap.sign.with.verify.enabled=true # Enable signature-verification endpoint -# soap.verify.enabled=false +# soap.verify.enabled=true ############################################################################## diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/WebConfiguration.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/WebConfiguration.java index 0b3fdf05..85e1b75d 100644 --- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/WebConfiguration.java +++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/WebConfiguration.java @@ -117,7 +117,7 @@ public class WebConfiguration implements IConfigurationConstants { public static final String UPLOAD_FILESIZE_THRESHOLD = "web.upload.filesizeThreshold"; public static final String UPLOAD_MAX_FILESIZE = "web.upload.filesizeMax"; - public static final String UPLOAD_MAX_REQUESTSIZE = "web.upload.RequestsizeMax"; + public static final String UPLOAD_MAX_REQUESTSIZE = "web.upload.requestsizeMax"; public static final String PLACEHOLDER_GENERATOR_ENABLED = "qr.placeholder.generator.enabled"; @@ -125,14 +125,14 @@ public class WebConfiguration implements IConfigurationConstants { private static final int MAX_FILE_SIZE = 1024 * 1024 * 40; // 40MB private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 50; // 50MB - private static Properties properties = new Properties(); - private static Properties hibernateProps = new Properties(); + private static final Properties properties = new Properties(); + private static final Properties hibernateProps = new Properties(); private static final Logger logger = LoggerFactory .getLogger(WebConfiguration.class); - private static List whiteListregEx = new ArrayList(); - private static List overwritewhiteListregEx = new ArrayList(); + private static final List whiteListregEx = new ArrayList(); + private static final List overwritewhiteListregEx = new ArrayList(); public static void configure(String configFile) { try (InputStream is = new FileInputStream(configFile)) { @@ -145,6 +145,7 @@ public class WebConfiguration implements IConfigurationConstants { public static void configure(InputStream config) { properties.clear(); + hibernateProps.clear(); whiteListregEx.clear(); overwritewhiteListregEx.clear(); @@ -324,12 +325,7 @@ public class WebConfiguration implements IConfigurationConstants { public static boolean isAllowExtOverwrite() { String value = properties.getProperty(ALLOW_EXT_OVERWRITE); - if (value != null) { - if (value.equals("true")) { - return true; - } - } - return false; + return Boolean.parseBoolean(value); } public static synchronized boolean isOverwriteAllowed(String key) { @@ -354,42 +350,22 @@ public class WebConfiguration implements IConfigurationConstants { public static boolean isJSONAPIEnabled() { String value = properties.getProperty(JSON_API_ENABLED); - if (value != null) { - if (value.equals("true")) { - return true; - } - } - return false; + return Boolean.parseBoolean(value); } public static boolean isKeepSignedDocument() { String value = properties.getProperty(KEEP_SIGNED_DOCUMENT); - if (value != null) { - if (value.equals("true")) { - return true; - } - } - return false; + return Boolean.parseBoolean(value); } public static boolean isMoaEnabled(String keyIdentifier) { String value = properties.getProperty(MOA_LIST + "." + keyIdentifier + ".enabled"); - if (value != null) { - if (value.equals("true")) { - return true; - } - } - return false; + return Boolean.parseBoolean(value); } public static boolean isQRPlaceholderGenerator() { String value = properties.getProperty(PLACEHOLDER_GENERATOR_ENABLED); - if (value != null) { - if (value.equals("true")) { - return true; - } - } - return false; + return Boolean.parseBoolean(value); } public static String getMoaURL(String keyIdentifier) { @@ -443,121 +419,57 @@ public class WebConfiguration implements IConfigurationConstants { public static boolean getMOASSEnabled() { String value = properties.getProperty(MOA_SS_ENABLED); - if (value != null) { - if (value.equals("true")) { - return true; - } - } - return false; + return Boolean.parseBoolean(value); } public static boolean getKeystoreDefaultEnabled() { String value = properties.getProperty(KEYSTORE_DEFAULT_ENABLED); - if (value != null) { - if (value.equals("true")) { - return true; - } - } - return false; + return Boolean.parseBoolean(value); } public static boolean getKeystoreEnabled(String keyIdentifier) { String value = properties.getProperty(KEYSTORE_LIST + "." + keyIdentifier + "." + KEYSTORE_ENABLED); - if (value != null) { - if (value.equals("true")) { - return true; - } - } - return false; + return Boolean.parseBoolean(value); } public static boolean getLocalBKUEnabled() { - String value = properties.getProperty(LOCAL_BKU_ENABLED); - if (value != null) { - if (value.equals("true")) { - return true; - } - } - return false; + return Boolean.parseBoolean(properties.getProperty(LOCAL_BKU_ENABLED)); } public static boolean getMobileBKUEnabled() { - String value = properties.getProperty(MOBILE_BKU_ENABLED); - if (value != null) { - if (value.equals("true")) { - return true; - } - } - return false; + return Boolean.parseBoolean(properties.getProperty(MOBILE_BKU_ENABLED)); } public static boolean getOnlineBKUEnabled() { - String value = properties.getProperty(ONLINE_BKU_ENABLED); - if (value != null) { - if (value.equals("true")) { - return true; - } - } - return false; + return Boolean.parseBoolean(properties.getProperty(ONLINE_BKU_ENABLED)); } public static boolean getSL20Enabled() { - String value = properties.getProperty(SL20_BKU_ENABLED); - if (value != null) { - if (value.equals("true")) { - return true; - } - } - return false; + return Boolean.parseBoolean(properties.getProperty(SL20_BKU_ENABLED)); } public static boolean getSoapSignEnabled() { - String value = properties.getProperty(SOAP_SIGN_ENABLED); - if (value != null) { - if (value.equals("true")) { - return true; - } - } - return false; + return Boolean.parseBoolean(properties.getProperty(SOAP_SIGN_ENABLED)); } public static boolean isSoapSignWithVerifyEnabled() { String value = properties.getProperty(SOAP_SIGN_WITH_VERIFY_ENABLED); if (value != null) { - return value.equals("true"); - + return Boolean.parseBoolean(value); } return getSoapSignEnabled(); } public static boolean getSoapVerifyEnabled() { - String value = properties.getProperty(SOAP_VERIFY_ENABLED); - if (value != null) { - if (value.equals("true")) { - return true; - } - } - return false; + return Boolean.parseBoolean(properties.getProperty(SOAP_VERIFY_ENABLED)); } public static boolean isShowErrorDetails() { - String value = properties.getProperty(ERROR_DETAILS); - if (value != null) { - if (value.equals("true")) { - return true; - } - } - return false; + return Boolean.parseBoolean(properties.getProperty(ERROR_DETAILS)); } public static boolean isWhiteListEnabled() { - String value = properties.getProperty(WHITELIST_ENABLED); - if (value != null) { - if (value.equals("true")) { - return true; - } - } - return false; + return Boolean.parseBoolean(properties.getProperty(WHITELIST_ENABLED)); } public static synchronized boolean isProvidePdfURLinWhitelist(String url) { @@ -612,13 +524,7 @@ public class WebConfiguration implements IConfigurationConstants { } public static boolean getReloadEnabled() { - String value = properties.getProperty(RELOAD_ENABLED); - if (value != null) { - if (value.equals("true")) { - return true; - } - } - return false; + return Boolean.parseBoolean(properties.getProperty(RELOAD_ENABLED)); } public static int getFilesizeThreshold() { diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/PdfAsHelper.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/PdfAsHelper.java index 95e9089f..4a4d15b2 100644 --- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/PdfAsHelper.java +++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/PdfAsHelper.java @@ -181,33 +181,6 @@ public class PdfAsHelper { return pdfAsConfig; } - private static void validatePdfSize(HttpServletRequest request, - HttpServletResponse response, byte[] pdfData) - throws PdfAsWebException { - // Try to check num-bytes - String pdfSizeString = PdfAsParameterExtractor.getNumBytes(request); - if (pdfSizeString != null) { - long pdfSize = -1; - try { - pdfSize = Long.parseLong(pdfSizeString); - } catch (NumberFormatException e) { - throw new PdfAsWebException( - PdfAsParameterExtractor.PARAM_NUM_BYTES - + " parameter has to be a positiv number!", e); - } - if (pdfSize <= 0) { - throw new PdfAsWebException( - "Invalid PDF Size! Has to bigger than zero!"); - } - - if (pdfData.length != pdfSize) { - throw new PdfAsWebException("Signature Data Size and " - + PdfAsParameterExtractor.PARAM_NUM_BYTES - + " missmatch!"); - } - } - } - public static String buildPosString(HttpServletRequest request, HttpServletResponse response) throws PdfAsWebException { String posP = PdfAsParameterExtractor.getSigPosP(request); @@ -270,19 +243,19 @@ public class PdfAsHelper { sb.append("w:auto;"); } } - sb.append("w:" + posW.trim() + ";"); + sb.append("w:").append(posW.trim()).append(";"); } else { sb.append("w:auto;"); } if (posP != null) { - if (!(posP.equals("auto") || posP.equals("new"))) { + if (!(posP.equals("auto") || posP.equals("new") || posP.equals("last"))) { try { Integer.parseInt(posP); } catch (NumberFormatException e) { throw new PdfAsWebException( PdfAsParameterExtractor.PARAM_SIG_POS_P - + " has invalid value! (auto | new )"); + + " has invalid value! (auto | new | last)"); } } sb.append("p:" + posP.trim() + ";"); diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/PdfAsParameterExtractor.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/PdfAsParameterExtractor.java index 0791e37e..ede5fdf5 100644 --- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/PdfAsParameterExtractor.java +++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/PdfAsParameterExtractor.java @@ -41,7 +41,6 @@ public class PdfAsParameterExtractor { public static final String PARAM_CONNECTOR = "connector"; public static final String PARAM_TRANSACTION_ID = "transactionId"; - public static final String PARAM_CONNECTOR_DEFAULT = "bku"; public static final String PARAM_FORMAT = "format"; public static final String PARAM_HTML = "html"; @@ -63,7 +62,6 @@ public class PdfAsParameterExtractor { public static final String PARAM_VERIFY_LEVEL_OPTION_INT_ONLY = "intOnly"; public static final String PARAM_LOCALE = "locale"; - public static final String PARAM_NUM_BYTES = "num-bytes"; public static final String PARAM_PDF_URL = "pdf-url"; public static final String PARAM_SIG_TYPE = "sig-type"; public static final String PARAM_SIG_TYPE_ALIAS = "sig_type"; @@ -85,11 +83,7 @@ public class PdfAsParameterExtractor { .getLogger(PdfAsParameterExtractor.class); public static String getConnector(HttpServletRequest request) { - String connector = (String)request.getAttribute(PARAM_CONNECTOR); - if(connector != null) { - return connector; - } - return PARAM_CONNECTOR_DEFAULT; + return (String)request.getAttribute(PARAM_CONNECTOR); } public static Map getDynamicSignatureBlockParameters(HttpServletRequest request) throws Exception { @@ -234,10 +228,6 @@ public class PdfAsParameterExtractor { return null; } - public static String getNumBytes(HttpServletRequest request) { - return (String)request.getAttribute(PARAM_NUM_BYTES); - } - public static String getPdfUrl(HttpServletRequest request) { return (String)request.getAttribute(PARAM_PDF_URL); } diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/json_api/JacksonConfig.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/json_api/JacksonConfig.java index bd82f8ed..ffb02c5f 100644 --- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/json_api/JacksonConfig.java +++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/json_api/JacksonConfig.java @@ -2,6 +2,7 @@ package at.gv.egiz.pdfas.web.json_api; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationModule; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -16,4 +17,11 @@ public class JacksonConfig { DeserializationFeature.READ_ENUMS_USING_TO_STRING ); } + + @Bean + public Jackson2ObjectMapperBuilderCustomizer useJaxbJsonNames() { + return b -> b.modulesToInstall( + new JakartaXmlBindAnnotationModule() + ); + } } diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/ExternSignServlet.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/ExternSignServlet.java index a28a4835..18754288 100644 --- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/ExternSignServlet.java +++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/ExternSignServlet.java @@ -309,6 +309,9 @@ public class ExternSignServlet extends HttpServlet { // Get Connector String connector = PdfAsParameterExtractor.getConnector(request); + if (connector == null) { + throw new PdfAsException("No connector specified"); + } String transactionId = PdfAsParameterExtractor.getTransactionId(request); @@ -460,7 +463,7 @@ public class ExternSignServlet extends HttpServlet { return; } else { - throw new PdfAsWebException("Invalid connector (bku | moa | jks)"); + throw new PdfAsWebException("Invalid connector (bku | moa | jks | onlinebku | mobilebku)"); } } diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/JSONAPIServlet.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/JSONAPIServlet.java index b60fae06..f2c39a75 100644 --- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/JSONAPIServlet.java +++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/JSONAPIServlet.java @@ -243,14 +243,14 @@ public class JSONAPIServlet extends HttpServlet { } if (PDFASSignParameters.Connector.ONLINEBKU.equals(connectorEnum)) { - if (WebConfiguration.getLocalBKUURL() == null) { + if (WebConfiguration.getOnlineBKUURL() == null) { throw new PdfAsWebException( "Invalid connector onlinebku is not supported"); } } if (PDFASSignParameters.Connector.MOBILEBKU.equals(connectorEnum)) { - if (WebConfiguration.getLocalBKUURL() == null) { + if (WebConfiguration.getHandyBKUURL() == null) { throw new PdfAsWebException( "Invalid connector mobilebku is not supported"); } diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats/impl/StatisticMicrometerBackend.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats/impl/StatisticMicrometerBackend.java index 89127e6a..8b8fb489 100644 --- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats/impl/StatisticMicrometerBackend.java +++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/stats/impl/StatisticMicrometerBackend.java @@ -7,30 +7,25 @@ import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Tags; import io.micrometer.core.instrument.Timer; import lombok.extern.slf4j.Slf4j; +import lombok.val; import org.jspecify.annotations.NonNull; import org.springframework.beans.BeansException; +import org.springframework.beans.factory.DisposableBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicReference; import java.util.function.Function; @Slf4j public class StatisticMicrometerBackend implements StatisticBackend { /** bridge between ServiceLoader component and Boot's beans */ @Component - public static class SpringContextProxy implements ApplicationContextAware { - private static volatile ApplicationContext applicationContext; - @Override public void setApplicationContext(@NonNull ApplicationContext ctx) { applicationContext = ctx; } - public static T getBean(Class type) { - try { - return (applicationContext != null) ? applicationContext.getBean(type) : null; - } catch (BeansException ex) { - log.warn("Spring MeterRegistry not available, skipped micrometer metric logging", ex); - return null; - } - } + public static class SpringContextProxy { + public static MeterRegistry meterRegistry; + SpringContextProxy(MeterRegistry registry) { meterRegistry = registry; } } public static final String NAME = "StatisticMicrometerBackend"; @Override public String getName() { return NAME; } @@ -39,8 +34,11 @@ public class StatisticMicrometerBackend implements StatisticBackend { public void storeEvent(StatisticEvent e) { if (e == null) return; - MeterRegistry registry = SpringContextProxy.getBean(MeterRegistry.class); - if (registry == null) return; + MeterRegistry registry = SpringContextProxy.meterRegistry; + if (registry == null) { + log.warn("Spring MeterRegistry not available, skipped micrometer metric logging"); + return; + } Tags baseTags = Tags.of( "operation", safeName(e.getOperation(), v -> v.getName()), diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASVerificationImpl.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASVerificationImpl.java index 68c5d227..1afd0c2d 100644 --- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASVerificationImpl.java +++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASVerificationImpl.java @@ -69,7 +69,11 @@ public class PDFASVerificationImpl implements PDFASVerification { } statisticEvent.setFilesize(request.getInputData().length); statisticEvent.setProfileId(null); - statisticEvent.setDevice(request.getVerificationLevel().toString()); + statisticEvent.setDevice( + (lvl == SignatureVerificationLevel.FULL_VERIFICATION ? + VerificationLevel.FULL_CERT_PATH : + VerificationLevel.INTEGRITY_ONLY) + .toString()); List results = PdfAsHelper.synchronousVerify( request.getInputData(), sigIdx, lvl, preProcessor); diff --git a/pdf-as-web/src/main/webapp/egiz.jsp b/pdf-as-web/src/main/webapp/egiz.jsp index 7036697f..1050af43 100644 --- a/pdf-as-web/src/main/webapp/egiz.jsp +++ b/pdf-as-web/src/main/webapp/egiz.jsp @@ -207,16 +207,16 @@

Detailinformationen

Unter folgenden Links finden Sie detaillierte - Informationen wie Sie zu OpenID Connect, der Bürgerkarte und - der Handy-Signatur.

+ Informationen wie Sie zu OpenID Connect und + der ID Austria.

OpenID Connect

Bürgerkarte.at

- Handy-Signatur.at + ID Austria - Häufige Fragen
diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleSignServletTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleSignServletTest.java index da735c8c..a311429d 100644 --- a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleSignServletTest.java +++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleSignServletTest.java @@ -3,10 +3,7 @@ package at.gv.egiz.pdfas.web.servlets; import static org.junit.Assert.assertNotNull; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import at.gv.egiz.pdfas.web.config.PdfAsWebSpringConfiguration; -import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.SneakyThrows; @@ -26,7 +23,6 @@ import at.gv.egiz.pdfas.web.stats.StatisticEvent.Operation; import at.gv.egiz.pdfas.web.stats.StatisticEvent.Source; import org.springframework.mock.web.MockServletConfig; import org.springframework.mock.web.MockServletContext; -import org.springframework.stereotype.Component; import org.springframework.test.context.junit4.SpringRunner; //@Ignore diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleVerifyServletTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleVerifyServletTest.java index 3b5d223c..b9d7c152 100644 --- a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleVerifyServletTest.java +++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleVerifyServletTest.java @@ -9,9 +9,6 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Enumeration; -import jakarta.servlet.ServletConfig; -import jakarta.servlet.ServletContext; -import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -22,18 +19,12 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; -import org.junit.runners.BlockJUnit4ClassRunner; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; -import at.gv.egiz.pdfas.common.exceptions.PdfAsSettingsValidationException; -import at.gv.egiz.pdfas.common.settings.ISettings; -import at.gv.egiz.pdfas.lib.api.PdfAsFactory; -import at.gv.egiz.pdfas.web.config.WebConfiguration; import at.gv.egiz.pdfas.web.filter.UserAgentFilter; -import at.gv.egiz.pdfas.web.helper.PdfAsHelper; import at.gv.egiz.pdfas.web.stats.StatisticEvent; import at.gv.egiz.pdfas.web.stats.StatisticEvent.Operation; import at.gv.egiz.pdfas.web.stats.StatisticEvent.Source; diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonApiTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonApiTest.java index 71761e1d..cfb0a375 100644 --- a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonApiTest.java +++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonApiTest.java @@ -32,7 +32,7 @@ import java.util.UUID; "management.endpoints.web.exposure.include=metrics" }) @AutoConfigureMockMvc -public class JsonApiTest { +public class JsonApiTest extends TestUtils.CanWatchOperationCount { @Autowired MockMvc mvc; @Autowired ObjectMapper om; @@ -48,7 +48,7 @@ public class JsonApiTest { @Test @SneakyThrows public void sign_single_jks() { - try (val watcher = TestUtils.OperationCountWatcher(mvc, "operation:sign", "status:ok")) { + try (val watcher = OperationCountWatcher("operation:sign", "status:ok")) { final String pdf = Base64.getEncoder().encodeToString( IOUtils.toByteArray(JsonApiTest.class.getResourceAsStream("/data/enc_own.pdf"))); @@ -86,7 +86,7 @@ public class JsonApiTest { @Test @SneakyThrows public void verify_single() { - try (val watcher = TestUtils.OperationCountWatcher(mvc, "operation:verify", "status:ok")) { + try (val watcher = OperationCountWatcher("operation:verify", "status:ok")) { final String pdf = Base64.getEncoder().encodeToString( IOUtils.toByteArray(JsonApiTest.class.getResourceAsStream("/data/dummy-pdf-signed.pdf"))); diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonSoapParameterNamingTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonSoapParameterNamingTest.java new file mode 100644 index 00000000..cd775eda --- /dev/null +++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/JsonSoapParameterNamingTest.java @@ -0,0 +1,207 @@ +package at.gv.egiz.pdfas.web.test; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import at.gv.egiz.pdfas.api.ws.PDFASSignParameters; +import at.gv.egiz.pdfas.api.ws.PDFASSignRequest; +import at.gv.egiz.pdfas.api.ws.PDFASVerifyRequest; +import at.gv.egiz.pdfas.api.ws.PdfasSignMultipleRequest; +import at.gv.egiz.pdfas.api.ws.PdfasSignMultipleResponse; +import at.gv.egiz.pdfas.api.ws.PdfasSignedDocument; +import at.gv.egiz.pdfas.api.ws.VerificationLevel; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.List; +import lombok.Lombok; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * Verifies that the JSON API wire names match the SOAP/JAXB wire names. + * + *

The web documentation says that the JSON API parameters are identical to the SOAP parameters. These + * tests lock that down for fields where the Java bean property name differs from the JAXB name, such as + * {@code invoke-url}, {@code preprocessorArguments}, {@code configurationOverrides}, and {@code documents}. + * + *

Expected current-state behavior: this test fails until the SOAP DTOs either carry explicit Jackson + * annotations or the web ObjectMapper is configured to honor JAXB annotations for JSON naming. Keep old JSON + * names as aliases when implementing the fix so existing clients remain compatible. + */ +@RunWith(SpringRunner.class) +@SpringBootTest(properties = { + "management.endpoint.metrics.enabled=true", + "management.endpoints.web.exposure.include=metrics" +}) +public class JsonSoapParameterNamingTest { + @Autowired ObjectMapper om; + + static { + try { + System.setProperty("pdf-as-web.conf", + (new File(".").getCanonicalPath()) + "/src/test/resources/config/pdfas/pdf-as-web.properties"); + } catch (Throwable t) { + throw Lombok.sneakyThrow(t); + } + } + + @Test + public void signSingleUsesSoapParameterNamesForInputAndOutput() throws Exception { + final byte[] input = "pdf".getBytes(StandardCharsets.UTF_8); + final String json = "{" + + "\"requestID\":\"req-1\"," + + "\"inputData\":\"" + Base64.getEncoder().encodeToString(input) + "\"," + + "\"verificationLevel\":\"intOnly\"," + + "\"parameters\":{" + + "\"connector\":\"jks\"," + + "\"position\":\"x:auto;y:auto;w:auto;p:auto;f:0\"," + + "\"profile\":\"SIGNATURBLOCK_DE\"," + + "\"invoke-url\":\"https://example.invalid/success\"," + + "\"invoke-target\":\"_self\"," + + "\"invoke-error-url\":\"https://example.invalid/error\"," + + "\"transactionId\":\"tx-1\"," + + "\"keyIdentifier\":\"key-1\"," + + "\"qrCodeContent\":\"QR-CONTENT\"," + + "\"preprocessorArguments\":{\"propertyEntries\":[{\"key\":\"pre\",\"value\":\"one\"}]}," + + "\"configurationOverrides\":{\"propertyEntries\":[{\"key\":\"cfg\",\"value\":\"two\"}]}" + + "}," + + "\"signatureBlockParameter\":{\"subject\":\"Test User\"}" + + "}"; + + final PDFASSignRequest request = om.readValue(json, PDFASSignRequest.class); + + assertEquals("req-1", request.getRequestID()); + assertArrayEquals(input, request.getInputData()); + assertEquals(VerificationLevel.INTEGRITY_ONLY, request.getVerificationLevel()); + assertEquals("Test User", request.getSignatureBlockParameters().get("subject")); + + final PDFASSignParameters parameters = request.getParameters(); + assertNotNull(parameters); + assertEquals(PDFASSignParameters.Connector.JKS, parameters.getConnector()); + assertEquals("https://example.invalid/success", parameters.getInvokeURL()); + assertEquals("_self", parameters.getInvokeTarget()); + assertEquals("https://example.invalid/error", parameters.getInvokeErrorURL()); + assertEquals("tx-1", parameters.getTransactionId()); + assertEquals("key-1", parameters.getKeyIdentifier()); + assertEquals("QR-CONTENT", parameters.getQRCodeContent()); + assertEquals("one", parameters.getPreprocessor().getMap().get("pre")); + assertEquals("two", parameters.getOverrides().getMap().get("cfg")); + + final JsonNode serialized = om.valueToTree(request); + assertTrue(serialized.has("signatureBlockParameter")); + assertFalse(serialized.has("signatureBlockParameters")); + + final JsonNode serializedParameters = serialized.get("parameters"); + assertJsonHasOnlySoapName(serializedParameters, "invoke-url", "invokeURL", "invokeUrl"); + assertJsonHasOnlySoapName(serializedParameters, "invoke-target", "invokeTarget"); + assertJsonHasOnlySoapName(serializedParameters, "invoke-error-url", "invokeErrorURL", "invokeErrorUrl"); + assertJsonHasOnlySoapName(serializedParameters, "preprocessorArguments", "preprocessor"); + assertJsonHasOnlySoapName(serializedParameters, "configurationOverrides", "overrides"); + assertJsonHasOnlySoapName(serializedParameters, "qrCodeContent", "QRCodeContent", "qrcodecontent"); + assertEquals("jks", serializedParameters.get("connector").asText()); + } + + @Test + public void signMultipleUsesSoapDocumentsNameForInputAndOutput() throws Exception { + final byte[] input = "pdf-1".getBytes(StandardCharsets.UTF_8); + final String json = "{" + + "\"requestID\":\"multi-1\"," + + "\"transactionId\":\"tx-multi\"," + + "\"connector\":\"mobilebku\"," + + "\"invoke-url\":\"https://example.invalid/success\"," + + "\"invoke-target\":\"_top\"," + + "\"invoke-error-url\":\"https://example.invalid/error\"," + + "\"keyIdentifier\":\"kid\"," + + "\"preprocessorArguments\":{\"propertyEntries\":[{\"key\":\"pre\",\"value\":\"one\"}]}," + + "\"configurationOverrides\":{\"propertyEntries\":[{\"key\":\"cfg\",\"value\":\"two\"}]}," + + "\"signatureBlockParameter\":{\"subject\":\"Test User\"}," + + "\"verificationLevel\":\"full\"," + + "\"documents\":[{" + + "\"inputData\":\"" + Base64.getEncoder().encodeToString(input) + "\"," + + "\"fileName\":\"one.pdf\"," + + "\"position\":\"x:auto;y:auto\"," + + "\"qrCodeContent\":\"QR\"," + + "\"profile\":\"SIGNATURBLOCK_DE\"" + + "}]" + + "}"; + + final PdfasSignMultipleRequest request = om.readValue(json, PdfasSignMultipleRequest.class); + + assertEquals("multi-1", request.getRequestID()); + assertEquals("tx-multi", request.getTransactionId()); + assertEquals(PDFASSignParameters.Connector.MOBILEBKU, request.getConnector()); + assertEquals("https://example.invalid/success", request.getInvokeUrl()); + assertEquals("_top", request.getInvokeTarget()); + assertEquals("https://example.invalid/error", request.getInvokeErrorUrl()); + assertEquals("kid", request.getKeyIdentifier()); + assertEquals("one", request.getPreprocessor().getMap().get("pre")); + assertEquals("two", request.getOverrides().getMap().get("cfg")); + assertEquals("Test User", request.getSignatureBlockParameters().get("subject")); + assertEquals(VerificationLevel.FULL_CERT_PATH, request.getVerificationLevel()); + assertEquals(1, request.getInput().size()); + assertArrayEquals(input, request.getInput().get(0).getInputData()); + assertEquals("one.pdf", request.getInput().get(0).getFileName()); + + final JsonNode serialized = om.valueToTree(request); + assertJsonHasOnlySoapName(serialized, "invoke-url", "invokeUrl"); + assertJsonHasOnlySoapName(serialized, "invoke-target", "invokeTarget"); + assertJsonHasOnlySoapName(serialized, "invoke-error-url", "invokeErrorUrl"); + assertJsonHasOnlySoapName(serialized, "preprocessorArguments", "preprocessor"); + assertJsonHasOnlySoapName(serialized, "configurationOverrides", "overrides"); + assertJsonHasOnlySoapName(serialized, "signatureBlockParameter", "signatureBlockParameters"); + assertJsonHasOnlySoapName(serialized, "documents", "input"); + assertEquals("mobilebku", serialized.get("connector").asText()); + + final PdfasSignedDocument signedDocument = new PdfasSignedDocument(); + signedDocument.setFileName("one.pdf"); + signedDocument.setOutputData("signed".getBytes(StandardCharsets.UTF_8)); + + final PdfasSignMultipleResponse response = new PdfasSignMultipleResponse(); + response.setRequestID("multi-1"); + response.setOutput(List.of(signedDocument)); + + final JsonNode serializedResponse = om.valueToTree(response); + assertJsonHasOnlySoapName(serializedResponse, "documents", "output"); + assertEquals("one.pdf", serializedResponse.get("documents").get(0).get("fileName").asText()); + } + + @Test + public void verifyUsesSoapPreprocessorArgumentsNameForInputAndOutput() throws Exception { + final byte[] input = "signed-pdf".getBytes(StandardCharsets.UTF_8); + final String json = "{" + + "\"requestID\":\"verify-1\"," + + "\"inputData\":\"" + Base64.getEncoder().encodeToString(input) + "\"," + + "\"verificationLevel\":\"intOnly\"," + + "\"signatureIndex\":0," + + "\"preprocessorArguments\":{\"propertyEntries\":[{\"key\":\"pre\",\"value\":\"one\"}]}" + + "}"; + + final PDFASVerifyRequest request = om.readValue(json, PDFASVerifyRequest.class); + + assertEquals("verify-1", request.getRequestID()); + assertArrayEquals(input, request.getInputData()); + assertEquals(VerificationLevel.INTEGRITY_ONLY, request.getVerificationLevel()); + assertEquals(Integer.valueOf(0), request.getSignatureIndex()); + assertEquals("one", request.getPreprocessor().getMap().get("pre")); + + final JsonNode serialized = om.valueToTree(request); + assertJsonHasOnlySoapName(serialized, "preprocessorArguments", "preprocessor"); + } + + private static void assertJsonHasOnlySoapName(JsonNode node, String soapName, String... oldJsonNames) { + assertTrue("Expected SOAP/JAXB JSON property " + soapName + " in " + node, node.has(soapName)); + for (String oldJsonName : oldJsonNames) { + assertFalse("Did not expect legacy Java-bean JSON property " + oldJsonName + " in " + node, + node.has(oldJsonName)); + } + } +} diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/MockMoaSigningTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/MockMoaSigningTest.java index 10e87af6..46b0e405 100644 --- a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/MockMoaSigningTest.java +++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/MockMoaSigningTest.java @@ -2,17 +2,11 @@ package at.gv.egiz.pdfas.web.test; import at.gv.e_government.reference.namespace.moa._20020822_.*; import at.gv.egiz.pdfas.common.exceptions.PdfAsException; -import at.gv.egiz.pdfas.lib.api.Configuration; -import at.gv.egiz.pdfas.lib.api.IConfigurationConstants; import at.gv.egiz.pdfas.lib.api.sign.IPlainSigner; -import at.gv.egiz.pdfas.lib.impl.configuration.ConfigurationImpl; -import at.gv.egiz.pdfas.moa.MOAConnector; import at.gv.egiz.pdfas.sigs.pades.PAdESSignerKeystore; -import at.gv.egiz.pdfas.sigs.pkcs7detached.PKCS7DetachedSigner; import at.gv.egiz.pdfas.web.config.PdfAsWebSpringConfiguration; import at.gv.egiz.pdfas.web.config.WebConfiguration; import at.gv.egiz.pdfas.web.helper.PdfAsHelper; -import at.gv.egiz.pdfas.web.servlets.ExternSignServlet; import com.fasterxml.jackson.databind.ObjectMapper; import com.jayway.jsonpath.JsonPath; import iaik.x509.X509Certificate; @@ -25,14 +19,11 @@ import org.apache.commons.io.IOUtils; import org.junit.BeforeClass; import org.junit.Test; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; -import org.springframework.test.context.event.annotation.BeforeTestClass; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; @@ -52,7 +43,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. "management.endpoints.web.exposure.include=metrics" }) @AutoConfigureMockMvc -public class MockMoaSigningTest { +public class MockMoaSigningTest extends TestUtils.CanWatchOperationCount { @Autowired MockMvc mvc; @Autowired ObjectMapper om; @Autowired PdfAsWebSpringConfiguration config; @@ -184,42 +175,40 @@ public class MockMoaSigningTest { @Test @SneakyThrows public void signWithMockMOA() { - try (val watcher = TestUtils.OperationCountWatcher(mvc, "operation:sign", "status:ok")) { - try (MockMoa moa = new MockMoa()) { + try (MockMoa moa = new MockMoa(); val watcher = OperationCountWatcher("operation:sign", "status:ok")) { - final String pdf = Base64.getEncoder().encodeToString( - IOUtils.toByteArray(JsonApiTest.class.getResourceAsStream("/data/enc_own.pdf"))); + final String pdf = Base64.getEncoder().encodeToString( + IOUtils.toByteArray(JsonApiTest.class.getResourceAsStream("/data/enc_own.pdf"))); - final String signRequestID = UUID.randomUUID().toString(); - final String signRequest = om.writeValueAsString( - Map.of( - "requestID", signRequestID, - "inputData", pdf, - "parameters", Map.of( - "connector", "moa", - "keyIdentifier", moa.keyIdentifier, - "transactionId", UUID.randomUUID().toString() - ) - ) - ); + final String signRequestID = UUID.randomUUID().toString(); + final String signRequest = om.writeValueAsString( + Map.of( + "requestID", signRequestID, + "inputData", pdf, + "parameters", Map.of( + "connector", "moa", + "keyIdentifier", moa.keyIdentifier, + "transactionId", UUID.randomUUID().toString() + ) + ) + ); - final String signResponse = mvc.perform( - post("/api/v2/sign/single") - .contentType(MediaType.APPLICATION_JSON) - .accept(MediaType.APPLICATION_JSON) - .content(signRequest) - ) - .andExpect(status().isOk()) - .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) - .andExpect(jsonPath("$.requestID").value(signRequestID)) - .andExpect(jsonPath("$.signedPDF").isNotEmpty()) - .andExpect(jsonPath("$.verificationResponse").exists()) - .andReturn().getResponse().getContentAsString(); + final String signResponse = mvc.perform( + post("/api/v2/sign/single") + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(signRequest) + ) + .andExpect(status().isOk()) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) + .andExpect(jsonPath("$.requestID").value(signRequestID)) + .andExpect(jsonPath("$.signedPDF").isNotEmpty()) + .andExpect(jsonPath("$.verificationResponse").exists()) + .andReturn().getResponse().getContentAsString(); - final byte[] signedPDF = Base64.getDecoder().decode(JsonPath.read(signResponse, "$.signedPDF")); - assertArrayEquals("Signed data looks PDF-ish (%PDF- header)", - new byte[]{'%', 'P', 'D', 'F', '-'}, Arrays.copyOfRange(signedPDF, 0, 5)); - } + final byte[] signedPDF = Base64.getDecoder().decode(JsonPath.read(signResponse, "$.signedPDF")); + assertArrayEquals("Signed data looks PDF-ish (%PDF- header)", + new byte[]{'%', 'P', 'D', 'F', '-'}, Arrays.copyOfRange(signedPDF, 0, 5)); } } diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceTest.java index 7d81465a..9c65fe0d 100644 --- a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceTest.java +++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceTest.java @@ -8,7 +8,6 @@ import java.net.URL; import java.util.UUID; import at.gv.egiz.pdfas.api.ws.PDFASSigning; -import at.gv.egiz.pdfas.web.servlets.ExternSignServlet; import at.gv.egiz.pdfas.web.servlets.SimpleVerifyServletTest; import jakarta.xml.ws.Service; import lombok.val; @@ -16,20 +15,12 @@ import org.apache.commons.io.IOUtils; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; -import org.junit.runners.BlockJUnit4ClassRunner; import at.gv.egiz.pdfas.api.ws.PDFASSignParameters; import at.gv.egiz.pdfas.api.ws.PDFASSignParameters.Connector; import at.gv.egiz.pdfas.api.ws.PDFASSignRequest; import at.gv.egiz.pdfas.api.ws.PDFASSignResponse; -import at.gv.egiz.pdfas.common.exceptions.PdfAsSettingsValidationException; -import at.gv.egiz.pdfas.common.settings.ISettings; -import at.gv.egiz.pdfas.lib.api.PdfAsFactory; -import at.gv.egiz.pdfas.web.config.WebConfiguration; -import at.gv.egiz.pdfas.web.helper.PdfAsHelper; -import at.gv.egiz.pdfas.web.ws.PDFASSigningImpl; import lombok.SneakyThrows; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.test.context.junit4.SpringRunner; diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceWithoutVerificationTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceWithoutVerificationTest.java index 7954415b..cd2ba077 100644 --- a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceWithoutVerificationTest.java +++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceWithoutVerificationTest.java @@ -15,22 +15,14 @@ import org.apache.commons.io.IOUtils; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; -import org.junit.runners.BlockJUnit4ClassRunner; import at.gv.egiz.pdfas.api.ws.PDFASSignParameters; import at.gv.egiz.pdfas.api.ws.PDFASSignParameters.Connector; import at.gv.egiz.pdfas.api.ws.PDFASSignRequest; import at.gv.egiz.pdfas.api.ws.PDFASSignResponse; -import at.gv.egiz.pdfas.common.exceptions.PdfAsSettingsValidationException; -import at.gv.egiz.pdfas.common.settings.ISettings; -import at.gv.egiz.pdfas.lib.api.PdfAsFactory; -import at.gv.egiz.pdfas.web.config.WebConfiguration; -import at.gv.egiz.pdfas.web.helper.PdfAsHelper; -import at.gv.egiz.pdfas.web.ws.PDFASSigningImpl; import lombok.SneakyThrows; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.server.LocalServerPort; -import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringRunner; import javax.xml.namespace.QName; diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/TestUtils.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/TestUtils.java index 4ee606bb..f6196ca9 100644 --- a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/TestUtils.java +++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/TestUtils.java @@ -1,8 +1,14 @@ package at.gv.egiz.pdfas.web.test; +import at.gv.egiz.pdfas.web.stats.impl.StatisticMicrometerBackend; import com.jayway.jsonpath.JsonPath; +import io.micrometer.core.instrument.MeterRegistry; import lombok.val; import org.junit.Assert; +import org.junit.Before; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; @@ -10,7 +16,7 @@ import java.util.Arrays; import java.util.List; public class TestUtils { - public static double getOperationCount(MockMvc mvc, String... tags) throws Exception { + private static double getOperationCount(MockMvc mvc, String... tags) throws Exception { val builder = MockMvcRequestBuilders.get("/actuator/metrics/pdfas_requests"); Arrays.stream(tags).forEach(tag -> builder.param("tag", tag)); val result = @@ -23,8 +29,18 @@ public class TestUtils { .get(0); } - public static AutoCloseable OperationCountWatcher(MockMvc mvc, String... tags) throws Exception { - val initialCount = TestUtils.getOperationCount(mvc, tags); - return () -> Assert.assertEquals(initialCount+1.0, TestUtils.getOperationCount(mvc, tags), 0.0001); + @SpringBootTest + @AutoConfigureMockMvc + public static abstract class CanWatchOperationCount { + @Autowired MockMvc mvc; + @Autowired private MeterRegistry meterRegistry; + @Before + public void rebindStatisticsBackend() { + StatisticMicrometerBackend.SpringContextProxy.meterRegistry = meterRegistry; + } + protected AutoCloseable OperationCountWatcher(String... tags) throws Exception { + val initialCount = TestUtils.getOperationCount(mvc, tags); + return () -> Assert.assertEquals(initialCount+1.0, TestUtils.getOperationCount(mvc, tags), 0.0001); + } } } diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/advancedconfig.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/advancedconfig.properties index 858b652f..7c5cc58d 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/advancedconfig.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/advancedconfig.properties @@ -91,10 +91,6 @@ #default.verifyURL=http://www.signaturpruefung.gv.at -# Standard Alternativer Text fuer den Signaturblock (WAI) (globale Einstellung) - -#default.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke. - #register Verificators default.verifier.01=at.gv.egiz.pdfas.sigs.pades.PAdESVerifier @@ -104,7 +100,7 @@ default.verifier.01=at.gv.egiz.pdfas.sigs.pades.PAdESVerifier #Enable background color detection #sigblock.placement.bgcolor.detection.enabled=true #sigblock.placement.debug.file=/home/user/temp/debugImg.png -#runtime.backend=PDFBOX_2_BACKEND +#runtime.backend=PDFBOX_3_BACKEND ################## # Protect PDF files from copying and extractiong content diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/advancedconfig.properties~ b/pdf-as-web/src/test/resources/config/pdfas/cfg/advancedconfig.properties~ deleted file mode 100644 index 02ed4fbe..00000000 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/advancedconfig.properties~ +++ /dev/null @@ -1,83 +0,0 @@ -###################################################################### -# Fortgeschrittene PDF-AS Konfiguration -# -# Hier koennen fortgeschrittene Einstellungen getaetigt werden. -# Die hier angefuehrten Eigenschaften werden grundsaetzlich durch die -# interne Standard-Konfiguration abgedeckt und sind deshalb hier -# lediglich als Kommentare ausgefuehrt. Die Werte entsprechen jenen -# der Standard-Konfiguration. -# Diese Konfiguration muss in config.properties via include- -# Instruktion eingebunden werden: -# include.advancedconfig = advancedconfig.properties -##################################################################### - -# Aktiviert, oder deaktiviert grundsaetzlich das - potenziell zeit- und ressourcen-aufwaendige -# Suchen nach Platzhalter-Bildern in PDF-Dokumenten -# Festlegung fuer einzelnes Profil -# sig_obj.PROFILE.enable_placeholder_search=[true|false] -# Die Suche ist standardmaessig aus Sicherheitsgruenden deaktiviert (Defaultwert hier = false) -# Es muss bewusst sein, dass ueber einen Platzhalter benutzerseitig bestimmte Profile zur Signatur -# ausgewaehlt werden koennen! - -#enable_placeholder_search=true - -################## -# Signaturdienste - - -## Lokale BKU - -#bku.available_for_web=true -#bku.available_for_commandline=true -#bku.sign.KeyboxIdentifier=SecureSignatureKeypair - - -## Online BKU (MOCCA) - -#moc.available_for_web=true -#moc.available_for_commandline=false -#moc.sign.KeyboxIdentifier=SecureSignatureKeypair - - -## Handy - -#mobile.sign.KeyboxIdentifier=SecureSignatureKeypair -#mobiletest.sign.KeyboxIdentifier=SecureSignatureKeypair - - -## MOA - -#moa.available_for_web=true -#moa.available_for_commandline=true - -# MOA Detached Signieren aus Konsole moeglich - zurzeit moeglich nur mit BKU - -#moa.sign.console.detached.enabled=false - -# PDF/A-1b Unterstuetzung fuer alle Profile einschalten - -#default.SIG_PDFA1B_VALID=false - - -# BAIK-Signatur Unterstuetzung fuer alle Profile einschalten - -#default.SIG_BAIK_ENABLED=false - -# Standardwert fuer "Reason"-Feld der jeweiligen Signatur - -#default.adobeSignReasonValue=Informationen zur Pr\u00FCfung finden Sie unter http://www.signaturpruefung.gv.at - - -# Standard Prueflink fuer die Adobe Signaturkennzeichnung (nur relevant falls Adobe Plugin fuer Pruefung verwendet wird) - -#default.verifyURL=http://www.signaturpruefung.gv.at - - -# Standard Alternativer Text fuer den Signaturblock (WAI) (globale Einstellung) - -#default.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke. - -#register Verificators - -default.verifier.01=at.gv.egiz.pdfas.sigs.pkcs7detached.PKCS7DetachedVerifier -default.verifier.02=at.gv.egiz.pdfas.sigs.pades.PAdESVerifier diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/config.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/config.properties index 42193ec5..128cb883 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/config.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/config.properties @@ -30,7 +30,7 @@ bku.verify.url=http://127.0.0.1:3495/http-security-layer-request ## # Handy-Signatur # Signaturservice URL -mobile.sign.url=https://www.handy-signatur.at/mobile/https-security-layer-request/default.aspx +mobile.sign.url=https://service.a-trust.at/mobile/https-security-layer-request/default.aspx ## # MOA Signatur diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/config.properties_backup b/pdf-as-web/src/test/resources/config/pdfas/cfg/config.properties_backup index ac894f19..7a58676b 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/config.properties_backup +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/config.properties_backup @@ -34,12 +34,12 @@ moc.sign.url=http://127.0.0.1:8080/bkuonline/http-security-layer-request ## # Handy-Signatur # Signaturservice URL -mobile.sign.url=https://www.handy-signatur.at/mobile/https-security-layer-request/default.aspx +mobile.sign.url=https://service.a-trust.at/mobile/https-security-layer-request/default.aspx ## # Handy Signatur (Test) # Signaturservice URL -mobiletest.sign.url=https://test1.a-trust.at/https-security-layer-request/default.aspx +mobiletest.sign.url=https://hs-abnahme.a-trust.at/mobile/https-security-layer-request/default.aspx ## # MOA Signatur diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/AMTSSIGNATURBLOCK_BASE.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/AMTSSIGNATURBLOCK_BASE.properties index cecd0fda..06f9073a 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/AMTSSIGNATURBLOCK_BASE.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/AMTSSIGNATURBLOCK_BASE.properties @@ -20,7 +20,5 @@ sig_obj.AMTSSIGNATURBLOCK_BASE.value.SIG_ISSUER=${issuer.T != null ? (issuer.T + sig_obj.AMTSSIGNATURBLOCK_BASE.value.SIG_NUMBER=${sn} sig_obj.AMTSSIGNATURBLOCK_BASE.pos=f:80 -sig_obj.AMTSSIGNATURBLOCK_BASE.adobeSignFieldValue=PDF-AS Signatur sig_obj.AMTSSIGNATURBLOCK_BASE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at sig_obj.AMTSSIGNATURBLOCK_BASE.verifyURL=http://www.signaturpruefung.gv.at -sig_obj.AMTSSIGNATURBLOCK_BASE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke. diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/AMTSSIGNATURBLOCK_BASE_EN.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/AMTSSIGNATURBLOCK_BASE_EN.properties index d2d2d7c5..b4fd1a0b 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/AMTSSIGNATURBLOCK_BASE_EN.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/AMTSSIGNATURBLOCK_BASE_EN.properties @@ -16,7 +16,5 @@ sig_obj.AMTSSIGNATURBLOCK_BASE_EN.value.SIG_META=Information about the verificat sig_obj.AMTSSIGNATURBLOCK_BASE_EN.value.SIG_LABEL=./images/amtsignatur-logo_demo.png sig_obj.AMTSSIGNATURBLOCK_BASE_EN.value.SIG_NOTE=This document was signed/sealed with an official signature. According to \u00a7 20 Austrian E-Government-Act a printout of this document is assumed to be authentic. -sig_obj.AMTSSIGNATURBLOCK_BASE_EN.adobeSignFieldValue=PDF-AS Signature sig_obj.AMTSSIGNATURBLOCK_BASE_EN.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at sig_obj.AMTSSIGNATURBLOCK_BASE_EN.verifyURL=http://www.signaturpruefung.gv.at -sig_obj.AMTSSIGNATURBLOCK_BASE_EN.sigLogoAltText=A standard signature logo is shown. diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BAIK_ARCHIV_SIGNATUR.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BAIK_ARCHIV_SIGNATUR.properties index d8828ff6..e702c89f 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BAIK_ARCHIV_SIGNATUR.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BAIK_ARCHIV_SIGNATUR.properties @@ -21,16 +21,11 @@ sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_META=Hinweis sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_TITLE=ELEKTRONISCHE ARCHIVSIGNATUR sig_obj.BAIK_ARCHIV_SIGNATUR.pos=f:80 -sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignFieldValue=ELEKTRONISCHE ARCHIVSIGNATUR - -# WAI -sig_obj.BAIK_ARCHIV_SIGNATUR.sigLogoAltText=Abgebildet ist eine Signaturbildmarke mit Bundesadler. sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_META=Dokumentenformat: ${iui.pdfVersion} sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_LABEL=./images/Baik_Archiv.gif sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_TITLE=ELEKTRONISCHE ARCHIVSIGNATUR -sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignFieldValue=Archivsignatur sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignText.binary=Archivsignatur der BAIK sig_obj.BAIK_ARCHIV_SIGNATUR.verifyURL=http://www.signaturpruefung.gv.at diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BAIK_URKUNDE_SIGNATUR.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BAIK_URKUNDE_SIGNATUR.properties index 875943ae..7c64bbea 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BAIK_URKUNDE_SIGNATUR.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BAIK_URKUNDE_SIGNATUR.properties @@ -20,11 +20,7 @@ sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_KZ=Methode sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_META=Hinweis: sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_TITLE=ELEKTRONISCHE BEURKUNDUNGSSIGNATUR -# WAI -sig_obj.BAIK_URKUNDE_SIGNATUR.sigLogoAltText=Abgebildet ist die Signaturbildmarke eines staatlich befugten und beeideten Ziviltechnikers mit Bundesadler. - sig_obj.BAIK_URKUNDE_SIGNATUR.pos=f:80 -sig_obj.BAIK_URKUNDE_SIGNATUR.adobeSignFieldValue=Urkundensignatur sig_obj.BAIK_URKUNDE_SIGNATUR.adobeSignText.binary=Urkundensignatur der BAIK sig_obj.BAIK_URKUNDE_SIGNATUR.verifyURL=http://www.signaturpruefung.gv.at diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_MINIMAL.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_MINIMAL.properties index 76da2bfd..dd9b5d7c 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_MINIMAL.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_MINIMAL.properties @@ -7,7 +7,6 @@ sig_obj.BASE_MINIMAL.description=Minimalbasissignatur Deutsch sig_obj.BASE_MINIMAL.key.SIG_META=Pr\u00fcfinformation sig_obj.BASE_MINIMAL.pos=w:230.0;f:80 -sig_obj.BASE_MINIMAL.adobeSignFieldValue=PDF-AS Signatur sig_obj.BASE_MINIMAL.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at sig_obj.BASE_MINIMAL.verifyURL=http://www.signaturpruefung.gv.at @@ -15,9 +14,6 @@ sig_obj.BASE_MINIMAL.value.SIG_META=Informationen zur Pr\u00FCfung der elektroni sig_obj.BASE_MINIMAL.value.SIG_LABEL=./images/signatur-logo_de.png sig_obj.BASE_MINIMAL.table.main.Style.imagescaletofit=65.0;65.0 -# WAI -sig_obj.BASE_MINIMAL.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke. - #---------------------- MAIN TABLE ------------------------- sig_obj.BASE_MINIMAL.table.main.1=SIG_LABEL-i sig_obj.BASE_MINIMAL.table.main.2=SIG_META-v diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_MINIMAL_EN.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_MINIMAL_EN.properties index 0a1871ef..7387dd3b 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_MINIMAL_EN.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_MINIMAL_EN.properties @@ -11,6 +11,3 @@ sig_obj.BASE_MINIMAL_EN.verifyURL=http://www.signature-verification.gv.at sig_obj.BASE_MINIMAL_EN.value.SIG_META=Information about the verification of the electronic signature can be found at: https://www.signaturpruefung.gv.at sig_obj.BASE_MINIMAL_EN.value.SIG_LABEL=./images/signatur-logo_en.png - -# WAI -sig_obj.BASE_MINIMAL_EN.sigLogoAltText=A standard signature logo is shown. diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_NORMAL.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_NORMAL.properties index 36304b66..ad62f50f 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_NORMAL.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_NORMAL.properties @@ -6,10 +6,6 @@ sig_obj.BASE_NORMAL.description=Basissignatur Deutsch # Aktiviert ("on") bzw. deaktiviert ("off") dieses Profil. -# "verify_only" beschraenkt das Profil auf Signaturpruefung, d.h. es kann nicht zum Erstellen von -# Signaturen verwendet werden. -# "sign_only" beschraenkt das Profil insofern, dass es nur noch zum Signieren, nicht aber -# zum Pruefen verwendet werden kann. sig_obj.types.BASE_NORMAL=on # Festlegung der einzelner Bezeichnungen im Signaturblock. @@ -52,16 +48,12 @@ sig_obj.BASE_NORMAL.value.SIG_NOTE=Dieses mit einer qualifizierten elektronische # sig_obj.PROFILE.pos=p:1;x:40.0;y:800.0;w:400.0;f:80 sig_obj.BASE_NORMAL.pos=f:80 -sig_obj.BASE_NORMAL.adobeSignFieldValue=PDF-AS Signatur # Text, der im Adobe Reader unter "Reason" angezeigt wird. sig_obj.BASE_NORMAL.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at # URL fuer die Signaturpruefung durch das Adobe Acrobat Professional PDF-AS Plugin. #sig_obj.SIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at -# WAI -sig_obj.BASE_NORMAL.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke. - # Pruefhinweis im Signaturblock #sig_obj.SIGNATURBLOCK_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at @@ -107,7 +99,7 @@ sig_obj.BASE_NORMAL.table.main.Style.imagevalign=middle # # FACE: HELVETICA | TIMES_ROMAN | COURIER # WEIGHT: float value -# STYLE: NORMAL | BOLD | ITALIC | BOLDITALIC | UNDERLINE | STRIKETHRU +# STYLE: NORMAL | BOLD | ITALIC | BOLDITALIC # # z.B. sig_obj.SIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL sig_obj.BASE_NORMAL.table.main.Style.font=HELVETICA,8,BOLD @@ -132,14 +124,8 @@ sig_obj.BASE_NORMAL.table.info.3=SIG_META-cv # Name fuer die Signaturkennzeichnung (binaer) # sig_obj.PROFILE.adobeSignText.textual=PDF-AS # -# Name fuer die PDF-Signatur -# sig_obj.PROFILE.adobeSignFieldValue=PDF-AS Signatur -# # "Reason"-Feld der jeweiligen Signatur # sig_obj.PROFILE.adobeSignReasonValue=Informationen zur Pr\u00FCfung finden Sie unter http://www.signaturpruefung.gv.at # # Prueflink fuer die Adobe Signaturkennzeichnung (nur relevant falls Adobe Plugin fuer Pruefung verwendet wird) # sig_obj.PROFILE.verifyURL=http://www.signaturpruefung.gv.at -# -# Alternativer Text fuer den Signaturblock (WAI) (globale Einstellung) -# sig_obj.PROFILE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke. diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_NORMAL_EN.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_NORMAL_EN.properties index 903ff7d7..dadd5ad7 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_NORMAL_EN.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_NORMAL_EN.properties @@ -26,6 +26,3 @@ sig_obj.BASE_NORMAL_EN.adobeSignReasonValue=Signature verification at http://www # URL fuer die Signaturpruefung durch das Adobe Acrobat Professional PDF-AS Plugin. sig_obj.BASE_NORMAL_EN.verifyURL=http://www.signature-verification.gv.at - -# WAI -sig_obj.BASE_NORMAL_EN.sigLogoAltText=A standard signature logo is shown. diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_SMALL_EN.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_SMALL_EN.properties index 8c57d8b5..59c61e91 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_SMALL_EN.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/BASE_SMALL_EN.properties @@ -37,9 +37,6 @@ sig_obj.BASE_SMALL_EN.table.info.ColsWidth=1 2.7 #sig_obj.BASE_SMALL_EN.value.SIG_META=Information about the verification of the electronic signature can be found at: https://www.signaturpruefung.gv.at \nInformation about the verification of the printout can be found at: https://www.behoerde.gv.at/el_signatur/ #sig_obj.BASE_SMALL_EN.value.SIG_LABEL=./images/signatur-logo_en.png -# WAI -#sig_obj.BASE_SMALL_EN.sigLogoAltText=A standard signature logo is shown. - #---------------------- MAIN TABLE ------------------------- #sig_obj.BASE_SMALL_EN.table.main.ColsWidth=1 4.5 #sig_obj.BASE_SMALL_EN.table.main.Style.font=HELVETICA,5,BOLD diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/INVISIBLE.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/INVISIBLE.properties index b7193343..cc02928d 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/INVISIBLE.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles/INVISIBLE.properties @@ -5,7 +5,6 @@ sig_obj.INVISIBLE.description=Unsichtbarer Signaturblock sig_obj.types.INVISIBLE=on -sig_obj.INVISIBLE.adobeSignFieldValue=PDF-AS Signatur sig_obj.INVISIBLE.adobeSignReasonValue=Informationen zur Pr\u00fcfung finden Sie unter http://www.signaturpruefung.gv.at sig_obj.INVISIBLE.isvisible=false diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/AMTSSIGNATURBLOCK_BASE.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/AMTSSIGNATURBLOCK_BASE.properties index e77315c1..d1937dba 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/AMTSSIGNATURBLOCK_BASE.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/AMTSSIGNATURBLOCK_BASE.properties @@ -20,7 +20,5 @@ sig_obj.AMTSSIGNATURBLOCK_BASE.value.SIG_ISSUER=${issuer.T != null ? (issuer.T + sig_obj.AMTSSIGNATURBLOCK_BASE.value.SIG_NUMBER=${sn} sig_obj.AMTSSIGNATURBLOCK_BASE.pos=f:80 -sig_obj.AMTSSIGNATURBLOCK_BASE.adobeSignFieldValue=PDF-AS Signatur sig_obj.AMTSSIGNATURBLOCK_BASE.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at sig_obj.AMTSSIGNATURBLOCK_BASE.verifyURL=http://www.signaturpruefung.gv.at -sig_obj.AMTSSIGNATURBLOCK_BASE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke. diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/AMTSSIGNATURBLOCK_BASE_EN.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/AMTSSIGNATURBLOCK_BASE_EN.properties index 2d1b8d9f..2fe91334 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/AMTSSIGNATURBLOCK_BASE_EN.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/AMTSSIGNATURBLOCK_BASE_EN.properties @@ -16,7 +16,5 @@ sig_obj.AMTSSIGNATURBLOCK_BASE_EN.value.SIG_META=Information about the verificat sig_obj.AMTSSIGNATURBLOCK_BASE_EN.value.SIG_LABEL=./images/amtsignatur-logo_demo.png sig_obj.AMTSSIGNATURBLOCK_BASE_EN.value.SIG_NOTE=This document was signed/sealed with an official signature. According to \u00a7 20 Austrian E-Government-Act a printout of this document is assumed to be authentic. -sig_obj.AMTSSIGNATURBLOCK_BASE_EN.adobeSignFieldValue=PDF-AS Signature sig_obj.AMTSSIGNATURBLOCK_BASE_EN.adobeSignReasonValue=Signature verification at: http://www.signature-verification.gv.at sig_obj.AMTSSIGNATURBLOCK_BASE_EN.verifyURL=http://www.signaturpruefung.gv.at -sig_obj.AMTSSIGNATURBLOCK_BASE_EN.sigLogoAltText=A standard signature logo is shown. diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BAIK_ARCHIV_SIGNATUR.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BAIK_ARCHIV_SIGNATUR.properties index d8828ff6..e702c89f 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BAIK_ARCHIV_SIGNATUR.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BAIK_ARCHIV_SIGNATUR.properties @@ -21,16 +21,11 @@ sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_META=Hinweis sig_obj.BAIK_ARCHIV_SIGNATUR.key.SIG_TITLE=ELEKTRONISCHE ARCHIVSIGNATUR sig_obj.BAIK_ARCHIV_SIGNATUR.pos=f:80 -sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignFieldValue=ELEKTRONISCHE ARCHIVSIGNATUR - -# WAI -sig_obj.BAIK_ARCHIV_SIGNATUR.sigLogoAltText=Abgebildet ist eine Signaturbildmarke mit Bundesadler. sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_META=Dokumentenformat: ${iui.pdfVersion} sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_LABEL=./images/Baik_Archiv.gif sig_obj.BAIK_ARCHIV_SIGNATUR.value.SIG_TITLE=ELEKTRONISCHE ARCHIVSIGNATUR -sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignFieldValue=Archivsignatur sig_obj.BAIK_ARCHIV_SIGNATUR.adobeSignText.binary=Archivsignatur der BAIK sig_obj.BAIK_ARCHIV_SIGNATUR.verifyURL=http://www.signaturpruefung.gv.at diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BAIK_URKUNDE_SIGNATUR.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BAIK_URKUNDE_SIGNATUR.properties index 875943ae..7c64bbea 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BAIK_URKUNDE_SIGNATUR.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BAIK_URKUNDE_SIGNATUR.properties @@ -20,11 +20,7 @@ sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_KZ=Methode sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_META=Hinweis: sig_obj.BAIK_URKUNDE_SIGNATUR.key.SIG_TITLE=ELEKTRONISCHE BEURKUNDUNGSSIGNATUR -# WAI -sig_obj.BAIK_URKUNDE_SIGNATUR.sigLogoAltText=Abgebildet ist die Signaturbildmarke eines staatlich befugten und beeideten Ziviltechnikers mit Bundesadler. - sig_obj.BAIK_URKUNDE_SIGNATUR.pos=f:80 -sig_obj.BAIK_URKUNDE_SIGNATUR.adobeSignFieldValue=Urkundensignatur sig_obj.BAIK_URKUNDE_SIGNATUR.adobeSignText.binary=Urkundensignatur der BAIK sig_obj.BAIK_URKUNDE_SIGNATUR.verifyURL=http://www.signaturpruefung.gv.at diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_MINIMAL.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_MINIMAL.properties index 76da2bfd..dd9b5d7c 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_MINIMAL.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_MINIMAL.properties @@ -7,7 +7,6 @@ sig_obj.BASE_MINIMAL.description=Minimalbasissignatur Deutsch sig_obj.BASE_MINIMAL.key.SIG_META=Pr\u00fcfinformation sig_obj.BASE_MINIMAL.pos=w:230.0;f:80 -sig_obj.BASE_MINIMAL.adobeSignFieldValue=PDF-AS Signatur sig_obj.BASE_MINIMAL.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at sig_obj.BASE_MINIMAL.verifyURL=http://www.signaturpruefung.gv.at @@ -15,9 +14,6 @@ sig_obj.BASE_MINIMAL.value.SIG_META=Informationen zur Pr\u00FCfung der elektroni sig_obj.BASE_MINIMAL.value.SIG_LABEL=./images/signatur-logo_de.png sig_obj.BASE_MINIMAL.table.main.Style.imagescaletofit=65.0;65.0 -# WAI -sig_obj.BASE_MINIMAL.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke. - #---------------------- MAIN TABLE ------------------------- sig_obj.BASE_MINIMAL.table.main.1=SIG_LABEL-i sig_obj.BASE_MINIMAL.table.main.2=SIG_META-v diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_MINIMAL_EN.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_MINIMAL_EN.properties index 0a1871ef..7387dd3b 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_MINIMAL_EN.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_MINIMAL_EN.properties @@ -11,6 +11,3 @@ sig_obj.BASE_MINIMAL_EN.verifyURL=http://www.signature-verification.gv.at sig_obj.BASE_MINIMAL_EN.value.SIG_META=Information about the verification of the electronic signature can be found at: https://www.signaturpruefung.gv.at sig_obj.BASE_MINIMAL_EN.value.SIG_LABEL=./images/signatur-logo_en.png - -# WAI -sig_obj.BASE_MINIMAL_EN.sigLogoAltText=A standard signature logo is shown. diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_NORMAL.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_NORMAL.properties index 36304b66..ad62f50f 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_NORMAL.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_NORMAL.properties @@ -6,10 +6,6 @@ sig_obj.BASE_NORMAL.description=Basissignatur Deutsch # Aktiviert ("on") bzw. deaktiviert ("off") dieses Profil. -# "verify_only" beschraenkt das Profil auf Signaturpruefung, d.h. es kann nicht zum Erstellen von -# Signaturen verwendet werden. -# "sign_only" beschraenkt das Profil insofern, dass es nur noch zum Signieren, nicht aber -# zum Pruefen verwendet werden kann. sig_obj.types.BASE_NORMAL=on # Festlegung der einzelner Bezeichnungen im Signaturblock. @@ -52,16 +48,12 @@ sig_obj.BASE_NORMAL.value.SIG_NOTE=Dieses mit einer qualifizierten elektronische # sig_obj.PROFILE.pos=p:1;x:40.0;y:800.0;w:400.0;f:80 sig_obj.BASE_NORMAL.pos=f:80 -sig_obj.BASE_NORMAL.adobeSignFieldValue=PDF-AS Signatur # Text, der im Adobe Reader unter "Reason" angezeigt wird. sig_obj.BASE_NORMAL.adobeSignReasonValue=Signaturpruefung unter http://www.signaturpruefung.gv.at # URL fuer die Signaturpruefung durch das Adobe Acrobat Professional PDF-AS Plugin. #sig_obj.SIGNATURBLOCK_DE.verifyURL=http://www.signaturpruefung.gv.at -# WAI -sig_obj.BASE_NORMAL.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke. - # Pruefhinweis im Signaturblock #sig_obj.SIGNATURBLOCK_DE.value.SIG_META=Signaturpruefung unter: http://www.signaturpruefung.gv.at @@ -107,7 +99,7 @@ sig_obj.BASE_NORMAL.table.main.Style.imagevalign=middle # # FACE: HELVETICA | TIMES_ROMAN | COURIER # WEIGHT: float value -# STYLE: NORMAL | BOLD | ITALIC | BOLDITALIC | UNDERLINE | STRIKETHRU +# STYLE: NORMAL | BOLD | ITALIC | BOLDITALIC # # z.B. sig_obj.SIGNATURBLOCK_DE.table.main.Style.valuefont=COURIER,8,NORMAL sig_obj.BASE_NORMAL.table.main.Style.font=HELVETICA,8,BOLD @@ -132,14 +124,8 @@ sig_obj.BASE_NORMAL.table.info.3=SIG_META-cv # Name fuer die Signaturkennzeichnung (binaer) # sig_obj.PROFILE.adobeSignText.textual=PDF-AS # -# Name fuer die PDF-Signatur -# sig_obj.PROFILE.adobeSignFieldValue=PDF-AS Signatur -# # "Reason"-Feld der jeweiligen Signatur # sig_obj.PROFILE.adobeSignReasonValue=Informationen zur Pr\u00FCfung finden Sie unter http://www.signaturpruefung.gv.at # # Prueflink fuer die Adobe Signaturkennzeichnung (nur relevant falls Adobe Plugin fuer Pruefung verwendet wird) # sig_obj.PROFILE.verifyURL=http://www.signaturpruefung.gv.at -# -# Alternativer Text fuer den Signaturblock (WAI) (globale Einstellung) -# sig_obj.PROFILE.sigLogoAltText=Abgebildet ist eine Standard-Signaturbildmarke. diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_NORMAL_EN.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_NORMAL_EN.properties index 903ff7d7..dadd5ad7 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_NORMAL_EN.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_NORMAL_EN.properties @@ -26,6 +26,3 @@ sig_obj.BASE_NORMAL_EN.adobeSignReasonValue=Signature verification at http://www # URL fuer die Signaturpruefung durch das Adobe Acrobat Professional PDF-AS Plugin. sig_obj.BASE_NORMAL_EN.verifyURL=http://www.signature-verification.gv.at - -# WAI -sig_obj.BASE_NORMAL_EN.sigLogoAltText=A standard signature logo is shown. diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_SMALL_EN.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_SMALL_EN.properties index 8c57d8b5..59c61e91 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_SMALL_EN.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/BASE_SMALL_EN.properties @@ -37,9 +37,6 @@ sig_obj.BASE_SMALL_EN.table.info.ColsWidth=1 2.7 #sig_obj.BASE_SMALL_EN.value.SIG_META=Information about the verification of the electronic signature can be found at: https://www.signaturpruefung.gv.at \nInformation about the verification of the printout can be found at: https://www.behoerde.gv.at/el_signatur/ #sig_obj.BASE_SMALL_EN.value.SIG_LABEL=./images/signatur-logo_en.png -# WAI -#sig_obj.BASE_SMALL_EN.sigLogoAltText=A standard signature logo is shown. - #---------------------- MAIN TABLE ------------------------- #sig_obj.BASE_SMALL_EN.table.main.ColsWidth=1 4.5 #sig_obj.BASE_SMALL_EN.table.main.Style.font=HELVETICA,5,BOLD diff --git a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/INVISIBLE.properties b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/INVISIBLE.properties index b7193343..cc02928d 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/INVISIBLE.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/cfg/profiles_bkp/INVISIBLE.properties @@ -5,7 +5,6 @@ sig_obj.INVISIBLE.description=Unsichtbarer Signaturblock sig_obj.types.INVISIBLE=on -sig_obj.INVISIBLE.adobeSignFieldValue=PDF-AS Signatur sig_obj.INVISIBLE.adobeSignReasonValue=Informationen zur Pr\u00fcfung finden Sie unter http://www.signaturpruefung.gv.at sig_obj.INVISIBLE.isvisible=false diff --git a/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web-verify-disabled.properties b/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web-verify-disabled.properties index 168af5e9..149e4338 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web-verify-disabled.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web-verify-disabled.properties @@ -12,9 +12,8 @@ bku.local.url=http://127.0.0.1:3495/http-security-layer-request bku.online.url=https://demo.egiz.gv.at/bkuonline/http-security-layer-request -#bku.mobile.url=https://www.handy-signatur.at/mobile/https-security-layer-request/default.aspx -#bku.mobile.url=https://test1.a-trust.at/mobile/https-security-layer-request/Default.aspx -bku.mobile.url=https://www.a-trust.at/mobile/https-security-layer-request/default.aspx +#bku.mobile.url=https://hs-abnahme.a-trust.at/mobile/https-security-layer-request/default.aspx +bku.mobile.url=https://service.a-trust.at/mobile/https-security-layer-request/default.aspx sl20.sign.enabled=true sl20.mobile.url=http://localhost:7080/vda/services/getCertificate @@ -33,7 +32,7 @@ sl20.debug.signed.result.required=false sl20.debug.encryption.enabled=false sl20.debug.encryption.required=false -runtime.backend=PDFBOX_2_BACKEND +runtime.backend=PDFBOX_3_BACKEND qr.placeholder.generator.enabled=true diff --git a/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web.properties b/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web.properties index b25818ca..78969371 100644 --- a/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web.properties +++ b/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web.properties @@ -12,9 +12,7 @@ bku.local.url=http://127.0.0.1:3495/http-security-layer-request bku.online.url=https://demo.egiz.gv.at/bkuonline/http-security-layer-request -#bku.mobile.url=https://www.handy-signatur.at/mobile/https-security-layer-request/default.aspx -#bku.mobile.url=https://test1.a-trust.at/mobile/https-security-layer-request/Default.aspx -bku.mobile.url=https://www.a-trust.at/mobile/https-security-layer-request/default.aspx +bku.mobile.url=https://service.a-trust.at/mobile/https-security-layer-request/default.aspx sl20.sign.enabled=true sl20.mobile.url=http://localhost:7080/vda/services/getCertificate @@ -33,7 +31,7 @@ sl20.debug.signed.result.required=false sl20.debug.encryption.enabled=false sl20.debug.encryption.required=false -runtime.backend=PDFBOX_2_BACKEND +runtime.backend=PDFBOX_3_BACKEND qr.placeholder.generator.enabled=true -- cgit v1.2.3