diff --git a/app/core/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java b/app/core/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java index 44f2b892a..070d681e4 100644 --- a/app/core/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java +++ b/app/core/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java @@ -108,9 +108,13 @@ public class PipelineProcessor { if (inputFileTypes == null) { inputFileTypes = new ArrayList(Arrays.asList("ALL")); } - if (!operation.matches("^[a-zA-Z0-9_-]+$")) { - throw new IllegalArgumentException("Invalid operation value received."); + + if (!apiDocService.isValidOperation(operation, parameters)) { + log.error("Invalid operation or parameters: o:{} p:{}", operation, parameters); + throw new IllegalArgumentException( + "Invalid operation: " + operation + " with parameters: " + parameters); } + String url = getBaseUrl() + operation; List newOutputFiles = new ArrayList<>(); if (!isMultiInputOperation) { @@ -136,7 +140,7 @@ public class PipelineProcessor { // skip // this // file - if (operation.startsWith("filter-") + if (operation.startsWith("/api/v1/filter/filter-") && (response.getBody() == null || response.getBody().length == 0)) { filtersApplied = true; diff --git a/app/core/src/test/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessorTest.java b/app/core/src/test/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessorTest.java index 60e3f975d..0a40fcd5b 100644 --- a/app/core/src/test/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessorTest.java +++ b/app/core/src/test/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessorTest.java @@ -45,23 +45,26 @@ class PipelineProcessorTest { @Test void runPipelineWithFilterSetsFlag() throws Exception { PipelineOperation op = new PipelineOperation(); - op.setOperation("filter-page-count"); + op.setOperation("/api/v1/filter/filter-page-count"); op.setParameters(Map.of()); PipelineConfig config = new PipelineConfig(); config.setOperations(List.of(op)); - Resource file = new ByteArrayResource("data".getBytes()) { - @Override - public String getFilename() { - return "test.pdf"; - } - }; + Resource file = + new ByteArrayResource("data".getBytes()) { + @Override + public String getFilename() { + return "test.pdf"; + } + }; List files = List.of(file); - when(apiDocService.isMultiInput("filter-page-count")).thenReturn(false); - when(apiDocService.getExtensionTypes(false, "filter-page-count")) + when(apiDocService.isMultiInput("/api/v1/filter/filter-page-count")).thenReturn(false); + when(apiDocService.getExtensionTypes(false, "/api/v1/filter/filter-page-count")) .thenReturn(List.of("pdf")); + when(apiDocService.isValidOperation(eq("/api/v1/filter/filter-page-count"), anyMap())) + .thenReturn(true); doReturn(new ResponseEntity<>(new byte[0], HttpStatus.OK)) .when(pipelineProcessor)