Skip to content

Commit 747ae3f

Browse files
authored
Merge pull request #173 from CheckmarxDev/AST-14561-ide-scans-enabled
Add methods to get tenant settings and check if IDE scans enabled
2 parents f98461d + 81fdf95 commit 747ae3f

File tree

5 files changed

+109
-28
lines changed

5 files changed

+109
-28
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.checkmarx.ast.tenant;
2+
3+
import com.checkmarx.ast.wrapper.CxBaseObject;
4+
import com.fasterxml.jackson.annotation.JsonCreator;
5+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
6+
import com.fasterxml.jackson.annotation.JsonInclude;
7+
import com.fasterxml.jackson.annotation.JsonProperty;
8+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
9+
import com.fasterxml.jackson.databind.type.TypeFactory;
10+
import lombok.EqualsAndHashCode;
11+
import lombok.ToString;
12+
import lombok.Value;
13+
14+
import java.util.List;
15+
16+
@Value
17+
@EqualsAndHashCode()
18+
@JsonDeserialize()
19+
@ToString(callSuper = true)
20+
@JsonInclude(JsonInclude.Include.NON_NULL)
21+
@JsonIgnoreProperties(ignoreUnknown = true)
22+
public class TenantSetting {
23+
24+
String key;
25+
String value;
26+
27+
@JsonCreator
28+
public TenantSetting(@JsonProperty("key") String key, @JsonProperty("value") String value) {
29+
this.key = key;
30+
this.value = value;
31+
}
32+
33+
public static <T> List<T> listFromLine(String line) {
34+
return CxBaseObject.parse(line,
35+
TypeFactory.defaultInstance()
36+
.constructCollectionType(List.class, TenantSetting.class));
37+
}
38+
}

src/main/java/com/checkmarx/ast/wrapper/CxBaseObject.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ protected CxBaseObject(@JsonProperty("ID") String id,
3535
this.tags = tags;
3636
}
3737

