diff options
author | Andreas Fitzek <andreas.fitzek@iaik.tugraz.at> | 2015-11-03 14:38:34 +0100 |
---|---|---|
committer | Andreas Fitzek <andreas.fitzek@iaik.tugraz.at> | 2015-11-03 14:38:34 +0100 |
commit | 0872d2d8a64fd701776b272f49222428d8def07f (patch) | |
tree | 0954a523ad2cc7ad615dbbae5282dd56497e4c6e /moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/invoke | |
parent | e635718b8d6a12e4e80207c8bdf30b02eed3f2ab (diff) | |
download | moa-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.java | 132 |
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; + } +} |