From da64c825de6ad061f5c734630faf0d6e9606dc12 Mon Sep 17 00:00:00 2001 From: Christian Maierhofer Date: Thu, 23 Jun 2016 10:06:40 +0200 Subject: Added Profile configuration validation --- pdf-as-pdfbox-2/build.gradle | 4 + .../pdfbox2/configuration/ProfileValidator.java | 131 +++++++++++++++++++++ ....pdfas.lib.configuration.ConfigurationValidator | 1 + 3 files changed, 136 insertions(+) create mode 100644 pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/configuration/ProfileValidator.java create mode 100644 pdf-as-pdfbox-2/src/main/resources/META-INF/services/at.gv.egiz.pdfas.lib.configuration.ConfigurationValidator (limited to 'pdf-as-pdfbox-2') diff --git a/pdf-as-pdfbox-2/build.gradle b/pdf-as-pdfbox-2/build.gradle index 4fe4b427..f62604a3 100644 --- a/pdf-as-pdfbox-2/build.gradle +++ b/pdf-as-pdfbox-2/build.gradle @@ -25,9 +25,13 @@ dependencies { compile 'org.slf4j:jcl-over-slf4j:1.7.18' compile group: 'org.apache.pdfbox', name: 'pdfbox', version: '2.0.2' compile group: 'org.apache.pdfbox', name: 'pdfbox-tools', version: '2.0.2' + testCompile group: 'org.apache.pdfbox', name: 'preflight', version: '2.0.2' compile group: 'commons-io', name: 'commons-io', version: '2.4' compile group: 'ognl', name: 'ognl', version: '3.0.6' testCompile group: 'junit', name: 'junit', version: '4.+' + compile group: 'com.github.jai-imageio', name: 'jai-imageio-jpeg2000', version: '1.3.0' + compile group: 'com.github.jai-imageio', name: 'jai-imageio-core', version: '1.3.1' + compile group: 'com.levigo.jbig2', name: 'levigo-jbig2-imageio', version: '1.6.5' } test { diff --git a/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/configuration/ProfileValidator.java b/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/configuration/ProfileValidator.java new file mode 100644 index 00000000..8d02d1b3 --- /dev/null +++ b/pdf-as-pdfbox-2/src/main/java/at/gv/egiz/pdfas/lib/impl/pdfbox2/configuration/ProfileValidator.java @@ -0,0 +1,131 @@ +package at.gv.egiz.pdfas.lib.impl.pdfbox2.configuration; + +import iaik.asn1.ObjectID; +import iaik.asn1.structures.Name; +import iaik.x509.X509Certificate; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.pdfas.common.exceptions.PdfAsSettingsValidationException; +import at.gv.egiz.pdfas.common.settings.ISettings; +import at.gv.egiz.pdfas.common.settings.SignatureProfileSettings; +import at.gv.egiz.pdfas.lib.api.ByteArrayDataSource; +import at.gv.egiz.pdfas.lib.configuration.ConfigurationValidator; +import at.gv.egiz.pdfas.lib.impl.pdfbox2.PDFBOXObject; +import at.gv.egiz.pdfas.lib.impl.stamping.TableFactory; +import at.gv.egiz.pdfas.lib.impl.stamping.pdfbox2.PDFBoxTable; +import at.gv.egiz.pdfas.lib.impl.status.ICertificateProvider; +import at.gv.egiz.pdfas.lib.impl.status.OperationStatus; +import at.knowcenter.wag.egov.egiz.table.Table; + +public class ProfileValidator implements ConfigurationValidator{ + + private static final String NAME = "PDFBOX_2_PROFILE_VALIDATOR"; + + private static final Logger logger = LoggerFactory + .getLogger(ProfileValidator.class); + + @Override + public void validate(ISettings settings) throws PdfAsSettingsValidationException{ + Set profileIds = new HashSet(); + + Iterator itKeys = settings.getFirstLevelKeys("sig_obj.types.") + .iterator(); + while (itKeys.hasNext()) { + String key = itKeys.next(); + String profile = key.substring("sig_obj.types.".length()); + + if (settings.getValue(key).equals("on")) { + profileIds.add(profile); + } + } + logger.debug("Validating "+profileIds.size()+ " Profiles."); + + ArrayList profileSettings = new ArrayList(); + + OperationStatus opState = new OperationStatus(settings, null, null); + + X509Certificate dummyCert = new X509Certificate(); + dummyCert.setSerialNumber(new BigInteger("123")); + Name n = new Name(); + n.addRDN(ObjectID.country, "AT"); + n.addRDN(ObjectID.locality, "Graz"); + n.addRDN(ObjectID.organization ,"test"); + n.addRDN(ObjectID.organizationalUnit ,"test"); + n.addRDN(ObjectID.commonName ,"testca"); + dummyCert.setIssuerDN(n); + dummyCert.setSubjectDN(n); + + ICertificateProvider certProvider = new DummyCertificateProvider(dummyCert); + + PDFBOXObject pdfBoxObject = new PDFBOXObject(opState); + PDDocument origDoc = new PDDocument(); + origDoc.addPage(new PDPage(PDRectangle.A4)); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try { + + origDoc.save(baos); + baos.close(); + origDoc.close(); + + pdfBoxObject.setOriginalDocument(new ByteArrayDataSource(baos.toByteArray())); + } catch (IOException e1) { + logger.info("Configuration Validation failed!"); + throw new PdfAsSettingsValidationException("Configuration Validationfailed!", e1); + } + + + for(String id:profileIds){ + SignatureProfileSettings profileSetting = new SignatureProfileSettings(id, settings); + profileSettings.add(profileSetting); + if(profileSetting.getValue("isvisible")!=null){ + if(profileSetting.getValue("isvisible").equals("false")){ + continue; + } + } + Table t; + try { + t = TableFactory.createSigTable(profileSetting, "main", opState, certProvider); + new PDFBoxTable(t, null, settings, pdfBoxObject); + } catch (Exception e) { + logger.info("Configuration Validation for profile "+id+" failed!"); + throw new PdfAsSettingsValidationException("Configuration Validation for profile "+id+" failed!", e); + } + + } + } + + @Override + public boolean usedAsDefault() { + return true; + } + + @Override + public String getName() { + return NAME; + } + + private class DummyCertificateProvider implements ICertificateProvider { + private X509Certificate cert; + public DummyCertificateProvider(X509Certificate cert) { + this.cert = cert; + } + public X509Certificate getCertificate() { + return cert; + } + + } + +} diff --git a/pdf-as-pdfbox-2/src/main/resources/META-INF/services/at.gv.egiz.pdfas.lib.configuration.ConfigurationValidator b/pdf-as-pdfbox-2/src/main/resources/META-INF/services/at.gv.egiz.pdfas.lib.configuration.ConfigurationValidator new file mode 100644 index 00000000..ac38ebbf --- /dev/null +++ b/pdf-as-pdfbox-2/src/main/resources/META-INF/services/at.gv.egiz.pdfas.lib.configuration.ConfigurationValidator @@ -0,0 +1 @@ +at.gv.egiz.pdfas.lib.impl.pdfbox2.configuration.ProfileValidator \ No newline at end of file -- cgit v1.2.3