From 3c4eac027bfd68bfce63a2eed010ccc2b7310802 Mon Sep 17 00:00:00 2001
From: Andreas Fitzek <andreas.fitzek@iaik.tugraz.at>
Date: Thu, 16 Oct 2014 09:43:49 +0200
Subject: PreProcessor Interface added and API rebuild

---
 .../at/gv/egiz/pdfas/web/helper/PdfAsHelper.java   | 15 +++++++++++----
 .../pdfas/web/helper/PdfAsParameterExtractor.java  | 22 ++++++++++++++++++++++
 .../egiz/pdfas/web/servlets/ExternSignServlet.java |  2 +-
 .../pdfas/web/servlets/UIEntryPointServlet.java    | 10 ++++++++--
 .../gv/egiz/pdfas/web/servlets/VerifyServlet.java  |  3 ++-
 .../at/gv/egiz/pdfas/web/ws/PDFASSigningImpl.java  | 13 ++++++++++---
 .../egiz/pdfas/web/ws/PDFASVerificationImpl.java   |  8 +++++++-
 7 files changed, 61 insertions(+), 12 deletions(-)

(limited to 'pdf-as-web/src/main/java')

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 3323a252..fc499f94 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
@@ -35,6 +35,7 @@ import java.net.URLEncoder;
 import java.security.cert.CertificateException;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import javax.imageio.ImageIO;
 import javax.servlet.RequestDispatcher;
