From 894ab866078b47cba7e73df3fd36af7d1b8c9efe Mon Sep 17 00:00:00 2001 From: ferbas Date: Fri, 4 Dec 2009 09:42:00 +0000 Subject: added config property adobeSignText git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@488 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- .../wag/egov/egiz/pdf/BinarySignature.java | 53 ++++++++++++++++++---- 1 file changed, 44 insertions(+), 9 deletions(-) (limited to 'src/main/java/at/knowcenter') diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/pdf/BinarySignature.java b/src/main/java/at/knowcenter/wag/egov/egiz/pdf/BinarySignature.java index 47bae56..ebf7d42 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/pdf/BinarySignature.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/pdf/BinarySignature.java @@ -45,6 +45,7 @@ import at.gv.egiz.pdfas.exceptions.pdf.KZSettingNotFoundException; import at.gv.egiz.pdfas.framework.input.PdfDataSource; import at.gv.egiz.pdfas.framework.output.DataSink; import at.gv.egiz.pdfas.framework.signator.SignatorInformation; +import at.gv.egiz.pdfas.utils.OgnlUtil; import at.knowcenter.wag.egov.egiz.cfg.SettingsReader; import at.knowcenter.wag.egov.egiz.exceptions.PDFDocumentException; import at.knowcenter.wag.egov.egiz.exceptions.PlaceholderException; @@ -239,6 +240,8 @@ public abstract class BinarySignature * The number placeholder that is used to give numbers a fixed length. */ protected static final PdfNumber NUMBER_PLACEHOLDER = new PdfNumber(99999999); + + public static final String ADOBE_SIG_TEXT_KEY = "adobeSignText"; /** * Extracts the signature text only. @@ -966,14 +969,7 @@ public abstract class BinarySignature XMLGregorianCalendar c = DatatypeFactory.newInstance().newXMLGregorianCalendar(si.getSignSignatureObject().date); sig.setDate(new PdfDate(c.toGregorianCalendar())); } - String cn = null; - if (si != null) { - cn = si.getSignSignatureObject().certSubjectDNPart("CN"); - } - if (cn == null) { - cn = "PDF-AS"; - } - sig.setName(cn); + sig.setName(getAdobeSigName(so.getSignatureTypeDefinition().getType(), si)); sap.setCryptoDictionary(sig); // content element is mandatory but empty @@ -988,9 +984,48 @@ public abstract class BinarySignature logger.error("error", ex); throw new PresentableException(ErrorCode.CANNOT_WRITE_PDF, "Error creating adobe signature attribute", ex); } - } + /** + * Evaluate name for adobe signature field. Get from config. Evaluate ognl if ok. + * @param sigProfile + * @param si + * @return + */ + private static String getAdobeSigName(String sigProfile, SignatorInformation si) { + String defaultName = "PDF-AS"; + try { + logger.debug("reading adobe sig name for profile: " + sigProfile); + String propKey = ADOBE_SIG_TEXT_KEY + ".textual"; + if (si == null) { + propKey = propKey.replaceAll("textual", "binary"); + } + String adobeStr = SettingsReader.getInstance().getSetting( + "sig_obj." +sigProfile+"."+propKey, + "default."+propKey, defaultName); + + HashMap ognlCtx = new HashMap(); + OgnlUtil ognl = new OgnlUtil(ognlCtx); + if (ognl.containsExpression(adobeStr)) { + if (si == null) { + logger.error( ADOBE_SIG_TEXT_KEY + + " ognl expressions not allowed for binary signatures (SignatorInformation not available)"); + return defaultName; + } + ognlCtx.put("si", si); + ognlCtx.put("sso", si.getSignSignatureObject()); + String res = ognl.compileMessage(adobeStr); + return res; + } else { + return adobeStr; + } + + } catch (Exception ex) { + logger.warn("error creating adobe sign text, using default 'PDF-AS'", ex); + return defaultName; + } + } + private static Rectangle createRectangleFromTablePos(ActualTablePos pos) { return new Rectangle(pos.x, pos.y, pos.x + pos.width, pos.y - pos.height); } -- cgit v1.2.3