From f8f137a30a728341d9cd362778318844dc265ca8 Mon Sep 17 00:00:00 2001 From: Omar Ahmed Hassan <98468609+omar-ahmed42@users.noreply.github.com> Date: Thu, 5 Dec 2024 19:00:23 +0200 Subject: [PATCH] Feature: Show permissions as a separate tab (#2396) Show permissions as a separate tab - Move permissions code into a separate for better readability and maintainability. - Separate `Permissions` node from `Encryption` so that it would be displayed in the frontend as a separate tab. - Use more user friendly permission labels such as replacing `canModify` with `Modifying` and values such as `Allowed` and `Not Allowed` instead of `true`, `false`. - Show permissions regardless of the encryption state. --- .../controller/api/security/GetInfoOnPDF.java | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/GetInfoOnPDF.java b/src/main/java/stirling/software/SPDF/controller/api/security/GetInfoOnPDF.java index 77f02524..96745c4a 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/GetInfoOnPDF.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/GetInfoOnPDF.java @@ -322,27 +322,14 @@ public class GetInfoOnPDF { PDEncryption pdfEncryption = pdfBoxDoc.getEncryption(); encryption.put("EncryptionAlgorithm", pdfEncryption.getFilter()); encryption.put("KeyLength", pdfEncryption.getLength()); - AccessPermission ap = pdfBoxDoc.getCurrentAccessPermission(); - if (ap != null) { - ObjectNode permissionsNode = objectMapper.createObjectNode(); - - permissionsNode.put("CanAssembleDocument", ap.canAssembleDocument()); - permissionsNode.put("CanExtractContent", ap.canExtractContent()); - permissionsNode.put( - "CanExtractForAccessibility", ap.canExtractForAccessibility()); - permissionsNode.put("CanFillInForm", ap.canFillInForm()); - permissionsNode.put("CanModify", ap.canModify()); - permissionsNode.put("CanModifyAnnotations", ap.canModifyAnnotations()); - permissionsNode.put("CanPrint", ap.canPrint()); - - encryption.set( - "Permissions", permissionsNode); // set the node under "Permissions" - } // Add other encryption-related properties as needed } else { encryption.put("IsEncrypted", false); } + ObjectNode permissionsNode = objectMapper.createObjectNode(); + setNodePermissions(pdfBoxDoc, permissionsNode); + ObjectNode pageInfoParent = objectMapper.createObjectNode(); for (int pageNum = 0; pageNum < pdfBoxDoc.getNumberOfPages(); pageNum++) { ObjectNode pageInfo = objectMapper.createObjectNode(); @@ -584,6 +571,7 @@ public class GetInfoOnPDF { jsonOutput.set("DocumentInfo", docInfoNode); jsonOutput.set("Compliancy", compliancy); jsonOutput.set("Encryption", encryption); + jsonOutput.set("Permissions", permissionsNode); // set the node under "Permissions" jsonOutput.set("Other", other); jsonOutput.set("PerPageInfo", pageInfoParent); @@ -602,6 +590,22 @@ public class GetInfoOnPDF { return null; } + private void setNodePermissions(PDDocument pdfBoxDoc, ObjectNode permissionsNode) { + AccessPermission ap = pdfBoxDoc.getCurrentAccessPermission(); + + permissionsNode.put("Document Assembly", getPermissionState(ap.canAssembleDocument())); + permissionsNode.put("Extracting Content", getPermissionState(ap.canExtractContent())); + permissionsNode.put("Extracting for accessibility", getPermissionState(ap.canExtractForAccessibility())); + permissionsNode.put("Form Filling", getPermissionState(ap.canFillInForm())); + permissionsNode.put("Modifying", getPermissionState(ap.canModify())); + permissionsNode.put("Modifying annotations", getPermissionState(ap.canModifyAnnotations())); + permissionsNode.put("Printing", getPermissionState(ap.canPrint())); + } + + private String getPermissionState(boolean state) { + return state ? "Allowed" : "Not Allowed"; + } + private static void addOutlinesToArray(PDOutlineItem outline, ArrayNode arrayNode) { if (outline == null) return;