38-
protected static <T> T parse(String line, JavaType type) {
38+
public static <T> T parse(String line, JavaType type) {
3939
T result = null;
4040
if (!StringUtils.isBlank(line) && isValidJSON(line)) {
4141
try {
@@ -47,7 +47,7 @@ protected static <T> T parse(String line, JavaType type) {
4747
return result;
4848
}
4949

50-
private static boolean isValidJSON(final String json) {
50+
public static boolean isValidJSON(final String json) {
5151
try {
5252
final ObjectMapper mapper = new ObjectMapper();
5353
mapper.readTree(json);

src/main/java/com/checkmarx/ast/wrapper/CxConstants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,6 @@ public final class CxConstants {
6565
static final String KICS_REMEDIATION_KICS_FILE = "--kics-files";
6666
static final String KICS_REMEDIATION_SIMILARITY = "--similarity-ids";
6767
static final String SUB_CMD_LEARN_MORE = "learn-more";
68+
static final String SUB_CMD_TENANT = "tenant";
69+
static final String IDE_SCANS_KEY = "scan.config.plugins.ideScans";
6870
}

src/main/java/com/checkmarx/ast/wrapper/CxWrapper.java

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.checkmarx.ast.results.ResultsSummary;
1212
import com.checkmarx.ast.results.result.Node;
1313
import com.checkmarx.ast.scan.Scan;
14+
import com.checkmarx.ast.tenant.TenantSetting;
1415
import com.fasterxml.jackson.databind.ObjectMapper;
1516
import com.fasterxml.jackson.databind.type.CollectionType;
1617
import com.fasterxml.jackson.databind.type.TypeFactory;
@@ -38,13 +39,11 @@ public class CxWrapper {
3839
@NonNull
3940
private final String executable;
4041

41-
public CxWrapper(CxConfig cxConfig)
42-
throws CxConfig.InvalidCLIConfigException, IOException {
42+
public CxWrapper(CxConfig cxConfig) throws IOException {
4343
this(cxConfig, LoggerFactory.getLogger(CxWrapper.class));
4444
}
4545

46-
public CxWrapper(@NonNull CxConfig cxConfig, @NonNull Logger logger) throws CxConfig.InvalidCLIConfigException,
47-
IOException {
46+
public CxWrapper(@NonNull CxConfig cxConfig, @NonNull Logger logger) throws IOException {
4847
this.cxConfig = cxConfig;
4948
this.logger = logger;
5049
this.executable = StringUtils.isBlank(this.cxConfig.getPathToExecutable())
@@ -281,24 +280,9 @@ public String results(@NonNull UUID scanId, ReportFormat reportFormat)
281280
fileName + reportFormat.getExtension());
282281
}
283282

284-
public List<String> buildResultsArguments(@NonNull UUID scanId, ReportFormat reportFormat) {
285-
return withConfigArguments(buildResultsArgumentsArray(scanId, reportFormat));
286-
}
287-
288-
private List<String> buildResultsArgumentsArray(UUID scanId, ReportFormat reportFormat) {
289-
List<String> arguments = new ArrayList<>();
290-
arguments.add(CxConstants.CMD_RESULT);
291-
arguments.add(CxConstants.SUB_CMD_SHOW);
292-
arguments.add(CxConstants.SCAN_ID);
293-
arguments.add(scanId.toString());
294-
arguments.add(CxConstants.REPORT_FORMAT);
295-
arguments.add(reportFormat.toString());
296-
297-
return arguments;
298-
}
299-
300283
public String scaRemediation(String packageFiles, String packages, String packageVersion) throws CxException, IOException, InterruptedException {
301284
List<String> arguments = new ArrayList<>();
285+
302286
arguments.add(CxConstants.CMD_UTILS);
303287
arguments.add(CxConstants.CMD_REMEDIATION);
304288
arguments.add(CxConstants.SUB_CMD_REMEDIATION_SCA);
@@ -347,8 +331,8 @@ public KicsRealtimeResults kicsRealtimeScan(@NonNull String fileSources, String
347331
arguments.add(CxConstants.ENGINE);
348332
arguments.add(engine);
349333
}
350-
KicsRealtimeResults kicsResults = Execution.executeCommand(withConfigArguments(arguments), logger, KicsRealtimeResults::fromLine);
351-
return kicsResults;
334+
335+
return Execution.executeCommand(withConfigArguments(arguments), logger, KicsRealtimeResults::fromLine);
352336
}
353337

354338
public KicsRemediation kicsRemediate(@NonNull String resultsFile, String kicsFile, String engine,String similarityIds)
@@ -373,8 +357,8 @@ public KicsRemediation kicsRemediate(@NonNull String resultsFile, String kicsFil
373357
arguments.add(CxConstants.KICS_REMEDIATION_SIMILARITY);
374358
arguments.add(similarityIds);
375359
}
376-
KicsRemediation remediation = Execution.executeCommand(arguments, logger, KicsRemediation::fromLine);
377-
return remediation;
360+
361+
return Execution.executeCommand(arguments, logger, KicsRemediation::fromLine);
378362
}
379363

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

390-
List<LearnMore> learnMore = Execution.executeCommand(withConfigArguments(arguments), logger, LearnMore::listFromLine);
391-
return learnMore;
374+
return Execution.executeCommand(withConfigArguments(arguments), logger, LearnMore::listFromLine);
375+
}
376+
377+
public boolean ideScansEnabled() throws CxException, IOException, InterruptedException {
378+
List<TenantSetting> tenantSettings = tenantSettings();
379+
if (tenantSettings == null) {
380+
throw new CxException(1, "Unable to parse tenant settings");
381+
}
382+
return tenantSettings.stream()
383+
.filter(t -> t.getKey().equals(CxConstants.IDE_SCANS_KEY))
384+
.findFirst()
385+
.map(t -> Boolean.parseBoolean(t.getValue()))
386+
.orElse(false);
387+
}
388+
389+
public List<TenantSetting> tenantSettings() throws CxException, IOException, InterruptedException {
390+
List<String> arguments = jsonArguments();
391+
392+
arguments.add(CxConstants.CMD_UTILS);
393+
arguments.add(CxConstants.SUB_CMD_TENANT);
394+
395+
return Execution.executeCommand(withConfigArguments(arguments), logger, TenantSetting::listFromLine);
392396
}
393397

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

411+
public List<String> buildResultsArguments(@NonNull UUID scanId, ReportFormat reportFormat) {
412+
return withConfigArguments(buildResultsArgumentsArray(scanId, reportFormat));
413+
}
414+
415+
private List<String> buildResultsArgumentsArray(UUID scanId, ReportFormat reportFormat) {
416+
List<String> arguments = new ArrayList<>();
417+
arguments.add(CxConstants.CMD_RESULT);
418+
arguments.add(CxConstants.SUB_CMD_SHOW);
419+
arguments.add(CxConstants.SCAN_ID);
420+
arguments.add(scanId.toString());
421+
arguments.add(CxConstants.REPORT_FORMAT);
422+
arguments.add(reportFormat.toString());
423+
424+
return arguments;
425+
}
426+
407427
private List<String> withConfigArguments(List<String> commands) {
408428
List<String> arguments = new ArrayList<>();
409429

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.checkmarx.ast;
2+
3+
import com.checkmarx.ast.tenant.TenantSetting;
4+
import org.junit.jupiter.api.Assertions;
5+
import org.junit.jupiter.api.Test;
6+
7+
import java.util.List;
8+
9+
public class TenantTest extends BaseTest {
10+
11+
@Test
12+
void testTenantSettings() throws Exception {
13+
List<TenantSetting> tenantSettings = wrapper.tenantSettings();
14+
Assertions.assertTrue(tenantSettings.size() > 0);
15+
}
16+
17+
@Test
18+
void testIdeScansEnabled() {
19+
Assertions.assertDoesNotThrow(() -> wrapper.ideScansEnabled());
20+
}
21+
}

0 commit comments

Comments
 (0)