From f471d8a5ac76cff2f6a6c833c7c4aa08d24fecab Mon Sep 17 00:00:00 2001 From: tknall Date: Tue, 1 Feb 2011 16:52:43 +0000 Subject: New (optional) configuration key introduced that supressed the Exception when incremental updates without further signatures are found. git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@742 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- .../pdfas/impl/vfilter/VerificationFilterImpl.java | 20 ++++++++++++++++---- .../wag/egov/egiz/framework/VerificationFilter.java | 13 +++++++------ 2 files changed, 23 insertions(+), 10 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java b/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java index 34b461e..c067c8f 100644 --- a/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java +++ b/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java @@ -57,6 +57,7 @@ public class VerificationFilterImpl implements VerificationFilter public static final String CHECK_DOCUMENT = "check_document"; + public static final String SUPRESS_EXCEPTION_WHEN_LAST_UIBLOCK_IS_NO_SIGNATURE = "supress_exception_when_last_iublock_is_no_signature"; public static final String BINARY_ONLY = "binary_only"; public static final String ASSUME_ONLY_SIGNATURE_BLOCKS = "assume_only_signature_blocks"; @@ -291,6 +292,7 @@ public class VerificationFilterImpl implements VerificationFilter throw new VerificationFilterException(e); } String check_doc = settings.getSetting(CHECK_DOCUMENT, "false"); + boolean supressException = "true".equalsIgnoreCase(settings.getSetting(SUPRESS_EXCEPTION_WHEN_LAST_UIBLOCK_IS_NO_SIGNATURE, "false")); // flag indicating that the last IU-block of the document is a non-signature IU-block boolean lastBlockWasModified = false; @@ -381,7 +383,7 @@ public class VerificationFilterImpl implements VerificationFilter // if document checking is enabled, at least one signature has been found so far, we are dealing with a // non-signature IU-block - if((check_doc.equalsIgnoreCase("true"))&& (sigFound && !partitionContainsNewTextSignatures)) { + if ((check_doc.equalsIgnoreCase("true"))&& (sigFound && !partitionContainsNewTextSignatures)) { nshList.add(new NoSignatureHolder(signatureCounter)); lastBlockWasModified = true; @@ -394,8 +396,12 @@ public class VerificationFilterImpl implements VerificationFilter } // throw an exception if the last update block does not contain a signature and signatures have been found in this document - if(lastBlockWasModified) { - throw new VerificationFilterException(ErrorCode.MODIFIED_AFTER_SIGNATION, "The document has been modified after being signed."); + if (lastBlockWasModified) { + if (!supressException) { + throw new VerificationFilterException(ErrorCode.MODIFIED_AFTER_SIGNATION, "The document has been modified after being signed."); + } else { + log.debug("The document has been modified after being signed. According to the configuration, no exception is thrown."); + } } List extractedSignatures = new ArrayList(); @@ -646,6 +652,7 @@ public class VerificationFilterImpl implements VerificationFilter String check_doc = settings.getSetting(CHECK_DOCUMENT, "false"); String binary_only = settings.getSetting(BINARY_ONLY, "false"); String assume_sigs_only = settings.getSetting(ASSUME_ONLY_SIGNATURE_BLOCKS, "false"); + boolean supressException = "true".equalsIgnoreCase(settings.getSetting(SUPRESS_EXCEPTION_WHEN_LAST_UIBLOCK_IS_NO_SIGNATURE, "false")); try { @@ -689,7 +696,12 @@ public class VerificationFilterImpl implements VerificationFilter assume_sigs_only.equalsIgnoreCase("false") && sig_detected) { - throw new VerificationFilterException(ErrorCode.MODIFIED_AFTER_SIGNATION, "The document has been modified after being signed."); + if (!supressException) { + throw new VerificationFilterException(ErrorCode.MODIFIED_AFTER_SIGNATION, "The document has been modified after being signed."); + } else { + log.debug("The document has been modified after being signed. According to the configuration, no exception is thrown."); + } + } } diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/framework/VerificationFilter.java b/src/main/java/at/knowcenter/wag/egov/egiz/framework/VerificationFilter.java index b218062..5a5712e 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/framework/VerificationFilter.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/framework/VerificationFilter.java @@ -17,18 +17,15 @@ */ package at.knowcenter.wag.egov.egiz.framework; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.PrintStream; import java.util.ArrayList; import java.util.List; -import at.gv.egiz.pdfas.exceptions.ErrorCode; - import org.apache.log4j.Logger; +import at.gv.egiz.pdfas.exceptions.ErrorCode; +import at.gv.egiz.pdfas.impl.vfilter.VerificationFilterImpl; import at.knowcenter.wag.egov.egiz.PdfAS; import at.knowcenter.wag.egov.egiz.PdfASID; import at.knowcenter.wag.egov.egiz.cfg.ConfigLogger; @@ -118,6 +115,7 @@ public class VerificationFilter // tzefferer: get allow_post_sign_modifications property from property file SettingsReader settings = SettingsReader.getInstance(); String allow_post_sign_mods = settings.getSetting(ALLOW_POST_SIGN_MODIFICATIONS, "false"); + boolean supressException = "true".equalsIgnoreCase(settings.getSetting(VerificationFilterImpl.SUPRESS_EXCEPTION_WHEN_LAST_UIBLOCK_IS_NO_SIGNATURE, "false")); List holders = new ArrayList(); @@ -252,7 +250,10 @@ public class VerificationFilter { if (signature_block_detected && !current_block_contains_signature) { - throw new PDFDocumentException(ErrorCode.MODIFIED_AFTER_SIGNATION, "Das Dokument wurde nach erfolgter Signierung verändert."); + if (!supressException) { + throw new PDFDocumentException(ErrorCode.MODIFIED_AFTER_SIGNATION, "Das Dokument wurde nach erfolgter Signierung verändert."); + } + } } } -- cgit v1.2.3