diff --git a/src/main/java/com/checkmarx/ast/engines/Api.java b/src/main/java/com/checkmarx/ast/engines/Api.java new file mode 100644 index 00000000..38514f54 --- /dev/null +++ b/src/main/java/com/checkmarx/ast/engines/Api.java @@ -0,0 +1,40 @@ +package com.checkmarx.ast.engines; + +import com.checkmarx.ast.utils.JsonParser; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.type.TypeFactory; + +import java.util.List; + +public class Api { + String apiName; + String description; + String apiUrl; + + public Api( + @JsonProperty("api_name") String apiName, + @JsonProperty("description") String description, + @JsonProperty("api_url") String apiUrl + ){ + this.apiName=apiName; + this.description=description; + this.apiUrl=apiUrl; + } + + public static T fromLine(String line) { + return JsonParser.parse(line, TypeFactory.defaultInstance().constructType(Api.class)); + } + + public static List listFromLine(String line) { + return JsonParser.parse(line, TypeFactory.defaultInstance().constructCollectionType(List.class, Api.class)); + } + + @Override + public String toString() { + return "Api{" + + "apiName='" + apiName + '\'' + + ", description='" + description + '\'' + + ", apiUrl='" + apiUrl + '\'' + + '}'; + } +} diff --git a/src/main/java/com/checkmarx/ast/engines/Engine.java b/src/main/java/com/checkmarx/ast/engines/Engine.java new file mode 100644 index 00000000..e6a01f9b --- /dev/null +++ b/src/main/java/com/checkmarx/ast/engines/Engine.java @@ -0,0 +1,41 @@ +package com.checkmarx.ast.engines; + +import com.checkmarx.ast.utils.JsonParser; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.type.TypeFactory; + +import java.util.Arrays; +import java.util.List; + +public class Engine { + String engineName; + String engineId; + Api[] apis; + + public Engine( + @JsonProperty("engine_name") String engineName, + @JsonProperty("engine_id") String engineId, + @JsonProperty("apis") Api[] apis + ){ + this.engineId=engineId; + this.engineName=engineName; + this.apis=apis; + } + + 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)); + } + + @Override + public String toString() { + return "Engine{" + + "engineName='" + engineName + '\'' + + ", engineId='" + engineId + '\'' + + ", apis=" + Arrays.toString(apis) + + '}'; + } +} diff --git a/src/main/java/com/checkmarx/ast/engines/Engines.java b/src/main/java/com/checkmarx/ast/engines/Engines.java new file mode 100644 index 00000000..39d7706c --- /dev/null +++ b/src/main/java/com/checkmarx/ast/engines/Engines.java @@ -0,0 +1,34 @@ +package com.checkmarx.ast.engines; + +import com.checkmarx.ast.utils.JsonParser; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.type.TypeFactory; +import lombok.Getter; + +import java.util.Arrays; +import java.util.List; + +@Getter +public class Engines { + Engine[] enginesList; + public Engines( + @JsonProperty("engines") Engine[] enginesList + ){ + this.enginesList =enginesList; + } + + public static T fromLine(String line) { + return JsonParser.parse(line, TypeFactory.defaultInstance().constructType(Engines.class)); + } + + public static List listFromLine(String line) { + return JsonParser.parse(line, TypeFactory.defaultInstance().constructCollectionType(List.class, Engines.class)); + } + + @Override + public String toString() { + return "Engines{" + + "enginesList=" + Arrays.toString(enginesList) + + '}'; + } +} diff --git a/src/main/java/com/checkmarx/ast/wrapper/CxConstants.java b/src/main/java/com/checkmarx/ast/wrapper/CxConstants.java index 889bbb65..d1ebece3 100644 --- a/src/main/java/com/checkmarx/ast/wrapper/CxConstants.java +++ b/src/main/java/com/checkmarx/ast/wrapper/CxConstants.java @@ -73,4 +73,8 @@ public final class CxConstants { static final String SUB_CMD_LEARN_MORE = "learn-more"; static final String SUB_CMD_TENANT = "tenant"; static final String IDE_SCANS_KEY = "scan.config.plugins.ideScans"; + static final String CMD_ENGINES = "engines"; + static final String SUB_CMD_LIST_API = "list-api"; + static final String OUTPUT_FORMAT = "--output-format"; + static final String ENGINE_NAME_FILTER = "--engine-name"; } diff --git a/src/main/java/com/checkmarx/ast/wrapper/CxWrapper.java b/src/main/java/com/checkmarx/ast/wrapper/CxWrapper.java index 38640d81..b99fb18e 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.engines.Engines; import com.checkmarx.ast.kicsRealtimeResults.KicsRealtimeResults; import com.checkmarx.ast.learnMore.LearnMore; import com.checkmarx.ast.predicate.CustomState; @@ -512,6 +513,15 @@ private List jsonArguments() { return arguments; } + private List jsonArguments2() { + 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<>(); @@ -522,4 +532,27 @@ private List filterArguments(String filter) { return arguments; } -} + + private List engineFilterArguments(String filter) { + List arguments = new ArrayList<>(); + + if (StringUtils.isNotBlank(filter)) { + arguments.add(CxConstants.ENGINE_NAME_FILTER); + arguments.add(filter); + } + + return arguments; + } + + public Engines listApi(String filter) throws IOException, InterruptedException, CxException { + this.logger.info("Fetching the api list using the filter: {}", filter); + + List arguments = new ArrayList<>(); + arguments.add(CxConstants.CMD_ENGINES); + arguments.add(CxConstants.SUB_CMD_LIST_API); + arguments.addAll(engineFilterArguments(filter)); + arguments.addAll(jsonArguments2()); + + return Execution.executeCommand(withConfigArguments(arguments), logger, Engines::fromLine); + } +} \ No newline at end of file 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..831e5796 --- /dev/null +++ b/src/test/java/com/checkmarx/ast/EngineTest.java @@ -0,0 +1,47 @@ +package com.checkmarx.ast; + +import com.checkmarx.ast.engines.Engines; +import com.checkmarx.ast.wrapper.CxException; +import lombok.NonNull; +import lombok.SneakyThrows; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class EngineTest extends BaseTest{ + + private static final Logger logger = LoggerFactory.getLogger(EngineTest.class); + @Test + void testApiList1() throws Exception { + Engines enginesList = wrapper.listApi(""); + logger.info(enginesList.toString()); + Assertions.assertTrue(enginesList.getEnginesList().length>0); + } + + @Test + void testApiList2() throws Exception { + Engines enginesList = wrapper.listApi("SAST"); + logger.info(enginesList.toString()); + Assertions.assertTrue(enginesList.getEnginesList().length>0); + } + + @Test + void testApiList3() throws Exception { + Engines enginesList = wrapper.listApi("SCA"); + logger.info(enginesList.toString()); + Assertions.assertTrue(enginesList.getEnginesList().length>0); + } + @Test + void testApiList4() throws Exception { + Engines enginesList = wrapper.listApi("Iac"); + logger.info(enginesList.toString()); + Assertions.assertTrue(enginesList.getEnginesList().length>0); + } + @SneakyThrows + @Test + void testApiList5() throws Exception { + Engines enginesList = wrapper.listApi("xyz"); +Assertions.assertEquals(null,enginesList); + } +}