aboutsummaryrefslogtreecommitdiff
path: root/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/invoke
diff options
context:
space:
mode:
authorAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2015-11-03 14:38:34 +0100
committerAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2015-11-03 14:38:34 +0100
commit0872d2d8a64fd701776b272f49222428d8def07f (patch)
tree0954a523ad2cc7ad615dbbae5282dd56497e4c6e /moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/invoke
parente635718b8d6a12e4e80207c8bdf30b02eed3f2ab (diff)
downloadmoa-sig-0872d2d8a64fd701776b272f49222428d8def07f.tar.gz
moa-sig-0872d2d8a64fd701776b272f49222428d8def07f.tar.bz2
moa-sig-0872d2d8a64fd701776b272f49222428d8def07f.zip
initial commit
Diffstat (limited to 'moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/invoke')
-rw-r--r--moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/invoke/PDFASInvoker.java132
1 files changed, 132 insertions, 0 deletions
diff --git a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/invoke/PDFASInvoker.java b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/invoke/PDFASInvoker.java
new file mode 100644
index 0000000..97bf58b
--- /dev/null
+++ b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/invoke/PDFASInvoker.java
@@ -0,0 +1,132 @@
+package at.gv.egovernment.moa.spss.server.invoke;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.io.IOUtils;
+
+import at.gv.egiz.pdfas.common.exceptions.PDFASError;
+import at.gv.egiz.pdfas.lib.api.ByteArrayDataSource;
+import at.gv.egiz.pdfas.lib.api.Configuration;
+import at.gv.egiz.pdfas.lib.api.PdfAs;
+import at.gv.egiz.pdfas.lib.api.PdfAsFactory;
+import at.gv.egiz.pdfas.lib.api.sign.IPlainSigner;
+import at.gv.egiz.pdfas.lib.api.sign.SignParameter;
+import at.gv.egiz.pdfas.lib.api.verify.VerifyParameter;
+import at.gv.egiz.pdfas.lib.api.verify.VerifyResult;
+import at.gv.egiz.pdfas.sigs.pades.PAdESSigner;
+import at.gv.egovernment.moa.logging.Logger;
+import at.gv.egovernment.moa.spss.server.logging.TransactionId;
+import at.gv.egovernment.moa.spss.server.pdfas.InternalMoaConnector;
+import at.gv.egovernment.moa.spss.server.xmlbind.CreatePDFRequest;
+import at.gv.egovernment.moa.spss.server.xmlbind.CreatePDFRespone;
+import at.gv.egovernment.moa.spss.server.xmlbind.PDFSignatureInfo;
+import at.gv.egovernment.moa.spss.server.xmlbind.SignedPDFInfo;
+import at.gv.egovernment.moa.spss.server.xmlbind.VerifyPDFRequest;
+import at.gv.egovernment.moa.spss.server.xmlbind.VerifyPDFResponse;
+
+public class PDFASInvoker {
+
+ private static PDFASInvoker instance = null;
+
+ private PdfAs pdfAS;
+
+ private PDFASInvoker(File configuration) {
+ pdfAS = PdfAsFactory.createPdfAs(configuration);
+ }
+
+ public synchronized static void init(String pdfAsConfiguration) {
+ instance = new PDFASInvoker(new File(pdfAsConfiguration));
+ }
+
+ public synchronized static PDFASInvoker getInstance() {
+ if (instance == null) {
+ throw new RuntimeException("PDF PDFASInvoker not initialized");
+ }
+ return instance;
+ }
+
+ public VerifyPDFResponse verifyPDFSignature(VerifyPDFRequest verifyPDFRequest, String transactionId) {
+ Configuration pdfConfiguration = this.pdfAS.getConfiguration();
+
+ VerifyPDFResponse verifyPDFResponse = new VerifyPDFResponse();
+
+ VerifyParameter verifyParameter = PdfAsFactory.createVerifyParameter(pdfConfiguration, new ByteArrayDataSource(
+ verifyPDFRequest.getSignedPDF()));
+
+ try {
+ List<VerifyResult> verifyResults = this.pdfAS.verify(verifyParameter);
+ verifyPDFResponse.setResponseType(VerifyPDFResponse.SUCCESS_SIGNATURE);
+ verifyPDFResponse.setVerificationResults(verifyResults);
+ } catch (Throwable e) {
+ if (e instanceof PDFASError) {
+ PDFASError pdfAsError = (PDFASError) e;
+ Logger.warn("Failed to generate signed PDF document", e);
+ verifyPDFResponse.setErrorCode((int) pdfAsError.getCode());
+ verifyPDFResponse.setErrorInfo(pdfAsError.getInfo());
+ } else {
+ Logger.error("Unknown exception!: ", e);
+ verifyPDFResponse.setErrorCode(9999);
+ verifyPDFResponse.setErrorInfo("Nicht klassifizierter Fehler");
+ }
+ }
+
+ return verifyPDFResponse;
+ }
+
+ public CreatePDFRespone createPDFSignature(CreatePDFRequest createPDFRequest, String transactionId) {
+ Configuration pdfConfiguration = this.pdfAS.getConfiguration();
+
+ String keyIdentifier = createPDFRequest.getKeyIdentifier();
+
+ Iterator<PDFSignatureInfo> signatureInfoIterator = createPDFRequest.getSignatureInfoList().iterator();
+
+ CreatePDFRespone createPDFRespone = new CreatePDFRespone();
+
+ while (signatureInfoIterator.hasNext()) {
+ PDFSignatureInfo pdfSignatureInfo = signatureInfoIterator.next();
+ SignedPDFInfo signedPDFInfo = new SignedPDFInfo(pdfSignatureInfo.getSignatureID());
+ try {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ SignParameter signParameter = PdfAsFactory.createSignParameter(pdfConfiguration,
+ new ByteArrayDataSource(pdfSignatureInfo.getPdfDocument()), baos);
+
+ signParameter.setSignaturePosition(pdfSignatureInfo.getSignaturePosition());
+ signParameter.setSignatureProfileId(pdfSignatureInfo.getSignatureProfile());
+
+ IPlainSigner signer = new PAdESSigner(
+ new InternalMoaConnector(keyIdentifier, new TransactionId(transactionId), null));
+
+ signParameter.setPlainSigner(signer);
+
+ try {
+ this.pdfAS.sign(signParameter);
+ signedPDFInfo.setPdfDocument(baos.toByteArray());
+ signedPDFInfo.setResponseType(SignedPDFInfo.SUCCESS_SIGNATURE);
+ } catch (Throwable e) {
+ signedPDFInfo.setResponseType(SignedPDFInfo.ERROR_RESPONSE);
+
+ if (e instanceof PDFASError) {
+ PDFASError pdfAsError = (PDFASError) e;
+ Logger.warn("Failed to generate signed PDF document", e);
+ signedPDFInfo.setErrorCode((int) pdfAsError.getCode());
+ signedPDFInfo.setErrorInfo(pdfAsError.getInfo());
+ } else {
+ Logger.error("Unknown exception!: ", e);
+ signedPDFInfo.setErrorCode(9999);
+ signedPDFInfo.setErrorInfo("Nicht klassifizierter Fehler");
+ }
+ } finally {
+ IOUtils.closeQuietly(baos);
+ }
+
+ } finally {
+ createPDFRespone.getSignatureInfoList().add(signedPDFInfo);
+ }
+
+ }
+ return createPDFRespone;
+ }
+}