@@ -298,7 +299,7 @@ public class PdfAsHelper {
 	}
 
 	public static List<VerifyResult> synchornousVerify(byte[] pdfData,
-			int signIdx, SignatureVerificationLevel lvl) throws Exception {
+			int signIdx, SignatureVerificationLevel lvl, Map<String, String> preProcessor) throws Exception {
 		logger.debug("Verifing Signature index: " + signIdx);
 
 		Configuration config = pdfAs.getConfiguration();
@@ -308,6 +309,7 @@ public class PdfAsHelper {
 		VerifyParameter verifyParameter = PdfAsFactory.createVerifyParameter(
 				config, dataSource);
 
+		verifyParameter.setPreprocessorArguments(preProcessor);
 		verifyParameter.setSignatureVerificationLevel(lvl);
 		verifyParameter.setDataSource(dataSource);
 		verifyParameter.setConfiguration(config);
@@ -425,6 +427,11 @@ public class PdfAsHelper {
 		// set Signature Position
 		signParameter.setSignaturePosition(params.getPosition());
 
+		// Set Preprocessor 
+		if(params.getPreprocessor() != null) {
+			signParameter.setPreprocessorArguments(params.getPreprocessor().getMap());
+		}
+		
 		SignResult signResult = pdfAs.sign(signParameter);
 
 		PDFASSignResponse signResponse = new PDFASSignResponse();
@@ -444,7 +451,7 @@ public class PdfAsHelper {
 	public static void startSignature(HttpServletRequest request,
 			HttpServletResponse response, ServletContext context,
 			byte[] pdfData, String connector, String position,
-			String transactionId, String profile) throws Exception {
+			String transactionId, String profile, Map<String, String> preProcessor) throws Exception {
 
 		// TODO: Protect session so that only one PDF can be signed during one
 		// session
@@ -483,7 +490,7 @@ public class PdfAsHelper {
 			throw new PdfAsWebException(
 					"Invalid connector (bku | onlinebku | mobilebku | moa | jks)");
 		}
-
+		signParameter.setPreprocessorArguments(preProcessor);
 		signParameter.setPlainSigner(signer);
 		session.setAttribute(PDF_SIGNER, signer);
 		session.setAttribute(PDF_SL_INTERACTIVE, connector);
@@ -677,7 +684,7 @@ public class PdfAsHelper {
 				PDFASVerificationResponse verResponse = new PDFASVerificationResponse();
 				List<VerifyResult> verResults = PdfAsHelper.synchornousVerify(
 						signedPdf, -2,
-						PdfAsHelper.getVerificationLevel(request));
+						PdfAsHelper.getVerificationLevel(request), null);
 
 				if (verResults.size() != 1) {
 					throw new WebServiceException(
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 c8f35f3c..9c5f8cc6 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
@@ -23,6 +23,10 @@
  ******************************************************************************/
 package at.gv.egiz.pdfas.web.helper;
 
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
 import javax.servlet.http.HttpServletRequest;
 
 import at.gv.egiz.pdfas.lib.api.verify.VerifyParameter.SignatureVerificationLevel;
@@ -63,6 +67,8 @@ public class PdfAsParameterExtractor {
 	public static final String PARAM_SIG_IDX = "sig-idx";
 	public static final String PARAM_FILENAME = "filename";
 	
+	public static final String PARAM_PREPROCESSOR_PREFIX = "pp:";
+	
 	public static String getConnector(HttpServletRequest request) {
 		String connector = (String)request.getAttribute(PARAM_CONNECTOR);
 		if(connector != null) {
@@ -85,6 +91,22 @@ public class PdfAsParameterExtractor {
 		return (String)request.getAttribute(PARAM_INVOKE_URL);
 	}
 	
+	public static Map<String, String> getPreProcessorMap(HttpServletRequest request) {
+		Map<String, String> map = new HashMap<String, String>();
+		
+		Enumeration<String> parameterNames = request.getAttributeNames();
+		while(parameterNames.hasMoreElements()) {
+			String parameterName = parameterNames.nextElement();
+			if(parameterName.startsWith(PARAM_PREPROCESSOR_PREFIX)) {
+				String key = parameterName.substring(PARAM_PREPROCESSOR_PREFIX.length());
+				String value = (String)request.getAttribute(parameterName);
+				map.put(key, value);
+			}
+		}
+		
+		return map;
+	}
+	
 	public static SignatureVerificationLevel getVerificationLevel(HttpServletRequest request) {
 		String value = (String)request.getAttribute(PARAM_VERIFY_LEVEL);
 		if(value != null) {
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 ce19f803..7900dfde 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
@@ -302,7 +302,7 @@ public class ExternSignServlet extends HttpServlet {
 			
 			PdfAsHelper.startSignature(request, response, getServletContext(), pdfData, connector, 
 					PdfAsHelper.buildPosString(request, response), transactionId, PdfAsParameterExtractor
-					.getSigType(request));
+					.getSigType(request), PdfAsParameterExtractor.getPreProcessorMap(request));
 			return;
 		} else if (connector.equals("jks") || connector.equals("moa")) {
 			// start synchronous siganture creation
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/UIEntryPointServlet.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/UIEntryPointServlet.java
index 544f6c83..e602a8e0 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/UIEntryPointServlet.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/UIEntryPointServlet.java
@@ -24,6 +24,7 @@
 package at.gv.egiz.pdfas.web.servlets;
 
 import java.io.IOException;
+import java.util.Map;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
@@ -147,12 +148,17 @@ public class UIEntryPointServlet extends HttpServlet {
 								"Invalid connector mobilebku is not supported");
 					}
 				}
-
+				Map<String, String> map = null;
+				if(pdfAsRequest.getParameters().getPreprocessor() != null) {
+					map = pdfAsRequest.getParameters().getPreprocessor().getMap();
+				}
+				
 				PdfAsHelper.startSignature(req, resp, getServletContext(),
 						pdfAsRequest.getInputData(), connector.toString(),
 						pdfAsRequest.getParameters().getPosition(),
 						pdfAsRequest.getParameters().getTransactionId(),
-						pdfAsRequest.getParameters().getProfile());
+						pdfAsRequest.getParameters().getProfile(), 
+						map);
 			} else {
 				throw new PdfAsWebException("Invalid connector ("
 						+ Connector.BKU + " | " + Connector.ONLINEBKU + " | "
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 09af4357..aaa6afbb 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
@@ -254,7 +254,8 @@ public class VerifyServlet extends HttpServlet {
 		
 		logger.debug("Format: " + format);
 		
-		List<VerifyResult> results = PdfAsHelper.synchornousVerify(pdfData, -1, lvl);
+		List<VerifyResult> results = PdfAsHelper.synchornousVerify(pdfData, -1, lvl, 
+				PdfAsParameterExtractor.getPreProcessorMap(request));
 
 		PdfAsHelper.setVerificationResult(request, results);
 		
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigningImpl.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigningImpl.java
index 6df63a3b..d15492b4 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigningImpl.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigningImpl.java
@@ -25,6 +25,7 @@ package at.gv.egiz.pdfas.web.ws;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import javax.jws.WebService;
 import javax.xml.ws.WebServiceException;
@@ -39,7 +40,6 @@ 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.api.ws.PDFASSigning;
-import at.gv.egiz.pdfas.api.ws.PDFASVerificationResponse;
 import at.gv.egiz.pdfas.api.ws.VerificationLevel;
 import at.gv.egiz.pdfas.lib.api.verify.VerifyParameter.SignatureVerificationLevel;
 import at.gv.egiz.pdfas.lib.api.verify.VerifyResult;
@@ -79,6 +79,11 @@ public class PDFASSigningImpl implements PDFASSigning {
 						"Invalid connector value!");
 			}
 			
+			Map<String, String> preProcessor = null;
+			if(request.getParameters().getPreprocessor() != null) {
+				preProcessor = request.getParameters().getPreprocessor().getMap();
+			}
+			
 			if (request.getParameters().getConnector().equals(Connector.MOA)
 					|| request.getParameters().getConnector()
 							.equals(Connector.JKS)) {
@@ -94,7 +99,8 @@ public class PDFASSigningImpl implements PDFASSigning {
 							.synchornousVerify(
 									response.getSignedPDF(),
 									-1,
-									SignatureVerificationLevel.FULL_VERIFICATION);
+									SignatureVerificationLevel.FULL_VERIFICATION, 
+									preProcessor);
 
 					if (verResults.size() != 1) {
 						throw new WebServiceException(
@@ -106,7 +112,8 @@ public class PDFASSigningImpl implements PDFASSigning {
 							.synchornousVerify(
 									response.getSignedPDF(),
 									-1,
-									SignatureVerificationLevel.INTEGRITY_ONLY_VERIFICATION);
+									SignatureVerificationLevel.INTEGRITY_ONLY_VERIFICATION, 
+									preProcessor);
 
 					if (verResults.size() != 1) {
 						throw new WebServiceException(
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 c6fb8cd7..0257f835 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
@@ -4,6 +4,7 @@ import iaik.x509.X509Certificate;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import javax.jws.WebService;
 import javax.xml.ws.WebServiceException;
@@ -44,6 +45,11 @@ public class PDFASVerificationImpl implements PDFASVerification {
 				sigIdx = request.getSignatureIndex().intValue();
 			}
 
+			Map<String, String> preProcessor = null;
+			if(request.getPreprocessor() != null) {
+				preProcessor = request.getPreprocessor().getMap();
+			}
+			
 			SignatureVerificationLevel lvl = SignatureVerificationLevel.INTEGRITY_ONLY_VERIFICATION;
 
 			if (request.getVerificationLevel().equals(
@@ -55,7 +61,7 @@ public class PDFASVerificationImpl implements PDFASVerification {
 			}
 
 			List<VerifyResult> results = PdfAsHelper.synchornousVerify(
-					request.getInputData(), sigIdx, lvl);
+					request.getInputData(), sigIdx, lvl, preProcessor);
 			
 			for(int i = 0; i < results.size(); i++) {
 				VerifyResult result = results.get(i);
-- 
cgit v1.2.3