aboutsummaryrefslogtreecommitdiff
path: root/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/webservice/binding/CMSVerifySignatureBindingImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/webservice/binding/CMSVerifySignatureBindingImpl.java')
-rw-r--r--moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/webservice/binding/CMSVerifySignatureBindingImpl.java139
1 files changed, 139 insertions, 0 deletions
diff --git a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/webservice/binding/CMSVerifySignatureBindingImpl.java b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/webservice/binding/CMSVerifySignatureBindingImpl.java
new file mode 100644
index 0000000..3799fde
--- /dev/null
+++ b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/webservice/binding/CMSVerifySignatureBindingImpl.java
@@ -0,0 +1,139 @@
+package at.gv.egovernment.moa.spss.server.webservice.binding;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import at.gv.egiz.moasig.ObjectFactory;
+import at.gv.egiz.moasig.VerifyCMSSignatureResponseType;
+import at.gv.egovernment.moa.spss.MOAApplicationException;
+import at.gv.egovernment.moa.spss.api.SPSSFactory;
+import at.gv.egovernment.moa.spss.api.cmsverify.CMSDataObject;
+import at.gv.egovernment.moa.spss.api.cmsverify.VerifyCMSSignatureRequest;
+import at.gv.egovernment.moa.spss.api.cmsverify.VerifyCMSSignatureResponse;
+import at.gv.egovernment.moa.spss.api.cmsverify.VerifyCMSSignatureResponseElement;
+import at.gv.egovernment.moa.spss.api.common.CheckResult;
+import at.gv.egovernment.moa.spss.api.common.SignerInfo;
+import at.gv.egovernment.moa.spss.server.webservice.CMSVerifySignatureBinding;
+import at.gv.egovernment.moa.util.CollectionUtils;
+
+public class CMSVerifySignatureBindingImpl implements CMSVerifySignatureBinding {
+
+ private TransformerUtils transformerUtils = new TransformerUtils();
+
+ /** The factory to create API objects. */
+ private SPSSFactory factory = SPSSFactory.getInstance();
+
+ @Override
+ public VerifyCMSSignatureRequest buildCMSRequest(
+ at.gv.egiz.moasig.VerifyCMSSignatureRequest verifyCMSSignatureRequest) throws MOAApplicationException {
+
+ Date dateTime = null;
+ if (verifyCMSSignatureRequest.getDateTime() == null) {
+ dateTime = verifyCMSSignatureRequest.getDateTime().toGregorianCalendar().getTime();
+ }
+
+ int[] signatories = parseSignatories(verifyCMSSignatureRequest);
+
+ CMSDataObject dataObject = this.transformerUtils.parseDataObject(verifyCMSSignatureRequest.getDataObject());
+
+ String trustProfileID = null;
+
+ if (verifyCMSSignatureRequest.getTrustProfileID() != null) {
+ trustProfileID = verifyCMSSignatureRequest.getTrustProfileID();
+ }
+
+ InputStream cmsSignature = new ByteArrayInputStream(verifyCMSSignatureRequest.getCMSSignature());
+
+ return factory.createVerifyCMSSignatureRequest(signatories, dateTime, cmsSignature, dataObject, trustProfileID);
+ }
+
+ /**
+ * Parse the <code>Signatories</code> attribute contained in the
+ * <code>VerifyCMSSignatureRequest</code> DOM element.
+ *
+ * @param requestElem
+ * The <code>VerifyCMSSignatureRequest</code> DOM element.
+ * @return The signatories contained in the given
+ * <code>VerifyCMSSignatureRequest</code> DOM element.
+ */
+ private int[] parseSignatories(at.gv.egiz.moasig.VerifyCMSSignatureRequest verifyCMSSignatureRequest) {
+ Iterator<String> signatoriesIterator = verifyCMSSignatureRequest.getSignatories().iterator();
+ List signatoriesList = new ArrayList();
+
+ int[] signatories;
+ while (signatoriesIterator.hasNext()) {
+ String signatorie = signatoriesIterator.next();
+
+ if ("all".equals(signatorie)) {
+ return VerifyCMSSignatureRequest.ALL_SIGNATORIES;
+ } else {
+ StringTokenizer tokenizer = new StringTokenizer(signatorie);
+ // put the signatories into a List
+ while (tokenizer.hasMoreTokens()) {
+ try {
+ signatoriesList.add(new Integer(tokenizer.nextToken()));
+ } catch (NumberFormatException e) {
+ // this cannot occur if the request has been validated
+ }
+ }
+ }
+
+ }
+
+ // convert the List into an int array
+ signatories = CollectionUtils.toIntArray(signatoriesList);
+
+ return signatories;
+ }
+
+
+
+ @Override
+ public VerifyCMSSignatureResponseType buildCMSResponse(VerifyCMSSignatureResponse response)
+ throws MOAApplicationException {
+
+ VerifyCMSSignatureResponseType verifyCMSSignatureResponseType = new VerifyCMSSignatureResponseType();
+
+ Iterator iter;
+
+ for (iter = response.getResponseElements().iterator(); iter.hasNext();) {
+ VerifyCMSSignatureResponseElement responseElement = (VerifyCMSSignatureResponseElement) iter.next();
+ addResponseElement(verifyCMSSignatureResponseType, responseElement);
+ }
+
+ return verifyCMSSignatureResponseType;
+ }
+
+ /**
+ * Add an element to the response.
+ *
+ * @param responseElement
+ * The element to add to the response.
+ * @throws MOAApplicationException
+ * An error occurred adding the element.
+ */
+ private void addResponseElement(VerifyCMSSignatureResponseType verifyCMSSignatureResponseType,
+ VerifyCMSSignatureResponseElement responseElement) throws MOAApplicationException {
+
+ SignerInfo signerInfo = responseElement.getSignerInfo();
+ CheckResult signatureCheck = responseElement.getSignatureCheck();
+ CheckResult certCheck = responseElement.getCertificateCheck();
+
+ ObjectFactory of = new ObjectFactory();
+ verifyCMSSignatureResponseType.getSignerInfoAndSignatureCheckAndCertificateCheck().add(
+ of.createVerifyCMSSignatureResponseTypeSignerInfo(this.transformerUtils.buildSignerInfo(signerInfo)));
+ verifyCMSSignatureResponseType.getSignerInfoAndSignatureCheckAndCertificateCheck()
+ .add(of.createVerifyCMSSignatureResponseTypeSignatureCheck(
+ this.transformerUtils.buildCheckResult(signatureCheck)));
+
+ verifyCMSSignatureResponseType.getSignerInfoAndSignatureCheckAndCertificateCheck()
+ .add(of.createVerifyCMSSignatureResponseTypeCertificateCheck(
+ this.transformerUtils.buildCheckResult(certCheck)));
+ }
+
+}