From 53d5b439a422c72e6f94a2fb1012c85732e33bfe Mon Sep 17 00:00:00 2001 From: Andreas Fitzek Date: Tue, 6 May 2014 12:20:08 +0200 Subject: PDF-AS 4 RC2 --- .../at/gv/egiz/pdfas/web/helper/PdfAsHelper.java | 75 +++++++++++++++++++--- .../gv/egiz/pdfas/web/servlets/DataURLServlet.java | 6 +- .../gv/egiz/pdfas/web/ws/PDFASSignParameters.java | 43 +++++++++++++ .../java/at/gv/egiz/pdfas/web/ws/PDFASSigning.java | 11 ++++ .../at/gv/egiz/pdfas/web/ws/PDFASSigningImpl.java | 34 ++++++++++ .../java/at/gv/egiz/pdfas/web/ws/package-info.java | 8 +++ pdf-as-web/src/main/webapp/WEB-INF/sun-jaxws.xml | 7 ++ pdf-as-web/src/main/webapp/WEB-INF/web.xml | 13 ++++ 8 files changed, 185 insertions(+), 12 deletions(-) create mode 100644 pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSignParameters.java create mode 100644 pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigning.java create mode 100644 pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigningImpl.java create mode 100644 pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/package-info.java create mode 100644 pdf-as-web/src/main/webapp/WEB-INF/sun-jaxws.xml (limited to 'pdf-as-web/src') 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 f9d3e720..75c98610 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 @@ -57,14 +57,17 @@ import at.gv.egiz.pdfas.sigs.pades.PAdESSigner; import at.gv.egiz.pdfas.sigs.pkcs7detached.PKCS7DetachedSigner; import at.gv.egiz.pdfas.web.config.WebConfiguration; import at.gv.egiz.pdfas.web.exception.PdfAsWebException; -import at.gv.egiz.sl.CreateCMSSignatureRequestType; -import at.gv.egiz.sl.CreateCMSSignatureResponseType; -import at.gv.egiz.sl.InfoboxAssocArrayPairType; -import at.gv.egiz.sl.InfoboxReadRequestType; -import at.gv.egiz.sl.InfoboxReadResponseType; -import at.gv.egiz.sl.ObjectFactory; +import at.gv.egiz.pdfas.web.ws.PDFASSignParameters; +import at.gv.egiz.pdfas.web.ws.PDFASSignParameters.Connector; +import at.gv.egiz.sl.schema.CreateCMSSignatureRequestType; +import at.gv.egiz.sl.schema.CreateCMSSignatureResponseType; +import at.gv.egiz.sl.schema.InfoboxAssocArrayPairType; +import at.gv.egiz.sl.schema.InfoboxReadRequestType; +import at.gv.egiz.sl.schema.InfoboxReadResponseType; +import at.gv.egiz.sl.schema.ObjectFactory; import at.gv.egiz.sl.util.BKUSLConnector; import at.gv.egiz.sl.util.MOAConnector; +import at.gv.egiz.sl.util.RequestPackage; import at.gv.egiz.sl.util.SLMarschaller; public class PdfAsHelper { @@ -295,13 +298,15 @@ public class PdfAsHelper { IPlainSigner signer; if (connector.equals("moa")) { signer = new PAdESSigner(new MOAConnector(config)); - } else { + } else if(connector.equals("jks")) { signer = new PKCS7DetachedSigner( WebConfiguration.getKeystoreFile(), WebConfiguration.getKeystoreAlias(), WebConfiguration.getKeystorePass(), WebConfiguration.getKeystoreKeyPass(), WebConfiguration.getKeystoreType()); + } else { + throw new PdfAsWebException("Invalid connector (moa | jks)"); } signParameter.setPlainSigner(signer); @@ -321,6 +326,57 @@ public class PdfAsHelper { return output.getData(); } + /** + * Create synchronous PDF Signature + * + * @param request + * The Web request + * @param response + * The Web response + * @param pdfData + * The pdf data + * @return The signed pdf data + * @throws Exception + */ + public static byte[] synchornousServerSignature(byte[] pdfData, PDFASSignParameters params) throws Exception { + Configuration config = pdfAs.getConfiguration(); + + // Generate Sign Parameter + SignParameter signParameter = PdfAsFactory.createSignParameter(config, + new ByteArrayDataSource(pdfData)); + + // Get Connector + + IPlainSigner signer; + if (params.getConnector().equals(Connector.MOA)) { + signer = new PAdESSigner(new MOAConnector(config)); + } else if(params.getConnector().equals(Connector.JKS)) { + signer = new PKCS7DetachedSigner( + WebConfiguration.getKeystoreFile(), + WebConfiguration.getKeystoreAlias(), + WebConfiguration.getKeystorePass(), + WebConfiguration.getKeystoreKeyPass(), + WebConfiguration.getKeystoreType()); + } else { + throw new PdfAsWebException("Invalid connector (moa | jks)"); + } + + signParameter.setPlainSigner(signer); + + // set Signature Profile (null use default ...) + signParameter.setSignatureProfileId(params.getProfile()); + + ByteArrayDataSink output = new ByteArrayDataSink(); + signParameter.setOutput(output); + + // set Signature Position + signParameter.setSignaturePosition(params.getPosition()); + + pdfAs.sign(signParameter); + + return output.getData(); + } + public static void startSignature(HttpServletRequest request, HttpServletResponse response, ServletContext context, byte[] pdfData) throws Exception { @@ -354,6 +410,7 @@ public class PdfAsHelper { if (connector.equals("bku") || connector.equals("onlinebku") || connector.equals("mobilebku")) { BKUSLConnector conn = new BKUSLConnector(config); + //conn.setBase64(true); signer = new PAdESSigner(conn); session.setAttribute(PDF_SL_CONNECTOR, conn); } else { @@ -495,13 +552,13 @@ public class PdfAsHelper { } else if (statusRequest.needSignature()) { logger.info("Needing Signature from BKU"); // build SL Request for cms signature - CreateCMSSignatureRequestType createCMSSignatureRequestType = bkuSLConnector + RequestPackage pack = bkuSLConnector .createCMSRequest(statusRequest.getSignatureData(), statusRequest.getSignatureDataByteRange()); String slRequest = SLMarschaller .marshalToString(of - .createCreateCMSSignatureRequest(createCMSSignatureRequestType)); + .createCreateCMSSignatureRequest(pack.getRequestType())); response.setContentType("text/xml"); response.getWriter().write(slRequest); diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/DataURLServlet.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/DataURLServlet.java index cf25c2f2..5b951b78 100644 --- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/DataURLServlet.java +++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/DataURLServlet.java @@ -36,9 +36,9 @@ import org.slf4j.LoggerFactory; import at.gv.egiz.pdfas.web.exception.PdfAsSecurityLayerException; import at.gv.egiz.pdfas.web.helper.PdfAsHelper; -import at.gv.egiz.sl.CreateCMSSignatureResponseType; -import at.gv.egiz.sl.ErrorResponseType; -import at.gv.egiz.sl.InfoboxReadResponseType; +import at.gv.egiz.sl.schema.CreateCMSSignatureResponseType; +import at.gv.egiz.sl.schema.ErrorResponseType; +import at.gv.egiz.sl.schema.InfoboxReadResponseType; import at.gv.egiz.sl.util.SLMarschaller; /** diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSignParameters.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSignParameters.java new file mode 100644 index 00000000..4658372b --- /dev/null +++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSignParameters.java @@ -0,0 +1,43 @@ +package at.gv.egiz.pdfas.web.ws; + +import java.io.Serializable; + +public class PDFASSignParameters implements Serializable { + + /** + * + */ + private static final long serialVersionUID = -2375108993871456465L; + + public enum Connector { + JKS, + MOA + } + + Connector connector; + String position; + String profile; + + + public Connector getConnector() { + return connector; + } + public void setConnector(Connector connector) { + this.connector = connector; + } + public String getPosition() { + return position; + } + public void setPosition(String position) { + this.position = position; + } + public String getProfile() { + return profile; + } + public void setProfile(String profile) { + this.profile = profile; + } + + + +} diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigning.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigning.java new file mode 100644 index 00000000..0b75c0e0 --- /dev/null +++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigning.java @@ -0,0 +1,11 @@ +package at.gv.egiz.pdfas.web.ws; + +import javax.jws.WebService; +import javax.jws.soap.SOAPBinding; +import javax.jws.soap.SOAPBinding.Style; + +@WebService +@SOAPBinding(style = Style.RPC) +public interface PDFASSigning { + public byte[] signPDFDokument(byte[] inputDocument, PDFASSignParameters parameters); +} 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 new file mode 100644 index 00000000..39c6c24d --- /dev/null +++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigningImpl.java @@ -0,0 +1,34 @@ +package at.gv.egiz.pdfas.web.ws; + +import javax.jws.WebService; +import javax.xml.ws.WebServiceException; +import javax.xml.ws.soap.MTOM; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.pdfas.web.config.WebConfiguration; +import at.gv.egiz.pdfas.web.helper.PdfAsHelper; + +@MTOM +@WebService(endpointInterface = "at.gv.egiz.pdfas.web.ws.PDFASSigning") +public class PDFASSigningImpl implements PDFASSigning { + + private static final Logger logger = LoggerFactory + .getLogger(PDFASSigningImpl.class); + + public byte[] signPDFDokument(byte[] inputDocument, + PDFASSignParameters parameters) { + try { + return PdfAsHelper.synchornousServerSignature(inputDocument, parameters); + } catch(Throwable e) { + logger.error("Server Signature failed.", e); + if(WebConfiguration.isShowErrorDetails()) { + throw new WebServiceException("Server Signature failed.", e); + } else { + throw new WebServiceException("Server Signature failed."); + } + } + } + +} diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/package-info.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/package-info.java new file mode 100644 index 00000000..0ed0acfc --- /dev/null +++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/package-info.java @@ -0,0 +1,8 @@ +/** + * + */ +/** + * @author afitzek + * + */ +package at.gv.egiz.pdfas.web.ws; \ No newline at end of file diff --git a/pdf-as-web/src/main/webapp/WEB-INF/sun-jaxws.xml b/pdf-as-web/src/main/webapp/WEB-INF/sun-jaxws.xml new file mode 100644 index 00000000..67648647 --- /dev/null +++ b/pdf-as-web/src/main/webapp/WEB-INF/sun-jaxws.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/pdf-as-web/src/main/webapp/WEB-INF/web.xml b/pdf-as-web/src/main/webapp/WEB-INF/web.xml index 4d8a32cb..800c4505 100644 --- a/pdf-as-web/src/main/webapp/WEB-INF/web.xml +++ b/pdf-as-web/src/main/webapp/WEB-INF/web.xml @@ -29,6 +29,15 @@ /* + + com.sun.xml.ws.transport.http.servlet.WSServletContextListener + + + + + SOAPSign + com.sun.xml.ws.transport.http.servlet.WSServlet + SignServlet @@ -77,6 +86,10 @@ servlet mappings, including zero. It is also legal to define more than one mapping for the same servlet, if you wish to. --> + + SOAPSign + /wssign + SignServlet /Sign -- cgit v1.2.3