diff --git a/src/main/java/com/checkmarx/ast/engine/Engine.java b/src/main/java/com/checkmarx/ast/engine/Engine.java new file mode 100644 index 00000000..7a65b84f --- /dev/null +++ b/src/main/java/com/checkmarx/ast/engine/Engine.java @@ -0,0 +1,45 @@ +package com.checkmarx.ast.engine; + +import com.checkmarx.ast.scan.Scan; +import com.checkmarx.ast.utils.JsonParser; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.type.TypeFactory; + +import java.util.List; + +@JsonDeserialize() +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +public class Engine { + + String engineId; + String engineName; + String apiURL; + String apiName; + String description; + + @JsonCreator + public Engine(@JsonProperty("EngineID") String engineId, @JsonProperty("EngineName") String engineName, + @JsonProperty("ApiURL") String apiURL, @JsonProperty("ApiName") String apiName, @JsonProperty("Description") String description){ + this.engineId=engineId; + this.engineName=engineName; + this.apiURL=apiURL; + this.apiName=apiName; + this.description=description; + } + + + public static T fromLine(String line) { + return JsonParser.parse(line, TypeFactory.defaultInstance().constructType(Engine.class)); + } + + public static List listFromLine(String line) { + return JsonParser.parse(line, TypeFactory.defaultInstance().constructCollectionType(List.class, Engine.class)); + } + + +} diff --git a/src/main/java/com/checkmarx/ast/wrapper/CxConstants.java b/src/main/java/com/checkmarx/ast/wrapper/CxConstants.java index 889bbb65..ce81c6ed 100644 --- a/src/main/java/com/checkmarx/ast/wrapper/CxConstants.java +++ b/src/main/java/com/checkmarx/ast/wrapper/CxConstants.java @@ -24,9 +24,12 @@ public final class CxConstants { static final String CMD_PROJECT = "project"; static final String SUB_CMD_BRANCHES = "branches"; static final String CMD_SCAN = "scan"; + static final String ENGINE_CMD="engine"; static final String SUB_CMD_SHOW = "show"; + static final String ENGINE_NAME="--engine-name"; static final String RESULTS_BFL_SUB_CMD = "bfl"; static final String SUB_CMD_LIST = "list"; + static final String SUB_CMD_ENGINE_LIST="list-api"; static final String SUB_CMD_ASCA = "asca"; static final String SUB_CMD_CREATE = "create"; static final String SUB_CMD_CANCEL = "cancel"; @@ -36,6 +39,7 @@ public final class CxConstants { static final String ALL_STATES_FLAG = "--all"; static final String CMD_RESULT = "results"; static final String FORMAT = "--format"; + static final String OUTPUT_FORMAT="--output-format"; static final String SCAN_INFO_FORMAT = "--scan-info-format"; static final String FORMAT_JSON = "json"; static final String FILTER = "--filter"; diff --git a/src/main/java/com/checkmarx/ast/wrapper/CxWrapper.java b/src/main/java/com/checkmarx/ast/wrapper/CxWrapper.java index 38640d81..955c69ee 100644 --- a/src/main/java/com/checkmarx/ast/wrapper/CxWrapper.java +++ b/src/main/java/com/checkmarx/ast/wrapper/CxWrapper.java @@ -2,6 +2,7 @@ import com.checkmarx.ast.asca.ScanResult; import com.checkmarx.ast.codebashing.CodeBashing; +import com.checkmarx.ast.engine.Engine; import com.checkmarx.ast.kicsRealtimeResults.KicsRealtimeResults; import com.checkmarx.ast.learnMore.LearnMore; import com.checkmarx.ast.predicate.CustomState; @@ -26,10 +27,7 @@ import java.io.IOException; import java.lang.reflect.Field; import java.nio.file.Files; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; public class CxWrapper { @@ -95,6 +93,23 @@ public List scanList(String filter) throws IOException, InterruptedExcepti return Execution.executeCommand(withConfigArguments(arguments), logger, Scan::listFromLine); } + + public List engineList( String engineName, String outputFormat) throws IOException, InterruptedException, CxException { + this.logger.info("Fetching the engine list"); + + List arguments = new ArrayList<>(); + arguments.add(CxConstants.ENGINE_CMD); + arguments.add(CxConstants.SUB_CMD_ENGINE_LIST); + if(engineName!=null){ + arguments.add(CxConstants.ENGINE_NAME); + arguments.add(engineName); + } + arguments.addAll(jsonArugumentsOutput()); + + return Execution.executeCommand(withConfigArguments(arguments), logger, Engine::listFromLine); + } + + public Scan scanCreate(@NonNull Map params) throws IOException, InterruptedException, CxException { return scanCreate(params, ""); } @@ -293,6 +308,7 @@ public List codeBashingList(@NonNull String cweId, @NonNull String List arguments = new ArrayList<>(); arguments.add(CxConstants.CMD_RESULT); + arguments.add(CxConstants.CMD_RESULT); arguments.add(CxConstants.SUB_CMD_CODE_BASHING); arguments.add(CxConstants.LANGUAGE); arguments.add(language); @@ -512,6 +528,15 @@ private List jsonArguments() { return arguments; } + private ListjsonArugumentsOutput(){ + List arguments= new ArrayList<>(); + arguments.add(CxConstants.OUTPUT_FORMAT); + arguments.add(CxConstants.FORMAT_JSON); + return arguments; + } + + + private List filterArguments(String filter) { List arguments = new ArrayList<>(); diff --git a/src/test/java/com/checkmarx/ast/EngineTest.java b/src/test/java/com/checkmarx/ast/EngineTest.java new file mode 100644 index 00000000..daf91688 --- /dev/null +++ b/src/test/java/com/checkmarx/ast/EngineTest.java @@ -0,0 +1,22 @@ +package com.checkmarx.ast; + +import com.checkmarx.ast.engine.Engine; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.List; + +public class EngineTest extends BaseTest{ + + @Test + void testEngineList() throws Exception{ + ListengineList= wrapper.engineList(null,null); + Assertions.assertTrue(engineList.size()<=10); + } + + @Test + void testSASTList() throws Exception{ + ListsastEngineList= wrapper.engineList("SAST",null); + Assertions.assertTrue(sastEngineList.size()<=10); + } +}