diff options
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.java | 139 |
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))); + } + +} |