aboutsummaryrefslogtreecommitdiff
path: root/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service
diff options
context:
space:
mode:
authorAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2016-06-20 12:45:07 +0200
committerAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2016-06-20 12:45:07 +0200
commit53ae98cdfa510650c1e015efd0d11a96ad4dc87a (patch)
tree8e7ab77a9208b541416d14bbdb15e7211ff40c5b /moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service
parentacf1b849ab835bc6797adfb91f8ab4fa88f0aff5 (diff)
downloadmoa-sig-53ae98cdfa510650c1e015efd0d11a96ad4dc87a.tar.gz
moa-sig-53ae98cdfa510650c1e015efd0d11a96ad4dc87a.tar.bz2
moa-sig-53ae98cdfa510650c1e015efd0d11a96ad4dc87a.zip
ASiC Library added
Diffstat (limited to 'moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service')
-rw-r--r--moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service/SignatureVerificationService.java86
1 files changed, 86 insertions, 0 deletions
diff --git a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service/SignatureVerificationService.java b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service/SignatureVerificationService.java
index 8278399..e4d93a7 100644
--- a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service/SignatureVerificationService.java
+++ b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service/SignatureVerificationService.java
@@ -24,6 +24,15 @@
package at.gv.egovernment.moa.spss.server.service;
+import at.gv.egiz.asic.api.ASiC;
+import at.gv.egiz.asic.api.ASiCFactory;
+import at.gv.egiz.asic.api.ASiCFormat;
+import at.gv.egiz.asic.api.ASiCVerificationResult;
+import at.gv.egiz.asic.impl.ASiCMOAVerifier;
+import at.gv.egiz.asic.xmlbind.VerifyASICSignatureRequestParser;
+import at.gv.egiz.asic.xmlbind.VerifyASICSignatureResponseBuilder;
+import at.gv.egiz.asic.xmlbind.VerifyASiCRequest;
+import at.gv.egovernment.moa.spss.MOAApplicationException;
import org.apache.axis.AxisFault;
import org.w3c.dom.Element;
@@ -45,6 +54,9 @@ import at.gv.egovernment.moa.spss.server.transaction.TransactionContextManager;
import at.gv.egovernment.moaspss.logging.Logger;
import at.gv.egovernment.moaspss.util.StreamUtils;
+import java.io.FileInputStream;
+import java.util.List;
+
/**
* The service endpoint for the <code>SignatureVerification</code> web service.
*
@@ -122,6 +134,80 @@ public class SignatureVerificationService {
return response;
}
+
+
+ /**
+ * Handle a <code>VerifyPDFSignatureRequest</code>.
+ *
+ * @param request The <code>VerifyPDFSignatureRequest</code> to work on
+ * (contained in the 0th element of the array).
+ * @return A <code>VerifyPDFSignatureResponse</code> as the only element of
+ * the <code>Element</code> array.
+ * @throws AxisFault An error occurred during handling of the message.
+ */
+ public Element[] VerifyASICSignatureRequest(Element[] request)
+ throws AxisFault {
+ CMSSignatureVerificationInvoker invoker =
+ CMSSignatureVerificationInvoker.getInstance();
+ Element[] response = new Element[1];
+
+ try {
+
+ // create a parser and builder for binding API objects to/from XML
+ VerifyASICSignatureRequestParser requestParser =
+ new VerifyASICSignatureRequestParser();
+ VerifyASICSignatureResponseBuilder responseBuilder =
+ new VerifyASICSignatureResponseBuilder();
+ Element reparsedReq;
+ VerifyASiCRequest requestObj;
+ VerifyCMSSignatureResponse responseObj;
+ // create a parser and builder for binding API objects to/from XML
+
+ //since Axis (1.1 ff) has problem with namespaces we take the raw request stored by the Axishandler.
+ TransactionContext context = TransactionContextManager.getInstance().getTransactionContext();
+ // validate the request
+ reparsedReq = ServiceUtils.reparseRequest(request[0]);//context.getRequest());
+
+ // convert to API objects
+ requestObj = requestParser.parseASIC(reparsedReq);
+
+ if(requestObj.getFormat() == null) {
+ throw new MOAApplicationException("asic.0006", null);
+ }
+
+ ASiC aSiC = ASiCFactory.parseASiC(requestObj.getAsicInput(),
+ requestObj.getFormat());
+
+ Logger.debug("Got ASiC " + aSiC);
+
+ // invoke the core logic
+ ASiCMOAVerifier v = new ASiCMOAVerifier();
+ List<ASiCVerificationResult> results = v.verify(aSiC,
+ requestObj.getTrustProfile(), requestObj.getDate());
+
+ // map back to XML
+ response[0] = responseBuilder.build(results).getDocumentElement();
+
+ // save response in transaction
+ context.setResponse(response[0]);
+
+ } catch (MOAException e) {
+ AxisFault fault = AxisFault.makeFault(e);
+ fault.setFaultDetail(new Element[] { e.toErrorResponse()});
+ Logger.debug("Anfrage zur Signaturpruefung wurde nicht erfolgreich beendet:"
+ + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e));
+ throw fault;
+ } catch (Throwable t) {
+ MOASystemException e = new MOASystemException("2900", null, t);
+ AxisFault fault = AxisFault.makeFault(e);
+ fault.setFaultDetail(new Element[] { e.toErrorResponse()});
+ Logger.debug("Anfrage zur Signaturpruefung wurde nicht erfolgreich beendet:"
+ + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e));
+ throw fault;
+ }
+
+ return response;
+ }
/**
* Handle a <code>VerifyCMSSignatureRequest</code>.