/** * @param params * @return the {@link StandardSecurity} corresponding to the {@link EncryptParameters} */ public static StandardSecurity securityFromParams(EncryptParameters params) { return new StandardSecurity(params.getOwnerPassword(), params.getUserPassword(), getEncryptionFrom(params.getEncryptionAlgorithm()), getPermissionsFrom(params.getPermissions()), true); }
@Test(expected = UnsupportedOperationException.class) public void testUnmodifiableList() { EncryptParameters victim = new EncryptParameters(PdfEncryption.STANDARD_ENC_40); victim.addPermission(PdfAccessPermission.ANNOTATION); victim.getPermissions().clear(); }
@Override public boolean isValid(EncryptParameters value, ConstraintValidatorContext context) { if (value != null) { return isNotBlank(value.getOwnerPassword()) || isNotBlank(value.getUserPassword()); } return true; } }
public void before(EncryptParameters parameters) { totalSteps = parameters.getSourceList().size(); sourceOpener = PdfSourceOpeners.newPartialReadOpener(); outputWriter = OutputWriters.newMultipleOutputWriter(parameters.isOverwrite()); for (PdfAccessPermission permission : parameters.getPermissions()) { permissions |= getAccessPermission(permission); } }
public void execute(EncryptParameters parameters) throws TaskException { int currentStep = 0; for (PdfSource<?> source : parameters.getSourceList()) { currentStep++; LOG.debug("Opening {} ", source); reader = source.open(sourceOpener); File tmpFile = createTemporaryPdfBuffer(); LOG.debug("Created output temporary buffer {} ", tmpFile); stamperHandler = new PdfStamperHandler(reader, tmpFile, parameters.getVersion()); stamperHandler.setCompressionOnStamper(parameters.isCompress()); stamperHandler.setCreatorOnStamper(reader); stamperHandler.setEncryptionOnStamper(getEncryptionAlgorithm(parameters.getEncryptionAlgorithm()), parameters.getUserPassword(), parameters.getOwnerPassword(), permissions); nullSafeClosePdfReader(reader); nullSafeCloseQuietly(stamperHandler); String outName = nameGenerator(parameters.getOutputPrefix()).generate( nameRequest().originalName(source.getName()).fileNumber(currentStep)); outputWriter.addOutput(file(tmpFile).name(outName)); notifyEvent(getNotifiableTaskMetadata()).stepsCompleted(currentStep).outOf(totalSteps); } parameters.getOutput().accept(outputWriter); LOG.debug("Input documents encrypted and written to {}", parameters.getOutput()); LOG.debug("Permissions {}", PdfEncryptor.getPermissionsVerbose(permissions)); }
@Override public void execute(EncryptParameters parameters) throws TaskException { int currentStep = 0; for (PdfSource<?> source : parameters.getSourceList()) { executionContext().assertTaskNotCancelled(); currentStep++; LOG.debug("Opening {}", source); try { documentHandler = source.open(documentLoader); documentHandler.setCreatorOnPDDocument(); File tmpFile = createTemporaryBuffer(parameters.getOutput()); LOG.debug("Created output on temporary buffer {}", tmpFile); documentHandler.setVersionOnPDDocument(parameters.getVersion()); documentHandler.setCompress(parameters.isCompress()); documentHandler.savePDDocument(tmpFile, security); String outName = nameGenerator(parameters.getOutputPrefix()) .generate(nameRequest().originalName(source.getName()).fileNumber(currentStep)); outputWriter.addOutput(file(tmpFile).name(outName)); } finally { nullSafeCloseQuietly(documentHandler); } notifyEvent(executionContext().notifiableTaskMetadata()).stepsCompleted(currentStep).outOf(totalSteps); } parameters.getOutput().accept(outputWriter); LOG.debug("Input documents encrypted using {}, standard security handler revision {} and written to {}", security.encryption, security.encryption.revision.revisionNumber, parameters.getOutput()); LOG.debug("Permissions: {}", parameters.getPermissions().stream().map(PdfAccessPermission::getFriendlyName) .collect(Collectors.joining(", "))); }
@Test public void testEmptyBoth() { EncryptParameters params = new EncryptParameters(PdfEncryption.AES_ENC_128); params.setOwnerPassword(""); params.setUserPassword(""); assertFalse(victim.isValid(params, null)); }
@Test public void testClear() { EncryptParameters victim = new EncryptParameters(PdfEncryption.STANDARD_ENC_40); victim.addPermission(PdfAccessPermission.ANNOTATION); assertEquals(1, victim.getPermissions().size()); victim.clearPermissions(); assertEquals(0, victim.getPermissions().size()); }
/** * Transforms {@link EncryptTaskCliArguments} to {@link EncryptParameters} * * @param taskCliArguments * @return populated task parameters */ @Override public EncryptParameters toTaskParameters(EncryptTaskCliArguments taskCliArguments) { EncryptParameters parameters = new EncryptParameters(taskCliArguments.getEncryptionType().getEnumValue()); populateAbstractParameters(parameters, taskCliArguments); populateSourceParameters(parameters, taskCliArguments); populateOutputTaskParameters(parameters, taskCliArguments); populateOutputPrefix(parameters, taskCliArguments); String ownerPassword = taskCliArguments.getAdministratorPassword(); if(ownerPassword.isEmpty()){ ownerPassword = UUID.randomUUID().toString(); } parameters.setOwnerPassword(ownerPassword); parameters.setUserPassword(taskCliArguments.getUserPassword()); if (taskCliArguments.isAllow()) { for (PdfAccessPermissionAdapter eachAllowedPermissionAdapter : taskCliArguments.getAllow()) { parameters.addPermission(eachAllowedPermissionAdapter.getEnumValue()); } } return parameters; } }
private void setUpParameters(PdfEncryption encryption) { parameters = new EncryptParameters(encryption); parameters.setCompress(true); parameters.setOutputPrefix("test_prefix_"); parameters.setVersion(PdfVersion.VERSION_1_6); parameters.addSource(shortInput()); parameters.setExistingOutputPolicy(ExistingOutputPolicy.OVERWRITE); }
@Test public void aes256WithOwner() throws IOException { setUpParameters(PdfEncryption.AES_ENC_256); parameters.setVersion(PdfVersion.VERSION_1_7); parameters.setOwnerPassword("Chuck"); parameters.setUserPassword("Norris"); parameters.addPermission(PdfAccessPermission.COPY_AND_EXTRACT); parameters.addPermission(PdfAccessPermission.FILL_FORMS); testContext.directoryOutputTo(parameters); execute(parameters); testContext.assertTaskCompleted("Norris"); testContext.assertCreator().assertVersion(PdfVersion.VERSION_1_7).forEachPdfOutput(d -> { assertTrue(d.isEncrypted()); assertTrue(d.getCurrentAccessPermission().canExtractContent()); assertTrue(d.getCurrentAccessPermission().canFillInForm()); }); }
@Test public void testEqual() { EncryptParameters eq1 = new EncryptParameters(PdfEncryption.STANDARD_ENC_40); eq1.addPermission(PdfAccessPermission.COPY_AND_EXTRACT); EncryptParameters eq2 = new EncryptParameters(PdfEncryption.STANDARD_ENC_40); eq2.addPermission(PdfAccessPermission.COPY_AND_EXTRACT); EncryptParameters eq3 = new EncryptParameters(PdfEncryption.STANDARD_ENC_40); eq3.addPermission(PdfAccessPermission.COPY_AND_EXTRACT); EncryptParameters diff = new EncryptParameters(PdfEncryption.STANDARD_ENC_40); diff.addPermission(PdfAccessPermission.ASSEMBLE); diff.setVersion(PdfVersion.VERSION_1_2); TestUtils.testEqualsAndHashCodes(eq1, eq2, eq3, diff); }
@Test public void arc128WithOwner() throws IOException { setUpParameters(PdfEncryption.STANDARD_ENC_128); parameters.setOwnerPassword("test"); parameters.addPermission(PdfAccessPermission.COPY_AND_EXTRACT); parameters.addPermission(PdfAccessPermission.FILL_FORMS); testContext.directoryOutputTo(parameters); execute(parameters); testContext.assertTaskCompleted(); testContext.assertCreator().assertVersion(PdfVersion.VERSION_1_6).forEachPdfOutput(d -> { assertTrue(d.isEncrypted()); assertTrue(d.getCurrentAccessPermission().canExtractContent()); assertTrue(d.getCurrentAccessPermission().canFillInForm()); }); }
@Test public void defaultPermissions() throws IOException { setUpParameters(PdfEncryption.STANDARD_ENC_128); assertEquals(parameters.getPermissions().size(), 0); parameters.setOwnerPassword("test"); testContext.directoryOutputTo(parameters); execute(parameters); testContext.assertTaskCompleted(); testContext.forEachPdfOutput(d -> { assertTrue(d.isEncrypted()); assertFalse(d.getCurrentAccessPermission().canAssembleDocument()); assertFalse(d.getCurrentAccessPermission().canExtractContent()); assertTrue(d.getCurrentAccessPermission().canExtractForAccessibility()); assertFalse(d.getCurrentAccessPermission().canFillInForm()); assertFalse(d.getCurrentAccessPermission().canModify()); assertFalse(d.getCurrentAccessPermission().canModifyAnnotations()); assertFalse(d.getCurrentAccessPermission().canPrint()); assertFalse(d.getCurrentAccessPermission().canPrintDegraded()); }); } }
@Test public void noPermissions() { EncryptParameters parameters = defaultCommandLine().invokeSejdaConsole(); assertEquals(Collections.EMPTY_SET, parameters.getPermissions()); }
@Test public void testInvalidParameters() { EncryptParameters victim = new EncryptParameters(null); SingleOrMultipleTaskOutput output = mock(SingleOrMultipleTaskOutput.class); victim.setOutput(output); InputStream stream = mock(InputStream.class); PdfSource<InputStream> input = PdfStreamSource.newInstanceNoPassword(stream, "name"); victim.addSource(input); TestUtils.assertInvalidParameters(victim); } }
@Test public void testEncryptionType_Default() { EncryptParameters parameters = defaultCommandLine().invokeSejdaConsole(); assertEquals(PdfEncryption.STANDARD_ENC_128, parameters.getEncryptionAlgorithm()); }
@Test public void testOutputPrefix_Default() { EncryptParameters parameters = defaultCommandLine().invokeSejdaConsole(); assertEquals("", parameters.getOutputPrefix()); }
@Test public void testNoPwd() { EncryptParameters params = new EncryptParameters(PdfEncryption.AES_ENC_128); assertFalse(victim.isValid(params, null)); }
@Test public void aes256WithUserPassword() throws IOException { setUpParameters(PdfEncryption.AES_ENC_256); parameters.setUserPassword("1234"); testContext.directoryOutputTo(parameters); execute(parameters); testContext.assertTaskCompleted("1234"); testContext.assertCreator().forEachPdfOutput(d -> { assertTrue(d.isEncrypted()); }); }