aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-web/src
diff options
context:
space:
mode:
authorJakob Heher <jakob.heher@iaik.tugraz.at>2026-04-30 10:21:59 +0200
committerGitHub <noreply@github.com>2026-04-30 10:21:59 +0200
commite2bfdc313c0b6395d272624688b4ed1cba7ce967 (patch)
treeda96c8ed518f18cd3c676605004f5c80daf5570b /pdf-as-web/src
parent3901740beba6b2673246b1171c12f908f8a359bb (diff)
downloadpdf-as-4-e2bfdc313c0b6395d272624688b4ed1cba7ce967.tar.gz
pdf-as-4-e2bfdc313c0b6395d272624688b4ed1cba7ce967.tar.bz2
pdf-as-4-e2bfdc313c0b6395d272624688b4ed1cba7ce967.zip
Move pdf-as-web.conf to Spring & add MOA timeout (#84)
* move -Dpdf-as-web.conf to spring * add configurable timeout to MOA signing * update workflow trigger
Diffstat (limited to 'pdf-as-web/src')
-rw-r--r--pdf-as-web/src/main/configuration/pdf-as-web.properties1
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/PdfAsWebSpringConfiguration.java15
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/WebConfiguration.java5
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/helper/PdfAsHelper.java2
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/ExternSignServlet.java19
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/ReloadServlet.java36
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/VerifyServlet.java5
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/web_xml_bridges/ServletBridge.java24
-rw-r--r--pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleSignServletTest.java (renamed from pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleSignServletTest.java)88
-rw-r--r--pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleVerifyServletTest.java (renamed from pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleVerifyServletTest.java)118
-rw-r--r--pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/MockMoaSigningTest.java18
-rw-r--r--pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceTest.java53
-rw-r--r--pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceWithoutVerificationTest.java50
13 files changed, 194 insertions, 240 deletions
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 845a82e0..98249adf 100644
--- a/pdf-as-web/src/main/configuration/pdf-as-web.properties
+++ b/pdf-as-web/src/main/configuration/pdf-as-web.properties
@@ -50,6 +50,7 @@ ksl.test.key.pass=123456
# Example Entry with address "test"
moal.test.enabled=true
moal.test.url=http://localhost:8080/moa-spss/services/SignatureCreation
+moal.test.timeout=30000
moal.test.KeyIdentifier=KG_ECC_TEST
moal.test.Certificate=KG_ECC_TEST.crt
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/PdfAsWebSpringConfiguration.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/PdfAsWebSpringConfiguration.java
new file mode 100644
index 00000000..fcaf2b81
--- /dev/null
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/PdfAsWebSpringConfiguration.java
@@ -0,0 +1,15 @@
+package at.gv.egiz.pdfas.web.config;
+
+import lombok.Getter;
+import lombok.NonNull;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+public class PdfAsWebSpringConfiguration {
+ @Value("${pdf-as-web.conf}")
+ @Getter
+ @NonNull String pdfAsWebConfPath;
+}
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 c7d36d9a..0b3fdf05 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
@@ -68,6 +68,7 @@ public class WebConfiguration implements IConfigurationConstants {
public static final String MOA_LIST = "moal";
public static final String MOA_URL = "url";
+ public static final String MOA_TIMEOUT = "timeout";
public static final String MOA_KEYID = "KeyIdentifier";
public static final String MOA_CERT = "Certificate";
@@ -394,6 +395,10 @@ public class WebConfiguration implements IConfigurationConstants {
public static String getMoaURL(String keyIdentifier) {
return properties.getProperty(MOA_LIST + "." + keyIdentifier + "." + MOA_URL);
}
+
+ public static String getMoaTimeout(String keyIdentifier) {
+ return properties.getProperty(MOA_LIST + "." + keyIdentifier + "." + MOA_TIMEOUT);
+ }
public static String getMoaKeyID(String keyIdentifier) {
return properties.getProperty(MOA_LIST + "." + keyIdentifier + "." + MOA_KEYID);
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 841acca9..95e9089f 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
@@ -433,11 +433,13 @@ public class PdfAsHelper {
}
String url = WebConfiguration.getMoaURL(keyIdentifier);
+ String timeout = WebConfiguration.getMoaTimeout(keyIdentifier);
String keyId = WebConfiguration.getMoaKeyID(keyIdentifier);
String certificate = WebConfiguration
.getMoaCertificate(keyIdentifier);
config.setValue(IConfigurationConstants.MOA_SIGN_URL, url);
+ config.setValue(IConfigurationConstants.MOA_SIGN_TIMEOUT, timeout);
config.setValue(IConfigurationConstants.MOA_SIGN_KEY_ID, keyId);
config.setValue(IConfigurationConstants.MOA_SIGN_CERTIFICATE,
certificate);
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 0a806369..a28a4835 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
@@ -28,6 +28,7 @@ import java.io.IOException;
import java.util.List;
import java.util.Map;
+import at.gv.egiz.pdfas.web.config.PdfAsWebSpringConfiguration;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
@@ -64,17 +65,18 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.fileupload2.jakarta.servlet6.JakartaServletDiskFileUpload;
import org.apache.commons.fileupload2.jakarta.servlet6.JakartaServletFileUpload;
import org.apache.commons.io.FilenameUtils;
+import org.springframework.boot.web.servlet.ServletRegistration;
+import org.springframework.stereotype.Component;
/**
* Servlet implementation class Sign
*/
@Slf4j
+@Component
+@ServletRegistration(urlMappings = "/Sign")
public class ExternSignServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
-
- // TODO: get this from spring instead of -D
- public static final String PDF_AS_WEB_CONF = "pdf-as-web.conf";
private static final String UPLOAD_PDF_DATA = "pdf-file";
private static final String UPLOAD_DIRECTORY = "upload";
@@ -83,15 +85,8 @@ public class ExternSignServlet extends HttpServlet {
* Default constructor.
*/
- public ExternSignServlet(){
- String webconfig = System.getProperty(PDF_AS_WEB_CONF);
-
- if(webconfig == null) {
- log.error("No web configuration provided! Please specify: " + PDF_AS_WEB_CONF);
- throw new RuntimeException("No web configuration provided! Please specify: " + PDF_AS_WEB_CONF);
- }
-
- WebConfiguration.configure(webconfig);
+ public ExternSignServlet(final PdfAsWebSpringConfiguration config) {
+ WebConfiguration.configure(config.getPdfAsWebConfPath());
PdfAsHelper.init();
try {
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/ReloadServlet.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/ReloadServlet.java
index c4db303f..89d33e80 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/ReloadServlet.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/ReloadServlet.java
@@ -3,17 +3,26 @@ package at.gv.egiz.pdfas.web.servlets;
import java.io.IOException;
import java.io.OutputStream;
+import at.gv.egiz.pdfas.web.config.PdfAsWebSpringConfiguration;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
+import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import at.gv.egiz.pdfas.web.config.WebConfiguration;
import at.gv.egiz.pdfas.web.helper.PdfAsHelper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.web.servlet.ServletRegistration;
+import org.springframework.stereotype.Component;
+@Slf4j
+@Component
+@ServletRegistration(urlMappings = "/Reload")
public class ReloadServlet extends HttpServlet {
/**
@@ -21,17 +30,12 @@ public class ReloadServlet extends HttpServlet {
*/
private static final long serialVersionUID = 6108555300743896727L;
- private static final Logger logger = LoggerFactory
- .getLogger(ReloadServlet.class);
-
- public static final String PDF_AS_WEB_CONF = "pdf-as-web.conf";
public static final String PARAM_PASSWD = "PASSWD";
- /**
- * @see HttpServlet#HttpServlet()
- */
- public ReloadServlet() {
+ private final PdfAsWebSpringConfiguration config;
+ public ReloadServlet(final PdfAsWebSpringConfiguration config) {
super();
+ this.config = config;
}
/**
@@ -42,15 +46,15 @@ public class ReloadServlet extends HttpServlet {
HttpServletResponse response) throws ServletException, IOException {
if(!WebConfiguration.getReloadEnabled()) {
- logger.info("Reload Servlet disabled. " + request.getRemoteAddr() + " tried to call it");
+ log.info("Reload Servlet disabled. " + request.getRemoteAddr() + " tried to call it");
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
response.setContentLength(0);
return;
}
- logger.info("Called Reload Servlet from: " + request.getRemoteAddr());
+ log.info("Called Reload Servlet from: " + request.getRemoteAddr());
- logger.info("Checking Password!");
+ log.info("Checking Password!");
String pwd = request.getParameter(PARAM_PASSWD);
@@ -66,17 +70,11 @@ public class ReloadServlet extends HttpServlet {
return;
}
- String webconfig = System.getProperty(PDF_AS_WEB_CONF);
-
- if(webconfig == null) {
- logger.error("No web configuration provided! Please specify: " + PDF_AS_WEB_CONF);
- throw new RuntimeException("No web configuration provided! Please specify: " + PDF_AS_WEB_CONF);
- }
-
+ String webconfig = config.getPdfAsWebConfPath();
WebConfiguration.configure(webconfig);
PdfAsHelper.reloadConfig();
- logger.info("Reloaded!");
+ log.info("Reloaded!");
StringBuilder sb = new StringBuilder();
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/VerifyServlet.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/VerifyServlet.java
index 4a80e25d..2334597a 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/VerifyServlet.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/VerifyServlet.java
@@ -58,10 +58,15 @@ import at.gv.egiz.pdfas.web.stats.StatisticEvent.Operation;
import at.gv.egiz.pdfas.web.stats.StatisticEvent.Source;
import at.gv.egiz.pdfas.web.stats.StatisticEvent.Status;
import at.gv.egiz.pdfas.web.stats.StatisticFrontend;
+import org.springframework.boot.web.servlet.ServletRegistration;
+import org.springframework.stereotype.Component;
/**
* Servlet implementation class VerifyServlet
*/
+
+@Component
+@ServletRegistration(urlMappings = "/Verify")
public class VerifyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/web_xml_bridges/ServletBridge.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/web_xml_bridges/ServletBridge.java
index af59a7d6..3337a417 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/web_xml_bridges/ServletBridge.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/web_xml_bridges/ServletBridge.java
@@ -18,14 +18,6 @@ public class ServletBridge {
}
@Bean
- public ServletRegistrationBean<Servlet> signServlet() {
- return new ServletRegistrationBean<>(
- new ExternSignServlet(),
- "/Sign"
- );
- }
-
- @Bean
public ServletRegistrationBean<Servlet> visBlockServlet() {
return new ServletRegistrationBean<>(
new VisBlockServlet(),
@@ -42,14 +34,6 @@ public class ServletBridge {
}
@Bean
- public ServletRegistrationBean<Servlet> reloadServlet() {
- return new ServletRegistrationBean<>(
- new ReloadServlet(),
- "/Reload"
- );
- }
-
- @Bean
public ServletRegistrationBean<Servlet> dataURLServlet() {
return new ServletRegistrationBean<>(
new DataURLServlet(),
@@ -66,14 +50,6 @@ public class ServletBridge {
}
@Bean
- public ServletRegistrationBean<Servlet> verifyServlet() {
- return new ServletRegistrationBean<>(
- new VerifyServlet(),
- "/Verify"
- );
- }
-
- @Bean
public ServletRegistrationBean<Servlet> pdfData() {
return new ServletRegistrationBean<>(
new PDFData(),
diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleSignServletTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleSignServletTest.java
index 8ab9cfaf..da735c8c 100644
--- a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleSignServletTest.java
+++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleSignServletTest.java
@@ -1,33 +1,37 @@
-package at.gv.egiz.pdfas.web.test;
+package at.gv.egiz.pdfas.web.servlets;
import static org.junit.Assert.assertNotNull;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Enumeration;
-import jakarta.servlet.ServletConfig;
-import jakarta.servlet.ServletContext;
+
+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;
import org.apache.commons.io.IOUtils;
+import org.junit.Before;
import org.junit.BeforeClass;
-import org.junit.Ignore;
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.web.filter.UserAgentFilter;
-import at.gv.egiz.pdfas.web.servlets.ExternSignServlet;
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;
+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
-@RunWith(BlockJUnit4ClassRunner.class)
+@RunWith(SpringRunner.class)
+@SpringBootTest
public class SimpleSignServletTest {
@@ -38,11 +42,22 @@ public class SimpleSignServletTest {
current + "/src/test/resources/config/pdfas/pdf-as-web.properties");
}
-
-
+
+ @Before
+ @SneakyThrows
+ public void setup() {
+ servlet.init(
+ new MockServletConfig(
+ new MockServletContext("src/main/webapp"),
+ "ExternSignServlet")
+ );
+ }
+
+ @Autowired private ExternSignServlet servlet;
+
@Test
- public void sigBlockParameterTest() throws NoSuchMethodException, SecurityException, IllegalAccessException,
- IllegalArgumentException, InvocationTargetException, IOException, ServletException {
+ @SneakyThrows
+ public void sigBlockParameterTest() {
byte[] pdf = IOUtils.toByteArray(SimpleSignServletTest.class.getResourceAsStream("/data/enc_own.pdf"));
MockHttpServletRequest httpReq = new MockHttpServletRequest("POST", "https://localhost/pdfas");
@@ -64,55 +79,14 @@ public class SimpleSignServletTest {
}
-
- private void performTest(HttpServletRequest httpReq, HttpServletResponse httpResp, byte[] pdf) throws NoSuchMethodException,
- SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, ServletException {
- ExternSignServlet servlet = new ExternSignServlet();
- ServletConfig servletConfig = buildServletConfig();
- servlet.init(servletConfig);
-
- Method method = servlet.getClass().getDeclaredMethod("doSignature",
- HttpServletRequest.class, HttpServletResponse.class, byte[].class, StatisticEvent.class);
- method.setAccessible(true);
+ @SneakyThrows
+ private void performTest(HttpServletRequest httpReq, HttpServletResponse httpResp, byte[] pdf) {
StatisticEvent statisticEvent = new StatisticEvent();
statisticEvent.setStartNow();
statisticEvent.setSource(Source.WEB);
statisticEvent.setOperation(Operation.SIGN);
statisticEvent.setUserAgent(UserAgentFilter.getUserAgent());
+ servlet.doSignature(httpReq, httpResp, pdf, statisticEvent);
- method.invoke(servlet, httpReq, httpResp, pdf, statisticEvent);
-
- }
-
-
- private ServletConfig buildServletConfig() {
-
- return new ServletConfig() {
-
- private ServletContext servletContext = null;
-
- @Override
- public String getServletName() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public ServletContext getServletContext() {
- return servletContext;
- }
-
- @Override
- public Enumeration<String> getInitParameterNames() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public String getInitParameter(String name) {
- // TODO Auto-generated method stub
- return null;
- }
- };
}
}
diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleVerifyServletTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleVerifyServletTest.java
index e0075940..3b5d223c 100644
--- a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleVerifyServletTest.java
+++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/servlets/SimpleVerifyServletTest.java
@@ -1,4 +1,4 @@
-package at.gv.egiz.pdfas.web.test;
+package at.gv.egiz.pdfas.web.servlets;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -15,12 +15,16 @@ import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
+import lombok.val;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
+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;
@@ -30,13 +34,16 @@ 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.servlets.VerifyServlet;
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;
import lombok.SneakyThrows;
+import org.springframework.mock.web.MockServletConfig;
+import org.springframework.mock.web.MockServletContext;
+import org.springframework.test.context.junit4.SpringRunner;
-@RunWith(BlockJUnit4ClassRunner.class)
+@RunWith(SpringRunner.class)
+@SpringBootTest
public class SimpleVerifyServletTest {
@@ -45,56 +52,50 @@ public class SimpleVerifyServletTest {
final String current = new java.io.File(".").getCanonicalPath();
System.setProperty("pdf-as-web.conf",
current + "/src/test/resources/config/pdfas/pdf-as-web.properties");
-
- String webconfig = System.getProperty("pdf-as-web.conf");
-
- if(webconfig == null) {
- throw new RuntimeException("No web configuration provided!");
- }
-
- WebConfiguration.configure(webconfig);
- PdfAsHelper.init();
-
- try {
- PdfAsFactory.validateConfiguration((ISettings)PdfAsHelper.getPdfAsConfig());
-
- } catch (PdfAsSettingsValidationException e) {
- e.printStackTrace();
- }
}
+
+ @Before
+ @SneakyThrows
+ public void setup() {
+ servlet.init(
+ new MockServletConfig(
+ new MockServletContext("src/main/webapp"),
+ "VerifyServlet")
+ );
+ }
+
+
+ @SuppressWarnings("unused") @Autowired private ExternSignServlet dummy; /* ExternSignServlet ctor does web config init */
+ @Autowired private VerifyServlet servlet;
@Test
@SneakyThrows
- public void unsignedPdf() {
- byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/enc_own.pdf"));
- executeTest(pdf);
-
+ public void unsignedPdf() {
+ executeTest("/data/enc_own.pdf");
}
- @Test
- @SneakyThrows
- public void unsignedWithSigField() {
- byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/placeholder_sigfield_and_qr.pdf"));
- executeTest(pdf);
-
- }
+ @Test
+ @SneakyThrows
+ public void unsignedWithSigField() {
+ executeTest("/data/placeholder_sigfield_and_qr.pdf");
+ }
@Test
- @SneakyThrows
- public void signedPdf() {
- byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/dummy-pdf-signed.pdf"));
- executeTest(pdf);
-
- }
+ @SneakyThrows
+ public void signedPdf() {
+ executeTest("/data/dummy-pdf-signed.pdf");
+
+ }
@SneakyThrows
- private MockHttpServletResponse executeTest(byte[] pdf) {
- MockHttpServletRequest httpReq = new MockHttpServletRequest("POST", "https://localhost/pdfas");
- MockHttpServletResponse httpResp = new MockHttpServletResponse();
+ private MockHttpServletResponse executeTest(String pdfResource) {
+ val pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream(pdfResource));
+ MockHttpServletRequest httpReq = new MockHttpServletRequest("POST", "https://localhost/pdfas");
+ MockHttpServletResponse httpResp = new MockHttpServletResponse();
// perform operation
performTest(httpReq, httpResp, pdf);
@@ -110,11 +111,8 @@ public class SimpleVerifyServletTest {
}
- private void performTest(HttpServletRequest httpReq, HttpServletResponse httpResp, byte[] pdf) throws NoSuchMethodException,
- SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, ServletException {
- VerifyServlet servlet = new VerifyServlet ();
- ServletConfig servletConfig = buildServletConfig();
- servlet.init(servletConfig);
+ @SneakyThrows
+ private void performTest(HttpServletRequest httpReq, HttpServletResponse httpResp, byte[] pdf) {
Method method = servlet.getClass().getDeclaredMethod("doVerify",
HttpServletRequest.class, HttpServletResponse.class, byte[].class, StatisticEvent.class);
@@ -128,36 +126,4 @@ public class SimpleVerifyServletTest {
method.invoke(servlet, httpReq, httpResp, pdf, statisticEvent);
}
-
-
- private ServletConfig buildServletConfig() {
-
- return new ServletConfig() {
-
- private ServletContext servletContext = null;
-
- @Override
- public String getServletName() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public ServletContext getServletContext() {
- return servletContext;
- }
-
- @Override
- public Enumeration<String> getInitParameterNames() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public String getInitParameter(String name) {
- // TODO Auto-generated method stub
- return null;
- }
- };
- }
}
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 466cfcca..10e87af6 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
@@ -9,6 +9,7 @@ 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;
@@ -42,11 +43,8 @@ import java.security.PrivateKey;
import java.util.*;
import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
@RunWith(SpringRunner.class)
@SpringBootTest(properties = {
@@ -57,6 +55,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
public class MockMoaSigningTest {
@Autowired MockMvc mvc;
@Autowired ObjectMapper om;
+ @Autowired PdfAsWebSpringConfiguration config;
static {
try {
@@ -78,7 +77,7 @@ public class MockMoaSigningTest {
targetNamespace = "http://reference.e-government.gv.at/namespace/moa/20020822#",
endpointInterface =
"at.gv.e_government.reference.namespace.moa._20020822_.SignatureCreationPortType")
- static class MockMoa implements AutoCloseable, SignatureCreationPortType {
+ class MockMoa implements AutoCloseable, SignatureCreationPortType {
@SneakyThrows
private static int freePort() {
try (ServerSocket socket = new ServerSocket(0)) {
@@ -100,8 +99,8 @@ public class MockMoaSigningTest {
public final IPlainSigner signer;
@SneakyThrows
- private static Properties getBaseProperties() {
- try (InputStream in = new FileInputStream(System.getProperty(ExternSignServlet.PDF_AS_WEB_CONF))) {
+ private Properties getBaseProperties() {
+ try (InputStream in = new FileInputStream(config.getPdfAsWebConfPath())) {
val props = new Properties();
props.load(in);
return props;
@@ -109,7 +108,7 @@ public class MockMoaSigningTest {
}
@SneakyThrows
- private static void injectProperties(Map<String, String> overlay) {
+ private void injectProperties(Map<String, String> overlay) {
val props = getBaseProperties();
if (overlay != null) overlay.forEach(props::setProperty);
try (val out = new ByteArrayOutputStream()) {
@@ -141,6 +140,7 @@ public class MockMoaSigningTest {
injectProperties(Map.of(
"moal."+keyIdentifier+".enabled", "true",
"moal."+keyIdentifier+".url", endpointURL,
+ "moal."+keyIdentifier+".timeout", "5000",
"moal."+keyIdentifier+".KeyIdentifier", "KG_TEST",
"moal."+keyIdentifier+".Certificate",
"base64:"+Base64.getEncoder().encodeToString(signer.getCertificate(null).getEncoded())
@@ -231,7 +231,7 @@ public class MockMoaSigningTest {
@SneakyThrows
public CreateCMSSignatureResponseType createCMSSignature(CreateCMSSignatureRequest body) throws MOAFault {
// this will cause a timeout
- Thread.sleep(300 * 1000);
+ Thread.sleep(10 * 1000);
throw new RuntimeException("unreachable");
}
}) {
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 1d958323..7d81465a 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
@@ -4,8 +4,14 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.IOException;
+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;
import org.apache.commons.io.IOUtils;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -23,8 +29,15 @@ 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;
-@RunWith(BlockJUnit4ClassRunner.class)
+import javax.xml.namespace.QName;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SimpleWebServiceTest {
@BeforeClass
@@ -32,28 +45,20 @@ public class SimpleWebServiceTest {
final String current = new java.io.File(".").getCanonicalPath();
System.setProperty("pdf-as-web.conf",
current + "/src/test/resources/config/pdfas/pdf-as-web.properties");
-
- String webconfig = System.getProperty("pdf-as-web.conf");
-
- if(webconfig == null) {
- throw new RuntimeException("No web configuration provided!");
- }
-
- WebConfiguration.configure(webconfig);
- PdfAsHelper.init();
-
- try {
- PdfAsFactory.validateConfiguration((ISettings)PdfAsHelper.getPdfAsConfig());
-
- } catch (PdfAsSettingsValidationException e) {
- e.printStackTrace();
- }
}
+
+ @BeforeClass
+ public static void jceWorkaround() {
+ System.setProperty("javax.net.ssl.trustStoreType", "JKS");
+ }
+
+ @LocalServerPort
+ int port;
@Test
@SneakyThrows
public void sign() {
- byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/enc_own.pdf"));
+ byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/enc_own.pdf"));
PDFASSignResponse resp = executeTest(pdf);
assertNotNull("signed doc", resp.getSignedPDF());
assertEquals("sign check", 0, resp.getVerificationResponse().getValueCode());
@@ -64,7 +69,7 @@ public class SimpleWebServiceTest {
@Test
@SneakyThrows
public void withSignatureFields() {
- byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/placeholder_sigfield_and_qr.pdf"));
+ byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/placeholder_sigfield_and_qr.pdf"));
PDFASSignResponse resp = executeTest(pdf);
assertNotNull("signed doc", resp.getSignedPDF());
assertEquals("sign check", 0, resp.getVerificationResponse().getValueCode());
@@ -74,7 +79,11 @@ public class SimpleWebServiceTest {
@SneakyThrows
private PDFASSignResponse executeTest(byte[] pdf) {
- PDFASSigningImpl service = new PDFASSigningImpl();
+ val wsdl = new URL("http://localhost:"+port+"/services/wssign?wsdl");
+ val serviceName = new QName(
+ "http://ws.web.pdfas.egiz.gv.at/",
+ "PDFASSigningImplService");
+ val proxy = Service.create(wsdl, serviceName).getPort(PDFASSigning.class);
PDFASSignRequest req = new PDFASSignRequest();
req.setRequestID(UUID.randomUUID().toString());
@@ -82,9 +91,9 @@ public class SimpleWebServiceTest {
PDFASSignParameters signParams = new PDFASSignParameters();
signParams.setConnector(Connector.JKS);
signParams.setTransactionId(UUID.randomUUID().toString());
- req.setParameters(signParams );
+ req.setParameters(signParams);
- PDFASSignResponse resp = service.signPDFDokument(req);
+ PDFASSignResponse resp = proxy.signPDFDokument(req);
assertNotNull(resp);
return resp;
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 d7529721..7954415b 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
@@ -4,8 +4,13 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.IOException;
+import java.net.URL;
import java.util.UUID;
+import at.gv.egiz.pdfas.api.ws.PDFASSigning;
+import at.gv.egiz.pdfas.web.servlets.SimpleVerifyServletTest;
+import jakarta.xml.ws.Service;
+import lombok.val;
import org.apache.commons.io.IOUtils;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -23,8 +28,15 @@ 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;
-@RunWith(BlockJUnit4ClassRunner.class)
+import javax.xml.namespace.QName;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SimpleWebServiceWithoutVerificationTest {
@BeforeClass
@@ -32,28 +44,20 @@ public class SimpleWebServiceWithoutVerificationTest {
final String current = new java.io.File(".").getCanonicalPath();
System.setProperty("pdf-as-web.conf",
current + "/src/test/resources/config/pdfas/pdf-as-web-verify-disabled.properties");
-
- String webconfig = System.getProperty("pdf-as-web.conf");
-
- if(webconfig == null) {
- throw new RuntimeException("No web configuration provided!");
- }
-
- WebConfiguration.configure(webconfig);
- PdfAsHelper.init();
-
- try {
- PdfAsFactory.validateConfiguration((ISettings)PdfAsHelper.getPdfAsConfig());
-
- } catch (PdfAsSettingsValidationException e) {
- e.printStackTrace();
- }
}
+
+ @BeforeClass
+ public static void jceWorkaround() {
+ System.setProperty("javax.net.ssl.trustStoreType", "JKS");
+ }
+
+ @LocalServerPort
+ int port;
@Test
@SneakyThrows
public void sign() {
- byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/enc_own.pdf"));
+ byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/enc_own.pdf"));
PDFASSignResponse resp = executeTest(pdf);
assertNotNull("signed doc", resp.getSignedPDF());
assertEquals("sign check", 0, resp.getVerificationResponse().getValueCode());
@@ -64,7 +68,7 @@ public class SimpleWebServiceWithoutVerificationTest {
@Test
@SneakyThrows
public void withSignatureFields() {
- byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/placeholder_sigfield_and_qr.pdf"));
+ byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/placeholder_sigfield_and_qr.pdf"));
PDFASSignResponse resp = executeTest(pdf);
assertNotNull("signed doc", resp.getSignedPDF());
assertEquals("sign check", 0, resp.getVerificationResponse().getValueCode());
@@ -74,7 +78,11 @@ public class SimpleWebServiceWithoutVerificationTest {
@SneakyThrows
private PDFASSignResponse executeTest(byte[] pdf) {
- PDFASSigningImpl service = new PDFASSigningImpl();
+ val wsdl = new URL("http://localhost:"+port+"/services/wssign?wsdl");
+ val serviceName = new QName(
+ "http://ws.web.pdfas.egiz.gv.at/",
+ "PDFASSigningImplService");
+ val proxy = Service.create(wsdl, serviceName).getPort(PDFASSigning.class);
PDFASSignRequest req = new PDFASSignRequest();
req.setRequestID(UUID.randomUUID().toString());
@@ -84,7 +92,7 @@ public class SimpleWebServiceWithoutVerificationTest {
signParams.setTransactionId(UUID.randomUUID().toString());
req.setParameters(signParams );
- PDFASSignResponse resp = service.signPDFDokument(req);
+ PDFASSignResponse resp = proxy.signPDFDokument(req);
assertNotNull(resp);
return resp;