diff options
Diffstat (limited to 'pdf-as-cli/src')
| -rw-r--r-- | pdf-as-cli/src/main/java/at/gv/egiz/pdfas/cli/Main.java | 130 | 
1 files changed, 89 insertions, 41 deletions
| diff --git a/pdf-as-cli/src/main/java/at/gv/egiz/pdfas/cli/Main.java b/pdf-as-cli/src/main/java/at/gv/egiz/pdfas/cli/Main.java index dfd33c34..e6b7f624 100644 --- a/pdf-as-cli/src/main/java/at/gv/egiz/pdfas/cli/Main.java +++ b/pdf-as-cli/src/main/java/at/gv/egiz/pdfas/cli/Main.java @@ -24,12 +24,16 @@ import at.gv.egiz.pdfas.lib.api.DataSink;  import at.gv.egiz.pdfas.lib.api.DataSource;  import at.gv.egiz.pdfas.lib.api.PdfAs;  import at.gv.egiz.pdfas.lib.api.PdfAsFactory; +import at.gv.egiz.pdfas.lib.api.sign.IPlainSigner;  import at.gv.egiz.pdfas.lib.api.sign.SignParameter;  import at.gv.egiz.pdfas.lib.api.sign.SignResult;  import at.gv.egiz.pdfas.lib.api.verify.VerifyParameter;  import at.gv.egiz.pdfas.lib.api.verify.VerifyResult;  import at.gv.egiz.pdfas.sigs.pades.PAdESSigner;  import at.gv.egiz.sl.util.BKUSLConnector; +import at.gv.egiz.sl.util.ISLConnector; +import at.gv.egiz.sl.util.ISignatureConnectorSLWrapper; +import at.gv.egiz.sl.util.MOAConnector;  public class Main { @@ -179,13 +183,19 @@ public class Main {  		if (cli.hasOption(CLI_ARG_PROFILE_SHORT)) {  			profilID = cli.getOptionValue(CLI_ARG_PROFILE_SHORT);  		} -		 +  		String outputFile = null; -		 -		if(cli.hasOption(CLI_ARG_OUTPUT_SHORT)) { + +		if (cli.hasOption(CLI_ARG_OUTPUT_SHORT)) {  			outputFile = cli.getOptionValue(CLI_ARG_OUTPUT_SHORT);  		} +		String connector = null; +		 +		if(cli.hasOption(CLI_ARG_CONNECTOR_SHORT)) { +			connector = cli.getOptionValue(CLI_ARG_CONNECTOR_SHORT); +		} +		  		String pdfFile = null;  		pdfFile = cli.getArgs()[cli.getArgs().length - 1]; @@ -196,16 +206,18 @@ public class Main {  			throw new Exception("Input file does not exists");  		} -		if(outputFile == null) { -			if(pdfFile.endsWith(".pdf")) { -				outputFile = pdfFile.subSequence(0, pdfFile.length() - ".pdf".length()) + "_signed.pdf"; +		if (outputFile == null) { +			if (pdfFile.endsWith(".pdf")) { +				outputFile = pdfFile.subSequence(0, +						pdfFile.length() - ".pdf".length()) +						+ "_signed.pdf";  			} else {  				outputFile = pdfFile + "_signed.pdf";  			}  		} -		 +  		File outputPdfFile = new File(outputFile); -		 +  		DataSource dataSource = new ByteArrayDataSource(  				StreamUtils.inputStreamToByteArray(new FileInputStream(  						inputFile))); @@ -221,23 +233,31 @@ public class Main {  		SignParameter signParameter = PdfAsFactory.createSignParameter(  				configuration, dataSource); +		IPlainSigner slConnector = null; +		 +		if(connector != null) { +			if(connector.equalsIgnoreCase("bku")) { +				slConnector = new PAdESSigner(new BKUSLConnector(configuration)); +			} else if(connector.equalsIgnoreCase("moa")) { +				slConnector = new PAdESSigner(new MOAConnector(configuration)); +			} +		}  +		if(slConnector == null) { +			slConnector = new PAdESSigner(new BKUSLConnector(configuration)); +		} +		  		signParameter.setOutput(dataSink); -		signParameter.setPlainSigner(new PAdESSigner(new BKUSLConnector(configuration))); +		signParameter.setPlainSigner(slConnector);  		signParameter.setDataSource(dataSource);  		signParameter.setSignaturePosition(positionString);  		signParameter.setSignatureProfileId(profilID); - -		// Set SL Signer! This will need connector value from cli -		// signParameter.setPlainSigner(signer); - +		System.out.println("Starting signature for " + pdfFile);  		SignResult result = pdfAs.sign(signParameter); -		 -		if(outputPdfFile.exists()) { -		} -		 +  		FileOutputStream fos = new FileOutputStream(outputPdfFile, false);  		fos.write(dataSink.getData());  		fos.close(); +		System.out.println("Signed document " + outputFile);  	}  	private static void perform_verify(CommandLine cli) throws Exception { @@ -249,14 +269,14 @@ public class Main {  		} else {  			configurationFile = STANDARD_CONFIG_LOCATION;  		} -		 +  		int which = -1;  		if (cli.hasOption(CLI_ARG_VERIFY_WHICH_SHORT)) {  			String whichValue = cli.getOptionValue(CLI_ARG_VERIFY_WHICH_SHORT);  			which = Integer.parseInt(whichValue); -		}  -		 +		} +  		String pdfFile = null;  		pdfFile = cli.getArgs()[cli.getArgs().length - 1]; @@ -276,35 +296,63 @@ public class Main {  		pdfAs = PdfAsFactory.createPdfAs(new File(configurationFile));  		Configuration configuration = pdfAs.getConfiguration(); -		 -		VerifyParameter verifyParameter =  -				PdfAsFactory.createVerifyParameter(configuration, dataSource); -		 + +		VerifyParameter verifyParameter = PdfAsFactory.createVerifyParameter( +				configuration, dataSource); +  		verifyParameter.setDataSource(dataSource);  		verifyParameter.setConfiguration(configuration);  		verifyParameter.setWhichSignature(which); -		 +  		List<VerifyResult> results = pdfAs.verify(verifyParameter); -		 +  		Iterator<VerifyResult> resultIterator = results.iterator(); -		 -		while(resultIterator.hasNext()) { + +		int idx = 0; +		while (resultIterator.hasNext()) {  			VerifyResult verifyResult = resultIterator.next(); -			dumpVerifyResult(verifyResult); +			dumpVerifyResult(verifyResult, pdfFile, idx); +			idx++;  		}  	} -	 -	private static void dumpVerifyResult(VerifyResult verifyResult) { + +	private static void dumpVerifyResult(VerifyResult verifyResult, +			String inputFile, int idx) {  		System.out.println("Verification Result:"); -		System.out.println("\tValue Check: " +  -				verifyResult.getValueCheckCode().getMessage() +  -				" [" + verifyResult.getValueCheckCode().getCode() + "]"); -		System.out.println("\tCertificate Check: " +  -				verifyResult.getCertificateCheck().getMessage() +  -				" [" + verifyResult.getCertificateCheck().getCode() + "]"); -		System.out.println("\tQualified Certificate: " +  -				verifyResult.isQualifiedCertificate()); -		System.out.println("\tVerification done: " +  -				verifyResult.isVerificationDone()); +		System.out.println("\tValue Check: " +				+ verifyResult.getValueCheckCode().getMessage() + " [" +				+ verifyResult.getValueCheckCode().getCode() + "]"); +		System.out.println("\tCertificate Check: " +				+ verifyResult.getCertificateCheck().getMessage() + " [" +				+ verifyResult.getCertificateCheck().getCode() + "]"); +		System.out.println("\tQualified Certificate: " +				+ verifyResult.isQualifiedCertificate()); +		System.out.println("\tVerification done: " +				+ verifyResult.isVerificationDone()); +		try { +			if (verifyResult.isVerificationDone() +					&& verifyResult.getValueCheckCode().getCode() == 0) { +				String outputFile = null; + +				if (inputFile.endsWith(".pdf")) { +					outputFile = inputFile.subSequence(0, inputFile.length() +							- ".pdf".length()) +							+ "_verified_" + idx + ".pdf"; +				} else { +					outputFile = inputFile + "_verified_" + idx + ".pdf"; +				} + +				File outputPdfFile = new File(outputFile); +				FileOutputStream fos = new FileOutputStream(outputPdfFile, +						false); +				fos.write(verifyResult.getSignatureData()); +				fos.close(); +				System.out.println("\tSigned PDF: " +						+ outputFile); +			}			 +		} catch (Exception e) { +			System.out.println("\tFailed to save signed PDF! [" + e.getMessage() + "]"); +			e.printStackTrace(); +		}  	}  } | 
