aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Marsalek <amarsalek@iaik.tugraz.at>2021-04-10 17:23:35 +0200
committerAlexander Marsalek <amarsalek@iaik.tugraz.at>2021-04-10 17:23:35 +0200
commitbd1def86093d9bb539603cc1eca4e843a37e67e5 (patch)
treebc864f9fa443755bbd42290b0967dd8e7d6a1f21
parenteb1a4aa74efe76d9af26f1c38e099ffb621707f2 (diff)
downloadpdf-as-4-bd1def86093d9bb539603cc1eca4e843a37e67e5.tar.gz
pdf-as-4-bd1def86093d9bb539603cc1eca4e843a37e67e5.tar.bz2
pdf-as-4-bd1def86093d9bb539603cc1eca4e843a37e67e5.zip
added constant
-rw-r--r--pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/IProfileConstants.java1
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/CertificateAndRequestParameterResolver.java94
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/RequestParameterResolver.java3
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/ValueResolver.java2
4 files changed, 98 insertions, 2 deletions
diff --git a/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/IProfileConstants.java b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/IProfileConstants.java
index e1fcb9d0..47992517 100644
--- a/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/IProfileConstants.java
+++ b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/IProfileConstants.java
@@ -96,4 +96,5 @@ public interface IProfileConstants {
public final static String SIG_PDFUA_FORCE = "SIG_PDFUA_FORCE";
public final static String LATIN1_ENCODING = "latin1_encoding";
+ public final static String DYNAMIC_REQUEST_PARAMETERS = "dynamic";
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/CertificateAndRequestParameterResolver.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/CertificateAndRequestParameterResolver.java
new file mode 100644
index 00000000..d7d83b34
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/CertificateAndRequestParameterResolver.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * <copyright> Copyright 2014 by E-Government Innovation Center EGIZ, Graz, Austria </copyright>
+ * 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.gv.egiz.pdfas.lib.impl.stamping;
+
+import at.gv.egiz.pdfas.common.settings.SignatureProfileSettings;
+import at.gv.egiz.pdfas.common.utils.DNUtils;
+import at.gv.egiz.pdfas.common.utils.OgnlUtils;
+import at.gv.egiz.pdfas.lib.impl.status.OperationStatus;
+import iaik.x509.X509Certificate;
+import ognl.AbstractMemberAccess;
+import ognl.MemberAccess;
+import ognl.Ognl;
+import ognl.OgnlContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.naming.InvalidNameException;
+
+import java.lang.reflect.Member;
+import java.lang.reflect.Modifier;
+import java.util.HashMap;
+import java.util.Map;
+
+public class CertificateResolver implements IResolver {
+
+ private static final Logger logger = LoggerFactory.getLogger(CertificateResolver.class);
+
+ private OgnlContext ctx;
+ private X509Certificate certificate;
+
+ public CertificateResolver(X509Certificate certificate, OperationStatus operationStatus) {
+ this.certificate = certificate;
+
+ MemberAccess memberAccess = new AbstractMemberAccess() {
+ @Override
+ public boolean isAccessible(Map context, Object target, Member member, String propertyName) {
+ int modifiers = member.getModifiers();
+ return Modifier.isPublic(modifiers);
+ }
+ };
+
+ this.ctx = new OgnlContext(null, null, memberAccess);
+
+ this.ctx.put("sn", this.certificate.getSerialNumber().toString());
+
+ try {
+ Map<String, String> issuerDNMap = DNUtils.dnToMap(certificate.getIssuerDN().getName());
+ this.ctx.put("issuer", issuerDNMap);
+ } catch (InvalidNameException e) {
+ logger.warn("Failed to build issuer Map", e);
+ }
+
+ try {
+ Map<String, String> subjectDNMap = DNUtils.dnToMap(certificate.getSubjectDN().getName());
+ this.ctx.put("subject", subjectDNMap);
+ } catch (InvalidNameException e) {
+ logger.warn("Failed to build subject Map", e);
+ }
+
+ Map<String, String> iuiMap = new HashMap<String, String>();
+ try {
+ iuiMap.put("pdfVersion", operationStatus.getPdfObject().getPDFVersion());
+ } catch(Throwable e) {
+ logger.warn("Cannot determine pdfVersion: " + e.getMessage());
+ }
+ this.ctx.put("iui", iuiMap);
+ }
+
+ public String resolve(String key, String value, SignatureProfileSettings settings) {
+ return OgnlUtils.resolvsOgnlExpression(value, this.ctx);
+ }
+
+}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/RequestParameterResolver.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/RequestParameterResolver.java
index 4b2a8f10..b8abb383 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/RequestParameterResolver.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/RequestParameterResolver.java
@@ -4,6 +4,7 @@ import java.lang.reflect.Member;
import java.lang.reflect.Modifier;
import java.util.Map;
+import at.gv.egiz.pdfas.common.settings.IProfileConstants;
import at.gv.egiz.pdfas.common.settings.SignatureProfileSettings;
import at.gv.egiz.pdfas.common.utils.OgnlUtils;
import ognl.AbstractMemberAccess;
@@ -27,7 +28,7 @@ public class RequestParameterResolver implements IResolver {
};
this.ctx = new OgnlContext(null, null, memberAccess);
- this.ctx.put("dynamic", requestParameters);
+ this.ctx.put(IProfileConstants.DYNAMIC_REQUEST_PARAMETERS, requestParameters);
// for(String key : requestParameters.keySet()) {
// this.ctx.put(key, requestParameters.get(key));
// }
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/ValueResolver.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/ValueResolver.java
index e5905c22..6e8d2a72 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/ValueResolver.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/ValueResolver.java
@@ -126,7 +126,7 @@ public class ValueResolver implements IProfileConstants, IResolver {
result += tmp1;
curidx = idxe;
String tmpValue = matcher.group(1);
- if(!tmpValue.contains("dynamic")) {
+ if(!tmpValue.contains(DYNAMIC_REQUEST_PARAMETERS)) {
String tmp = internalCertificateResolver.resolve(key, tmpValue, settings);
result += tmp;
}else {