diff --git a/fcli-core/fcli-sc-dast/src/main/java/com/fortify/cli/sc_dast/scan/cli/cmd/action/AbstractSCDastScanActionCommand.java b/fcli-core/fcli-sc-dast/src/main/java/com/fortify/cli/sc_dast/scan/cli/cmd/action/AbstractSCDastScanActionCommand.java index fab8e1a358..02938c792d 100644 --- a/fcli-core/fcli-sc-dast/src/main/java/com/fortify/cli/sc_dast/scan/cli/cmd/action/AbstractSCDastScanActionCommand.java +++ b/fcli-core/fcli-sc-dast/src/main/java/com/fortify/cli/sc_dast/scan/cli/cmd/action/AbstractSCDastScanActionCommand.java @@ -12,6 +12,9 @@ */ package com.fortify.cli.sc_dast.scan.cli.cmd.action; +import java.util.Collections; +import java.util.Map; + import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; @@ -43,12 +46,21 @@ public final JsonNode getJsonNode() { SCDastScanDescriptor descriptor = scanResolver.getScanDescriptor(unirest); ObjectNode body = new ObjectMapper().createObjectNode() .put("scanActionType", getAction().name()); - unirest.post("/api/v2/scans/{id}/scan-action") - .routeParam("id", descriptor.getId()) - .body(body) + var request = unirest.post("/api/v2/scans/{id}/scan-action") + .routeParam("id", descriptor.getId()); + getQueryParameters().forEach(request::queryString); + request.body(body) .asString().getBody(); // TODO Does SC DAST return proper HTTP codes if there are any errors, or should we parse the response? return descriptor.asJsonNode(); } + + /** + * Subclasses can override this method to provide additional query parameters + * for the scan-action request. + */ + protected Map getQueryParameters() { + return Collections.emptyMap(); + } @Override public final String getActionCommandResult() { diff --git a/fcli-core/fcli-sc-dast/src/main/java/com/fortify/cli/sc_dast/scan/cli/cmd/action/SCDastScanDeleteCommand.java b/fcli-core/fcli-sc-dast/src/main/java/com/fortify/cli/sc_dast/scan/cli/cmd/action/SCDastScanDeleteCommand.java index 263b20e2fb..19ffdeb271 100644 --- a/fcli-core/fcli-sc-dast/src/main/java/com/fortify/cli/sc_dast/scan/cli/cmd/action/SCDastScanDeleteCommand.java +++ b/fcli-core/fcli-sc-dast/src/main/java/com/fortify/cli/sc_dast/scan/cli/cmd/action/SCDastScanDeleteCommand.java @@ -12,18 +12,32 @@ */ package com.fortify.cli.sc_dast.scan.cli.cmd.action; +import java.util.Collections; +import java.util.Map; + import com.fortify.cli.common.output.cli.mixin.OutputHelperMixins; import lombok.Getter; import picocli.CommandLine.Command; import picocli.CommandLine.Mixin; +import picocli.CommandLine.Option; @Command(name = OutputHelperMixins.Delete.CMD_NAME) public class SCDastScanDeleteCommand extends AbstractSCDastScanActionCommand { -@Getter @Mixin private OutputHelperMixins.Delete outputHelper; - + @Getter @Mixin private OutputHelperMixins.Delete outputHelper; + @Option(names = {"--force-delete", "-f"}, description = "Force deletion of the scan by adding forceDelete=true query parameter") + private boolean forceDelete; + @Override protected SCDastScanAction getAction() { return SCDastScanAction.DeleteScan; } + + @Override + protected Map getQueryParameters() { + if (forceDelete) { + return Map.of("forceDelete", "true"); + } + return Collections.emptyMap(); + } }