/** * Copyright 2006 by Know-Center, Graz, Austria * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a * joint initiative of the Federal Chancellery Austria and Graz University of * Technology. * * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * http://www.osor.eu/eupl/ * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. */ 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.api.commons.Constants; import at.gv.egiz.pdfas.exceptions.ErrorCode; import at.gv.egiz.pdfas.framework.ConnectorParameters; import at.knowcenter.wag.egov.egiz.PdfAS; import at.knowcenter.wag.egov.egiz.PdfASID; import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException; import at.knowcenter.wag.egov.egiz.framework.SignatorFactory; import at.knowcenter.wag.egov.egiz.sig.connectors.bku.EnvelopedBase64BKUConnector; import at.knowcenter.wag.egov.egiz.sig.connectors.bku.LocRefDetachedBKUConnector; import at.knowcenter.wag.egov.egiz.sig.connectors.bku.MultipartDetachedBKUConnector; import at.knowcenter.wag.egov.egiz.sig.connectors.bku.OldEnvelopingBase64BKUConnector; import at.knowcenter.wag.egov.egiz.sig.connectors.moa.EnvelopingBase64MOAConnector; import at.knowcenter.wag.egov.egiz.sig.connectors.moa.MOASoapWithAttachmentConnector; import at.knowcenter.wag.egov.egiz.sig.connectors.mocca.LocRefDetachedMOCCAConnector; import at.knowcenter.wag.egov.egiz.sig.sigid.HotfixIdFormatter; /** * Helper class that provides static methods that help the application to * "choose" the right connector for a given task. * * @deprecated functionality split to ConnectorChooser implementations in framework commandline and web * * @author wprinz */ public final class ConnectorChooser { /** * The log. */ private static Log log = LogFactory.getLog(ConnectorChooser.class); public static LocalConnector chooseLocalConnectorForSign(String connector, String profile, String loc_ref_url) throws ConnectorException { log.debug("Choosing LocalConnector for signation..."); log.debug("connector type = " + connector); ConnectorParameters cp = new ConnectorParameters(); cp.setProfileId(profile); if (Constants.SIGNATURE_DEVICE_MOC.equals(connector)) { return new LocRefDetachedMOCCAConnector(cp, loc_ref_url); } else if (Constants.SIGNATURE_DEVICE_BKU.equals(connector)){ return new LocRefDetachedBKUConnector(cp, loc_ref_url); } log.error("Currently only the BKU connector is fully implemented."); return new LocRefDetachedBKUConnector(cp, loc_ref_url); } public static Connector chooseWebConnectorForSign(String connector, String profile, String loc_ref_url) throws ConnectorException { log.debug("Choosing Connector for WEB signation..."); log.debug("connector type = " + connector); if (!connector.equals(Constants.SIGNATURE_DEVICE_MOA)) { log.error("Currently only the MOA connector is available for non local WEB signation."); } log.debug("choosing locref detached MOA connector."); //TODO TR: Hier umschalten, um von SwA-Requests zurueckzuwechseln. // Loc_Ref-Connector // return new DetachedLocRefMOAConnector(profile, loc_ref_url); // SwA-Connector ConnectorParameters cp = new ConnectorParameters(); cp.setProfileId(profile); return new MOASoapWithAttachmentConnector(cp); } // public static Connector chooseCommandlineConnectorForSign(String connector, // String profile) throws ConnectorException // { // log.debug("Choosing Connector for commandline signation..."); // // log.debug("connector type = " + connector); // // if (connector.equals(BKU)) // { // log.debug("sig_app is BKU ==> MultipartDetachedBKUConnector"); //$NON-NLS-1$ // // return new MultipartDetachedBKUConnector(profile); // } // if (connector.equals(MOA)) // { // // TODO MOA detached signing is not allowed at the commandline // log.warn("Detached MOA is not supported on the commandline. -> choosing Base64 temporarily."); // return new EnvelopingBase64MOAConnector(profile); // } // // throw new ConnectorException(300, "Unknown connector type '" + connector + "' specified."); // } public static LocalConnector chooseLocalConnectorForVerify(String connector, PdfASID sig_kz, String sig_id, String profile, String loc_ref_url) throws ConnectorException { log.debug("Choosing LocalConnector for verification..."); log.debug("connector type = " + connector); log.debug("sig_kz = " + sig_kz); log.debug("sig_id = " + sig_id); if (!connector.equals("bku")) { log.error("Currently only the BKU connector is fully implemented."); } if (sig_kz == null) { log.debug("sig_kz is null -> must be old signature -> choosing old Base64 connector."); return new OldEnvelopingBase64BKUConnector(profile); } log.debug("sig_kz is not null -> must be one of the newer ... base64, base64 hotfix, or detached"); if (sig_kz.getVersion().equals(SignatorFactory.VERSION_1_0_0)) { log.debug("sig_kz version is 1.0.0 -> choosing base64 (old or hotfix)"); if (sig_id == null) { log.debug("sig_id is null, which means that it is a MOA signature -> choose a hotfix base64 connector (thus it is moa - it doesn't matter)."); return new EnvelopedBase64BKUConnector(profile); } String[] sig_id_parts = sig_id.split("@"); if (sig_id_parts.length == 2) { log.debug("sig_id has 2 @-separated parts -> choosing old base64 connector"); return new OldEnvelopingBase64BKUConnector(profile); } if (sig_id_parts[0].equals(HotfixIdFormatter.SIG_ID_PREFIX)) { log.debug("sig_id prefix is hotfix -> choosing hotfix base64 connector"); return new EnvelopedBase64BKUConnector(profile); } throw new ConnectorException(300, "The SIG_KZ version is 1.0.0, but SIG_ID is neither MOA nor Old base64 nor Hotfix base64 ???'"); } if (sig_kz.getVersion().equals(SignatorFactory.VERSION_1_1_0) || sig_kz.getVersion().equals(SignatorFactory.VERSION_1_2_0)) { log.debug("sig_kz version is 1.1.0/1.2.0 -> choosing detached (loc ref) connector."); ConnectorParameters cp = new ConnectorParameters(); cp.setProfileId(profile); return new LocRefDetachedBKUConnector(cp, loc_ref_url); } throw new ConnectorException(ErrorCode.UNSUPPORTED_SIGNATURE, "The SIG_KZ version '" + sig_kz.getVersion() + "' is unknown. Please get a new version of PDF-AS. Your version is: " + PdfAS.PDFAS_VERSION); } public static Connector chooseWebConnectorForVerify(String connector, PdfASID sig_kz, String sig_id, String profile, String loc_ref_url) throws ConnectorException { log.debug("Choosing Connector for WEB verification..."); log.debug("connector type = " + connector); log.debug("sig_kz = " + sig_kz); log.debug("sig_id = " + sig_id); if (!connector.equals("moa")) { log.error("Currently only the MOA connector is available for non local WEB signation."); } if (sig_kz == null || sig_kz.getVersion().equals(SignatorFactory.VERSION_1_0_0)) { log.debug("sig_kz is null or sig_kz version is 1.0.0 -> choosing Base64 connector."); ConnectorParameters cp = new ConnectorParameters(); cp.setProfileId(profile); return new EnvelopingBase64MOAConnector(cp); } if (sig_kz.getVersion().equals(SignatorFactory.VERSION_1_1_0) || sig_kz.getVersion().equals(SignatorFactory.VERSION_1_2_0)) { log.debug("sig_kz version is 1.1.0/1.2.0 -> choosing detached (loc ref) connector."); //throw new ConnectorException(ErrorCode.DETACHED_SIGNATURE_NOT_SUPPORTED, "The MOA detached connector is not suitable for verification."); // TODO TR: Switch her for SwA or Detached-URL Connector // 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 ConnectorParameters cp = new ConnectorParameters(); cp.setProfileId(profile); return new MOASoapWithAttachmentConnector(cp); } throw new ConnectorException(ErrorCode.UNSUPPORTED_SIGNATURE, "The SIG_KZ version '" + sig_kz.getVersion() + "' is unknown. Please get a new version of PDF-AS. Your version is: " + PdfAS.PDFAS_VERSION); } // public static Connector chooseCommandlineConnectorForVerify(String connector, // PdfASID sig_kz, String sig_id, String profile) throws ConnectorException // { // log.debug("Choosing Connector for Commandline verification..."); // // log.debug("connector type = " + connector); // log.debug("sig_kz = " + sig_kz); //$NON-NLS-1$ // log.debug("sig_id = " + sig_id); //$NON-NLS-1$ // // if (sig_kz == null) // { // log.debug("sig_kz is null -> chose an old enveloped base64 connector"); //$NON-NLS-1$ // // return chooseEnvelopedBase64ConnectorOld(profile, connector); // } // // log.debug("sig_kz is not null -> one of the newer signatures"); // // if (sig_kz.getVersion().equals(SignatorFactory.VERSION_1_0_0)) // { // log.debug("Version is 1.0.0 -> Base64 Signatur (old or Hotfix)."); // // if (sig_id == null) // { // log.debug("sig_id is null, which means that it is a MOA signature -> choose a hotfix base64 connector (thus it is moa - it doesn't matter)."); // // return chooseEnvelopedBase64ConnectorHotfix(profile, connector); // } // // String[] sig_id_parts = sig_id.split("@"); // if (sig_id_parts.length == 2) // { // log.debug("sig_id has 2 @-separated parts -> choosing old base64 connector"); // // return chooseEnvelopedBase64ConnectorOld(profile, connector); // } // if (sig_id_parts[0].equals(HotfixIdFormatter.SIG_ID_PREFIX)) // { // log.debug("sig_id prefix is hotfix -> choosing hotfix base64 connector"); // // return chooseEnvelopedBase64ConnectorHotfix(profile, connector); // } // // throw new ConnectorException(300, "The SIG_KZ version is 1.0.0, but SIG_ID is neither MOA nor Old base64 nor Hotfix base64 ???'"); // } // if (sig_kz.getVersion().equals(SignatorFactory.VERSION_1_1_0)) // { // log.debug("Version is 1.1.0 -> chose a detached connector."); // // return chooseDetachedMultipartConnector(profile, connector); // } // // throw new ConnectorException(310, "The SIG_KZ version '" + sig_kz.getVersion() + "' is unknown."); // } protected static final String BKU = "bku"; //$NON-NLS-1$ protected static final String MOA = "moa"; //$NON-NLS-1$ protected static Connector chooseEnvelopedBase64ConnectorOld(String profile, String sig_app) throws ConnectorException { if (sig_app.equals(BKU)) { log.debug("sig_app is BKU ==> OldEnvelopingBase64BKUConnector"); //$NON-NLS-1$ return new OldEnvelopingBase64BKUConnector(profile); } if (sig_app.equals(MOA)) { log.debug("sig_app is MOA ==> EnvelopingBase64MOAConnector"); //$NON-NLS-1$ ConnectorParameters cp = new ConnectorParameters(); cp.setProfileId(profile); return new EnvelopingBase64MOAConnector(cp); } throw new ConnectorException(310, "Unknown sig_app '" + sig_app + "'."); //$NON-NLS-1$ //$NON-NLS-2$ } protected static Connector chooseEnvelopedBase64ConnectorHotfix( String profile, String sig_app) throws ConnectorException { if (sig_app.equals(BKU)) { log.debug("sig_app is BKU ==> EnvelopedBase64BKUConnector"); //$NON-NLS-1$ return new EnvelopedBase64BKUConnector(profile); } if (sig_app.equals(MOA)) { log.debug("sig_app is MOA ==> EnvelopedBase64MOAConnector"); //$NON-NLS-1$ ConnectorParameters cp = new ConnectorParameters(); cp.setProfileId(profile); return new EnvelopingBase64MOAConnector(cp); } throw new ConnectorException(310, "Unknown sig_app '" + sig_app + "'."); //$NON-NLS-1$ //$NON-NLS-2$ } protected static Connector chooseDetachedMultipartConnector(String profile, String sig_app) throws ConnectorException { if (sig_app.equals(BKU)) { log.debug("sig_app is BKU ==> DetachedMultipartBKUConnector"); //$NON-NLS-1$ ConnectorParameters cp = new ConnectorParameters(); cp.setProfileId(profile); return new MultipartDetachedBKUConnector(cp); } if (sig_app.equals(MOA)) { log.debug("sig_app is MOA ==> DetachedMOAConnector"); //$NON-NLS-1$ String msg = "A Detached signature cannot be verified with the MOA connector (yet)."; //$NON-NLS-1$ log.error(msg); throw new ConnectorException(ErrorCode.DETACHED_SIGNATURE_NOT_SUPPORTED, msg); } throw new ConnectorException(310, "Unknown sig_app '" + sig_app + "'."); //$NON-NLS-1$ //$NON-NLS-2$ } }