From 2c2cc9e46ea225f611739c0d267d16aa51dc3375 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com.> Date: Fri, 5 Sep 2025 12:22:22 +0100 Subject: [PATCH] API cleanup --- .../software/SPDF/config/OpenApiConfig.java | 4 +- .../software/SPDF/config/SpringDocConfig.java | 52 +++++++++++++++++++ .../api/misc/ScannerEffectController.java | 2 +- .../api/security/CertSignController.java | 5 +- .../api/security/RedactController.java | 4 +- .../controller/web/OtherWebController.java | 2 +- .../api/ServerCertificateController.java | 2 +- 7 files changed, 61 insertions(+), 10 deletions(-) create mode 100644 app/core/src/main/java/stirling/software/SPDF/config/SpringDocConfig.java diff --git a/app/core/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java b/app/core/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java index c0a0b6b55..fdfe2b9ef 100644 --- a/app/core/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java +++ b/app/core/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java @@ -42,8 +42,7 @@ public class OpenApiConfig { new License() .name("MIT") .url( - "https://raw.githubusercontent.com/Stirling-Tools/Stirling-PDF/refs/heads/main/LICENSE") - .identifier("MIT")) + "https://raw.githubusercontent.com/Stirling-Tools/Stirling-PDF/refs/heads/main/LICENSE")) .termsOfService("https://www.stirlingpdf.com/terms") .contact( new Contact() @@ -73,4 +72,5 @@ public class OpenApiConfig { .addSecurityItem(new SecurityRequirement().addList("apiKey")); } } + } diff --git a/app/core/src/main/java/stirling/software/SPDF/config/SpringDocConfig.java b/app/core/src/main/java/stirling/software/SPDF/config/SpringDocConfig.java new file mode 100644 index 000000000..891e50bdc --- /dev/null +++ b/app/core/src/main/java/stirling/software/SPDF/config/SpringDocConfig.java @@ -0,0 +1,52 @@ +package stirling.software.SPDF.config; + +import org.springdoc.core.models.GroupedOpenApi; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SpringDocConfig { + + @Bean + public GroupedOpenApi pdfProcessingApi() { + return GroupedOpenApi.builder() + .group("pdf-processing") + .displayName("PDF Processing API") + .pathsToMatch("/api/v1/**") + .pathsToExclude("/api/v1/admin/**", "/api/v1/user/**", "/api/v1/settings/**", "/api/v1/ui-data/**", "/api/v1/info/**", "/api/v1/general/job/**", "/api/v1/general/files/**") + .addOpenApiCustomizer(openApi -> { + openApi.info(openApi.getInfo() + .title("Stirling PDF - Processing API") + .description("API documentation for PDF processing operations including conversion, manipulation, security, and utility functions.")); + }) + .build(); + } + + @Bean + public GroupedOpenApi adminApi() { + return GroupedOpenApi.builder() + .group("admin") + .displayName("Admin & Management API") + .pathsToMatch("/api/v1/admin/**", "/api/v1/user/**", "/api/v1/settings/**") + .addOpenApiCustomizer(openApi -> { + openApi.info(openApi.getInfo() + .title("Stirling PDF - Admin API") + .description("API documentation for administrative functions, user management, settings, and system configuration.")); + }) + .build(); + } + + @Bean + public GroupedOpenApi systemApi() { + return GroupedOpenApi.builder() + .group("system") + .displayName("System & UI API") + .pathsToMatch("/api/v1/ui-data/**", "/api/v1/info/**", "/api/v1/general/job/**", "/api/v1/general/files/**") + .addOpenApiCustomizer(openApi -> { + openApi.info(openApi.getInfo() + .title("Stirling PDF - System API") + .description("API documentation for system information, UI data, and general utility endpoints.")); + }) + .build(); + } +} \ No newline at end of file diff --git a/app/core/src/main/java/stirling/software/SPDF/controller/api/misc/ScannerEffectController.java b/app/core/src/main/java/stirling/software/SPDF/controller/api/misc/ScannerEffectController.java index f7fe0e837..6d11355ad 100644 --- a/app/core/src/main/java/stirling/software/SPDF/controller/api/misc/ScannerEffectController.java +++ b/app/core/src/main/java/stirling/software/SPDF/controller/api/misc/ScannerEffectController.java @@ -39,7 +39,7 @@ import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") -@Tag(name = "Misc", description = "Miscellaneous PDF APIs") +@Tag(name = "Misc", description = "Miscellaneous APIs") @RequiredArgsConstructor @Slf4j public class ScannerEffectController { diff --git a/app/core/src/main/java/stirling/software/SPDF/controller/api/security/CertSignController.java b/app/core/src/main/java/stirling/software/SPDF/controller/api/security/CertSignController.java index 8a73e872f..c5ba97e3e 100644 --- a/app/core/src/main/java/stirling/software/SPDF/controller/api/security/CertSignController.java +++ b/app/core/src/main/java/stirling/software/SPDF/controller/api/security/CertSignController.java @@ -141,10 +141,7 @@ public class CertSignController { } @AutoJobPostMapping( - consumes = { - MediaType.MULTIPART_FORM_DATA_VALUE, - MediaType.APPLICATION_FORM_URLENCODED_VALUE - }, + consumes = MediaType.MULTIPART_FORM_DATA_VALUE, value = "/cert-sign") @Operation( summary = "Sign PDF with a Digital Certificate", diff --git a/app/core/src/main/java/stirling/software/SPDF/controller/api/security/RedactController.java b/app/core/src/main/java/stirling/software/SPDF/controller/api/security/RedactController.java index d73381f19..f6c557482 100644 --- a/app/core/src/main/java/stirling/software/SPDF/controller/api/security/RedactController.java +++ b/app/core/src/main/java/stirling/software/SPDF/controller/api/security/RedactController.java @@ -58,12 +58,13 @@ public class RedactController { @AutoJobPostMapping(value = "/redact", consumes = "multipart/form-data") @Operation( + operationId = "redactPdfManual", summary = "Redacts areas and pages in a PDF document", description = "This operation takes an input PDF file with a list of areas, page" + " number(s)/range(s)/function(s) to redact. Input:PDF, Output:PDF," + " Type:SISO") - public ResponseEntity redactPDF(@ModelAttribute ManualRedactPdfRequest request) + public ResponseEntity redactPdfManual(@ModelAttribute ManualRedactPdfRequest request) throws IOException { MultipartFile file = request.getFileInput(); List redactionAreas = request.getRedactions(); @@ -192,6 +193,7 @@ public class RedactController { @AutoJobPostMapping(value = "/auto-redact", consumes = "multipart/form-data") @Operation( + operationId = "redactPdfAuto", summary = "Redacts listOfText in a PDF document", description = "This operation takes an input PDF file and redacts the provided listOfText." diff --git a/app/core/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java b/app/core/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java index 6ef6fc773..bac706888 100644 --- a/app/core/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java +++ b/app/core/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java @@ -17,7 +17,7 @@ import stirling.software.common.model.ApplicationProperties; import stirling.software.common.util.CheckProgramInstall; // @Controller // Disabled - Backend-only mode, no Thymeleaf UI -@Tag(name = "Misc", description = "Miscellaneous APIs") +// @Tag(name = "Misc", description = "Miscellaneous APIs") // Disabled - not a controller @RequiredArgsConstructor public class OtherWebController { diff --git a/app/proprietary/src/main/java/stirling/software/proprietary/security/controller/api/ServerCertificateController.java b/app/proprietary/src/main/java/stirling/software/proprietary/security/controller/api/ServerCertificateController.java index e85d127a6..155d6c3bb 100644 --- a/app/proprietary/src/main/java/stirling/software/proprietary/security/controller/api/ServerCertificateController.java +++ b/app/proprietary/src/main/java/stirling/software/proprietary/security/controller/api/ServerCertificateController.java @@ -44,7 +44,7 @@ public class ServerCertificateController { } } - @PostMapping("/upload") + @PostMapping(value = "/upload", consumes = "multipart/form-data") @Operation( summary = "Upload server certificate", description =