Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions src/main/java/com/checkmarx/ast/tenant/TenantSetting.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.checkmarx.ast.tenant;

import com.checkmarx.ast.wrapper.CxBaseObject;
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 lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.Value;

import java.util.List;

@Value
@EqualsAndHashCode()
@JsonDeserialize()
@ToString(callSuper = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class TenantSetting {

String key;
String value;

@JsonCreator
public TenantSetting(@JsonProperty("key") String key, @JsonProperty("value") String value) {
this.key = key;
this.value = value;
}

public static <T> List<T> listFromLine(String line) {
return CxBaseObject.parse(line,
TypeFactory.defaultInstance()
.constructCollectionType(List.class, TenantSetting.class));
}
}
4 changes: 2 additions & 2 deletions src/main/java/com/checkmarx/ast/wrapper/CxBaseObject.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ protected CxBaseObject(@JsonProperty("ID") String id,
this.tags = tags;
}

protected static <T> T parse(String line, JavaType type) {
public static <T> T parse(String line, JavaType type) {
T result = null;
if (!StringUtils.isBlank(line) && isValidJSON(line)) {
try {
Expand All @@ -47,7 +47,7 @@ protected static <T> T parse(String line, JavaType type) {
return result;
}

private static boolean isValidJSON(final String json) {
public static boolean isValidJSON(final String json) {
try {
final ObjectMapper mapper = new ObjectMapper();
mapper.readTree(json);
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/checkmarx/ast/wrapper/CxConstants.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,6 @@ public final class CxConstants {
static final String KICS_REMEDIATION_KICS_FILE = "--kics-files";
static final String KICS_REMEDIATION_SIMILARITY = "--similarity-ids";
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";
}
72 changes: 46 additions & 26 deletions src/main/java/com/checkmarx/ast/wrapper/CxWrapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.checkmarx.ast.results.ResultsSummary;
import com.checkmarx.ast.results.result.Node;
import com.checkmarx.ast.scan.Scan;
import com.checkmarx.ast.tenant.TenantSetting;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.CollectionType;
import com.fasterxml.jackson.databind.type.TypeFactory;
Expand Down Expand Up @@ -38,13 +39,11 @@ public class CxWrapper {
@NonNull
private final String executable;

public CxWrapper(CxConfig cxConfig)
throws CxConfig.InvalidCLIConfigException, IOException {
public CxWrapper(CxConfig cxConfig) throws IOException {
this(cxConfig, LoggerFactory.getLogger(CxWrapper.class));
}

public CxWrapper(@NonNull CxConfig cxConfig, @NonNull Logger logger) throws CxConfig.InvalidCLIConfigException,
IOException {
public CxWrapper(@NonNull CxConfig cxConfig, @NonNull Logger logger) throws IOException {
this.cxConfig = cxConfig;
this.logger = logger;
this.executable = StringUtils.isBlank(this.cxConfig.getPathToExecutable())
Expand Down Expand Up @@ -281,24 +280,9 @@ public String results(@NonNull UUID scanId, ReportFormat reportFormat)
fileName + reportFormat.getExtension());
}

public List<String> buildResultsArguments(@NonNull UUID scanId, ReportFormat reportFormat) {
return withConfigArguments(buildResultsArgumentsArray(scanId, reportFormat));
}

private List<String> buildResultsArgumentsArray(UUID scanId, ReportFormat reportFormat) {
List<String> arguments = new ArrayList<>();
arguments.add(CxConstants.CMD_RESULT);
arguments.add(CxConstants.SUB_CMD_SHOW);
arguments.add(CxConstants.SCAN_ID);
arguments.add(scanId.toString());
arguments.add(CxConstants.REPORT_FORMAT);
arguments.add(reportFormat.toString());

return arguments;
}

public String scaRemediation(String packageFiles, String packages, String packageVersion) throws CxException, IOException, InterruptedException {
List<String> arguments = new ArrayList<>();

arguments.add(CxConstants.CMD_UTILS);
arguments.add(CxConstants.CMD_REMEDIATION);
arguments.add(CxConstants.SUB_CMD_REMEDIATION_SCA);
Expand Down Expand Up @@ -347,8 +331,8 @@ public KicsRealtimeResults kicsRealtimeScan(@NonNull String fileSources, String
arguments.add(CxConstants.ENGINE);
arguments.add(engine);
}
KicsRealtimeResults kicsResults = Execution.executeCommand(withConfigArguments(arguments), logger, KicsRealtimeResults::fromLine);
return kicsResults;

return Execution.executeCommand(withConfigArguments(arguments), logger, KicsRealtimeResults::fromLine);
}

public KicsRemediation kicsRemediate(@NonNull String resultsFile, String kicsFile, String engine,String similarityIds)
Expand All @@ -373,8 +357,8 @@ public KicsRemediation kicsRemediate(@NonNull String resultsFile, String kicsFil
arguments.add(CxConstants.KICS_REMEDIATION_SIMILARITY);
arguments.add(similarityIds);
}
KicsRemediation remediation = Execution.executeCommand(arguments, logger, KicsRemediation::fromLine);
return remediation;

return Execution.executeCommand(arguments, logger, KicsRemediation::fromLine);
}

public List<LearnMore> learnMore(String queryId) throws CxException, IOException, InterruptedException {
Expand All @@ -387,8 +371,28 @@ public List<LearnMore> learnMore(String queryId) throws CxException, IOException
arguments.add(CxConstants.FORMAT);
arguments.add(CxConstants.FORMAT_JSON);

List<LearnMore> learnMore = Execution.executeCommand(withConfigArguments(arguments), logger, LearnMore::listFromLine);
return learnMore;
return Execution.executeCommand(withConfigArguments(arguments), logger, LearnMore::listFromLine);
}

public boolean ideScansEnabled() throws CxException, IOException, InterruptedException {
List<TenantSetting> tenantSettings = tenantSettings();
if (tenantSettings == null) {
throw new CxException(1, "Unable to parse tenant settings");
}
return tenantSettings.stream()
.filter(t -> t.getKey().equals(CxConstants.IDE_SCANS_KEY))
.findFirst()
.map(t -> Boolean.parseBoolean(t.getValue()))
.orElse(false);
}

public List<TenantSetting> tenantSettings() throws CxException, IOException, InterruptedException {
List<String> arguments = jsonArguments();

arguments.add(CxConstants.CMD_UTILS);
arguments.add(CxConstants.SUB_CMD_TENANT);

return Execution.executeCommand(withConfigArguments(arguments), logger, TenantSetting::listFromLine);
}

private int getIndexOfBfLNode(List<Node> bflNodes, List<Node> resultNodes) {
Expand All @@ -404,6 +408,22 @@ private int getIndexOfBfLNode(List<Node> bflNodes, List<Node> resultNodes) {
return bflNodeNotFound;
}

public List<String> buildResultsArguments(@NonNull UUID scanId, ReportFormat reportFormat) {
return withConfigArguments(buildResultsArgumentsArray(scanId, reportFormat));
}

private List<String> buildResultsArgumentsArray(UUID scanId, ReportFormat reportFormat) {
List<String> arguments = new ArrayList<>();
arguments.add(CxConstants.CMD_RESULT);
arguments.add(CxConstants.SUB_CMD_SHOW);
arguments.add(CxConstants.SCAN_ID);
arguments.add(scanId.toString());
arguments.add(CxConstants.REPORT_FORMAT);
arguments.add(reportFormat.toString());

return arguments;
}

private List<String> withConfigArguments(List<String> commands) {
List<String> arguments = new ArrayList<>();

Expand Down
21 changes: 21 additions & 0 deletions src/test/java/com/checkmarx/ast/TenantTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.checkmarx.ast;

import com.checkmarx.ast.tenant.TenantSetting;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.util.List;

public class TenantTest extends BaseTest {

@Test
void testTenantSettings() throws Exception {
List<TenantSetting> tenantSettings = wrapper.tenantSettings();
Assertions.assertTrue(tenantSettings.size() > 0);
}

@Test
void testIdeScansEnabled() {
Assertions.assertDoesNotThrow(() -> wrapper.ideScansEnabled());
}
}