From 61a2d23ef72630934c603fe9ffb96ebebff6ee09 Mon Sep 17 00:00:00 2001 From: netconomy Date: Thu, 29 Nov 2007 12:00:22 +0000 Subject: PDF-AS API git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@233 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- .../wag/egov/egiz/sig/SignatureResponse.java | 12 ++++ .../wag/egov/egiz/sig/SignatureTypes.java | 10 ++++ .../egov/egiz/sig/connectors/ConnectorChooser.java | 21 +++++-- .../egov/egiz/sig/connectors/TemplateReplaces.java | 10 ++++ .../egov/egiz/sig/connectors/bku/BKUHelper.java | 51 +++++++++++++++++ .../sig/connectors/bku/DetachedBKUConnector.java | 17 ++++-- .../connectors/bku/LocRefDetachedBKUConnector.java | 7 ++- .../bku/MultipartDetachedBKUConnector.java | 5 +- .../connectors/moa/DetachedLocRefMOAConnector.java | 5 +- .../moa/MOASoapWithAttachmentConnector.java | 64 +++++++++++++++------- 10 files changed, 166 insertions(+), 36 deletions(-) (limited to 'src/main/java/at/knowcenter/wag/egov/egiz/sig') diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureResponse.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureResponse.java index 603e0fe..deedb6d 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureResponse.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureResponse.java @@ -102,6 +102,8 @@ public class SignatureResponse private boolean qualifiedCertificate = false; // [tknall] stop qualified certificate + protected String hashInputData = null; + // /** // * Flag the marks that the response is an error response // */ @@ -423,6 +425,16 @@ public class SignatureResponse this.certificate_ = certificate; } + public String getHashInputData() + { + return this.hashInputData; + } + + public void setHashInputData(String hashInputData) + { + this.hashInputData = hashInputData; + } + /** * Returns a list of Strings each stating one public property of the * certificate. diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureTypes.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureTypes.java index 19b28e7..13fdf2f 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureTypes.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureTypes.java @@ -319,6 +319,16 @@ public class SignatureTypes } return instance_; } + + /** + * Reloads the instance. + * @throws SignatureTypesException + */ + public static void createInstance() throws SignatureTypesException + { + instance_ = null; + getInstance(); + } /** * This method load the signature definitions diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/ConnectorChooser.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/ConnectorChooser.java index 5b16211..cbdee42 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/ConnectorChooser.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/ConnectorChooser.java @@ -6,6 +6,7 @@ package at.knowcenter.wag.egov.egiz.sig.connectors; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import at.gv.egiz.pdfas.framework.ConnectorParameters; import at.knowcenter.wag.egov.egiz.PdfASID; import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException; import at.knowcenter.wag.egov.egiz.framework.SignatorFactory; @@ -46,7 +47,9 @@ public final class ConnectorChooser } log.debug("choosing locref detached BKU connector."); - return new LocRefDetachedBKUConnector(profile, loc_ref_url); + ConnectorParameters cp = new ConnectorParameters(); + cp.setProfileId(profile); + return new LocRefDetachedBKUConnector(cp, loc_ref_url); } public static Connector chooseWebConnectorForSign(String connector, @@ -67,7 +70,9 @@ public final class ConnectorChooser // Loc_Ref-Connector // return new DetachedLocRefMOAConnector(profile, loc_ref_url); // SwA-Connector - return new MOASoapWithAttachmentConnector(profile); + ConnectorParameters cp = new ConnectorParameters(); + cp.setProfileId(profile); + return new MOASoapWithAttachmentConnector(cp); } // public static Connector chooseCommandlineConnectorForSign(String connector, @@ -147,7 +152,9 @@ public final class ConnectorChooser { log.debug("sig_kz version is 1.1.0 -> choosing detached (loc ref) connector."); - return new LocRefDetachedBKUConnector(profile, loc_ref_url); + ConnectorParameters cp = new ConnectorParameters(); + cp.setProfileId(profile); + return new LocRefDetachedBKUConnector(cp, loc_ref_url); } throw new ConnectorException(310, "The SIG_KZ version '" + sig_kz.getVersion() + "' is unknown."); @@ -183,7 +190,9 @@ public final class ConnectorChooser // the following line is used in connection with LocRef-Connector // return new DetachedLocRefMOAConnector(profile, loc_ref_url); // the following line is uesed in connection with SwA-Connector - return new MOASoapWithAttachmentConnector(profile); + ConnectorParameters cp = new ConnectorParameters(); + cp.setProfileId(profile); + return new MOASoapWithAttachmentConnector(cp); } throw new ConnectorException(310, "The SIG_KZ version '" + sig_kz.getVersion() + "' is unknown."); @@ -293,7 +302,9 @@ public final class ConnectorChooser { log.debug("sig_app is BKU ==> DetachedMultipartBKUConnector"); //$NON-NLS-1$ - return new MultipartDetachedBKUConnector(profile); + ConnectorParameters cp = new ConnectorParameters(); + cp.setProfileId(profile); + return new MultipartDetachedBKUConnector(cp); } if (sig_app.equals(MOA)) { diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/TemplateReplaces.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/TemplateReplaces.java index 18cf76d..149065c 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/TemplateReplaces.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/TemplateReplaces.java @@ -117,6 +117,16 @@ public final class TemplateReplaces * The placeholder text in the template to be replaced by the trust profile ID. */ public static final String TRUST_PROFILE_ID_REPLACE = "TrustProfileIDReplace"; //$NON-NLS-1$ + + /** + * The placeholder text in the template to be replaced by the return hash input data element. + */ + public static final String RETURN_HASH_INPUT_DATA_REPLACE = "ReturnHashInputDataReplace"; //$NON-NLS-1$ + + /** + * The placeholder text in the template to be replaced by the dateTime element. + */ + public static final String DATE_TIME_REPLACE = "DateTimeReplace"; // $NON-NLS-1$ /** * The placeholder text in the template to be replaced by the Base64 content. diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/BKUHelper.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/BKUHelper.java index 8f0b79e..1ddd327 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/BKUHelper.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/BKUHelper.java @@ -7,12 +7,17 @@ import java.io.UnsupportedEncodingException; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.TimeZone; import java.util.regex.Matcher; import java.util.regex.Pattern; import at.gv.egiz.pdfas.exceptions.external.ExternalErrorException; import at.gv.egiz.pdfas.impl.input.helper.DataSourceHelper; +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -421,12 +426,35 @@ public final class BKUHelper Matcher cert_m_s = cert_p_s.matcher(xmlResponse); Matcher cert_m_e = cert_p_e.matcher(xmlResponse); + Pattern hash_data_p_s = Pattern.compile(""); //$NON-NLS-1$ + Pattern hash_data_p_e = Pattern.compile(""); //$NON-NLS-1$ + Matcher hash_data_m_s = hash_data_p_s.matcher(xmlResponse); + Matcher hash_data_m_e = hash_data_p_e.matcher(xmlResponse); + + SignatureResponse sig_res = new SignatureResponse(); // [tknall] start qualified certificate sig_res.setQualifiedCertificate(cert_qualified_m.find()); // [tknall] stop qualified certificate + if (hash_data_m_s.find() && hash_data_m_e.find()) + { + String hashInputData = xmlResponse.substring(hash_data_m_s.end(), hash_data_m_e.start()); + + Pattern b64_p_s = Pattern.compile(""); //$NON-NLS-1$ + Pattern b64_p_e = Pattern.compile(""); //$NON-NLS-1$ + Matcher b64_m_s = b64_p_s.matcher(hashInputData); + Matcher b64_m_e = b64_p_e.matcher(hashInputData); + + b64_m_s.find(); + b64_m_e.find(); + + String b64 = hashInputData.substring(b64_m_s.end(), b64_m_e.start()); + + sig_res.setHashInputData(b64); + } + if (sub_nam_m_s.find() && sub_nam_m_e.find()) { String sub_nam = xmlResponse.substring(sub_nam_m_s.end(), sub_nam_m_e.start()); @@ -508,4 +536,27 @@ public final class BKUHelper return sig_res; } + public static String formDateTimeElement(Date verificationTime) + { + return formDateTimeElement(verificationTime, null); + } + + public static String formDateTimeElement(Date verificationTime, String namespace) + { + String nsPrefix = StringUtils.isBlank(namespace) ? "" : (namespace + ":"); + + String dateTimeElement = ""; + if (verificationTime != null) + { + log.debug("VerificationTime = " + verificationTime); + + DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); + df.setTimeZone(TimeZone.getTimeZone("UTC")); + String dateTime = df.format(verificationTime) + "Z"; + log.debug("DateTime (VerificationTime in UTC) = " + dateTime); + + dateTimeElement = "<" + nsPrefix + "DateTime>" + dateTime + ""; + }; + return dateTimeElement; + } } diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/DetachedBKUConnector.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/DetachedBKUConnector.java index c84ce8a..f1896d7 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/DetachedBKUConnector.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/DetachedBKUConnector.java @@ -11,6 +11,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import at.gv.egiz.pdfas.exceptions.ErrorCode; +import at.gv.egiz.pdfas.framework.ConnectorParameters; import at.knowcenter.wag.egov.egiz.cfg.SettingsReader; import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException; import at.knowcenter.wag.egov.egiz.exceptions.SettingsException; @@ -42,6 +43,11 @@ public class DetachedBKUConnector implements Connector, LocalConnector */ private static Log log = LogFactory.getLog(DetachedBKUConnector.class); + /** + * The connector parameters. + */ + protected ConnectorParameters params = null; + /** * The environemnt configuration of this connector containing templates and * other configurable elements. @@ -57,14 +63,15 @@ public class DetachedBKUConnector implements Connector, LocalConnector * parameters defined in the configuration are used. *

* - * @param profile - * The profile from which the Environment should be assembled. + * @param connectorParameters + * The connectot parameters. * @throws ConnectorException * f.e. */ - public DetachedBKUConnector(String profile, String loc_ref_content) throws ConnectorException + public DetachedBKUConnector(ConnectorParameters connectorParameters, String loc_ref_content) throws ConnectorException { - this.environment = new Environment(profile, loc_ref_content); + this.params = connectorParameters; + this.environment = new Environment(this.params.getProfileId(), loc_ref_content); } /** @@ -119,6 +126,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector BKUHelper.checkResponseForError(response_string); SignSignatureObject so = BKUHelper.parseCreateXMLResponse(response_string, new DetachedIdFormatter()); + so.response_properties = response_properties; log.debug("analyzeSignResponse finished."); //$NON-NLS-1$ return so; @@ -309,6 +317,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector String verify_request_xml = verify_request_template.replaceFirst(TemplateReplaces.XML_CONTENT_REPLACE, xml_content); verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.LOC_REF_CONTENT_REPLACE, this.environment.getLocRefContent()); + verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.DATE_TIME_REPLACE, BKUHelper.formDateTimeElement(this.params.getVerificationTime(), "sl")); return verify_request_xml; } diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/LocRefDetachedBKUConnector.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/LocRefDetachedBKUConnector.java index 92b7b91..fc29457 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/LocRefDetachedBKUConnector.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/LocRefDetachedBKUConnector.java @@ -3,6 +3,7 @@ */ package at.knowcenter.wag.egov.egiz.sig.connectors.bku; +import at.gv.egiz.pdfas.framework.ConnectorParameters; import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException; /** @@ -13,13 +14,13 @@ public class LocRefDetachedBKUConnector extends DetachedBKUConnector { /** - * @param profile + * @param connectorParameters * @param loc_ref_content * @throws ConnectorException */ - public LocRefDetachedBKUConnector(String profile, String loc_ref_content) throws ConnectorException + public LocRefDetachedBKUConnector(ConnectorParameters connectorParameters, String loc_ref_content) throws ConnectorException { - super(profile, loc_ref_content); + super(connectorParameters, loc_ref_content); } } diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/MultipartDetachedBKUConnector.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/MultipartDetachedBKUConnector.java index a2d4dc0..6f189af 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/MultipartDetachedBKUConnector.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/MultipartDetachedBKUConnector.java @@ -3,6 +3,7 @@ */ package at.knowcenter.wag.egov.egiz.sig.connectors.bku; +import at.gv.egiz.pdfas.framework.ConnectorParameters; import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException; /** @@ -13,9 +14,9 @@ public class MultipartDetachedBKUConnector extends DetachedBKUConnector { protected static final String MULTIPART_LOC_REF_CONTENT = "formdata:fileupload"; //$NON-NLS-1$ - public MultipartDetachedBKUConnector(String profile) throws ConnectorException + public MultipartDetachedBKUConnector(ConnectorParameters connectorParameters) throws ConnectorException { - super(profile, MULTIPART_LOC_REF_CONTENT); + super(connectorParameters, MULTIPART_LOC_REF_CONTENT); } } diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/DetachedLocRefMOAConnector.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/DetachedLocRefMOAConnector.java index 3bf0719..b31d1ec 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/DetachedLocRefMOAConnector.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/DetachedLocRefMOAConnector.java @@ -10,6 +10,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import at.gv.egiz.pdfas.exceptions.ErrorCode; +import at.gv.egiz.pdfas.framework.ConnectorParameters; import at.knowcenter.wag.egov.egiz.cfg.SettingsReader; import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException; import at.knowcenter.wag.egov.egiz.exceptions.SettingsException; @@ -173,7 +174,9 @@ public class DetachedLocRefMOAConnector implements Connector String xml_content = null; if (!SigKZIDHelper.isMOASigned(so)) { - DetachedBKUConnector bku_connector = new DetachedBKUConnector(this.environment.getProfile(), "not needed here"); + ConnectorParameters cp = new ConnectorParameters(); + cp.setProfileId(this.environment.getProfile()); + DetachedBKUConnector bku_connector = new DetachedBKUConnector(cp, "not needed here"); xml_content = bku_connector.prepareXMLContent(data, so); } else diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/MOASoapWithAttachmentConnector.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/MOASoapWithAttachmentConnector.java index 34bcdc6..4cb4ec2 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/MOASoapWithAttachmentConnector.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/MOASoapWithAttachmentConnector.java @@ -4,12 +4,19 @@ package at.knowcenter.wag.egov.egiz.sig.connectors.moa; import java.security.cert.X509Certificate; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.Properties; +import java.util.SimpleTimeZone; +import java.util.TimeZone; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import at.gv.egiz.pdfas.exceptions.ErrorCode; +import at.gv.egiz.pdfas.framework.ConnectorParameters; import at.knowcenter.wag.egov.egiz.cfg.SettingsReader; import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException; import at.knowcenter.wag.egov.egiz.exceptions.SettingsException; @@ -25,7 +32,6 @@ import at.knowcenter.wag.egov.egiz.sig.connectors.bku.SignSignatureObject; import at.knowcenter.wag.egov.egiz.sig.sigid.DetachedLocRefMOAIdFormatter; import at.knowcenter.wag.egov.egiz.sig.sigkz.SigKZIDHelper; import at.knowcenter.wag.egov.egiz.tools.CodingHelper; -import at.knowcenter.wag.egov.egiz.tools.DebugHelper; import at.knowcenter.wag.egov.egiz.tools.FileHelper; /** @@ -46,12 +52,20 @@ public class MOASoapWithAttachmentConnector implements Connector protected static final String MULTIPART_LOC_REF_CONTENT = "formdata:fileupload"; //$NON-NLS-1$ + protected static final String RETURN_HASH_INPUT_DATA = ""; //$NON-NLS-1$ + + /** + * The connector parameters. + */ + protected ConnectorParameters params = null; + /** * The environemnt configuration of this connector containing templates and * other configurable elements. */ protected Environment environment = null; - + + /** * Constructor that builds the configuration environment for this connector * according to the given profile. @@ -61,17 +75,15 @@ public class MOASoapWithAttachmentConnector implements Connector * parameters defined in the configuration are used. *

* - * @param profile - * The profile from which the Environment should be assembled. - * @throws SettingsException - * f.e. - * @throws SignatureException + * @param connectorParameters + * The parameters for this connector. + * @throws ConnectorException * f.e. */ - public MOASoapWithAttachmentConnector(String profile) throws ConnectorException + public MOASoapWithAttachmentConnector(ConnectorParameters connectorParameters) throws ConnectorException { - - this.environment = new Environment(profile, MULTIPART_LOC_REF_CONTENT); + this.params = connectorParameters; + this.environment = new Environment(this.params.getProfileId(), MULTIPART_LOC_REF_CONTENT); } protected String prepareSignRequest(SignatureData data) throws ConnectorException @@ -176,7 +188,7 @@ public class MOASoapWithAttachmentConnector implements Connector String xml_content = null; if (!SigKZIDHelper.isMOASigned(so)) { - DetachedBKUConnector bku_connector = new DetachedBKUConnector(this.environment.getProfile(), "not needed here"); + DetachedBKUConnector bku_connector = new DetachedBKUConnector(this.params, "not needed here"); xml_content = bku_connector.prepareXMLContent(data, so); } else @@ -187,12 +199,22 @@ public class MOASoapWithAttachmentConnector implements Connector String verify_request_xml = verify_request_template.replaceFirst(TemplateReplaces.XML_CONTENT_REPLACE, xml_content); verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.TRUST_PROFILE_ID_REPLACE, this.environment.getVerifyTrustProfileId()); verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.LOC_REF_CONTENT_REPLACE, this.environment.getSignatureDataUrl()); + + String returnHashInputDataElement = ""; + if (this.params.isReturnHashInputData()) + { + returnHashInputDataElement = RETURN_HASH_INPUT_DATA; + } + verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.RETURN_HASH_INPUT_DATA_REPLACE, returnHashInputDataElement); + + verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.DATE_TIME_REPLACE, BKUHelper.formDateTimeElement(this.params.getVerificationTime())); + log.debug("\r\n\r\n" + verify_request_xml + "\r\n\r\n"); return verify_request_xml; } - + /** * Analyzes the verify response string. * @@ -297,20 +319,20 @@ public class MOASoapWithAttachmentConnector implements Connector try { // for performance measurement - long startTime = 0; - if (log.isInfoEnabled()) { - startTime = System.currentTimeMillis(); - } +// long startTime = 0; +// if (log.isInfoEnabled()) { +// startTime = System.currentTimeMillis(); +// } // Properties response_properties = MOASoapConnection.connectMOA(request_string, MOASoapConnection.SERVICE_SIGN, url); Properties response_properties = MOASoapConnection.doPostRequestMultipart(url,mode, request_string, data ); // for performance measurement - if (log.isInfoEnabled()) { - long endTime = System.currentTimeMillis(); - String toReport = "MOA-PROCESSING;-;-;" + (endTime - startTime) + ";"; - log.info(toReport); - } +// if (log.isInfoEnabled()) { +// long endTime = System.currentTimeMillis(); +// String toReport = "MOA-PROCESSING;-;-;" + (endTime - startTime) + ";"; +// log.info(toReport); +// } return response_properties; } -- cgit v1.2.3