Skip to content

Commit 994bec4

Browse files
oss-realtime scanner changes
1 parent bfaa9d3 commit 994bec4

File tree

5 files changed

+162
-8
lines changed

5 files changed

+162
-8
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.checkmarx.ast.ossrealtime;
2+
3+
import com.fasterxml.jackson.annotation.JsonCreator;
4+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
5+
import com.fasterxml.jackson.annotation.JsonInclude;
6+
import com.fasterxml.jackson.annotation.JsonProperty;
7+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
8+
import lombok.Value;
9+
10+
@Value
11+
@JsonDeserialize
12+
@JsonInclude(JsonInclude.Include.NON_NULL)
13+
@JsonIgnoreProperties(ignoreUnknown = true)
14+
public class OssRealtimeLocation {
15+
@JsonProperty("Line")
16+
int line;
17+
@JsonProperty("StartIndex")
18+
int startIndex;
19+
@JsonProperty("EndIndex")
20+
int endIndex;
21+
22+
@JsonCreator
23+
public OssRealtimeLocation(@JsonProperty("Line") int line,
24+
@JsonProperty("StartIndex") int startIndex,
25+
@JsonProperty("EndIndex") int endIndex) {
26+
this.line = line;
27+
this.startIndex = startIndex;
28+
this.endIndex = endIndex;
29+
}
30+
}
31+
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.checkmarx.ast.ossrealtime;
2+
3+
import com.fasterxml.jackson.annotation.JsonCreator;
4+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
5+
import com.fasterxml.jackson.annotation.JsonInclude;
6+
import com.fasterxml.jackson.annotation.JsonProperty;
7+
import com.fasterxml.jackson.databind.ObjectMapper;
8+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
9+
import lombok.Value;
10+
import org.apache.commons.lang3.StringUtils;
11+
12+
import java.io.IOException;
13+
import java.util.List;
14+
15+
@Value
16+
@JsonDeserialize
17+
@JsonInclude(JsonInclude.Include.NON_NULL)
18+
@JsonIgnoreProperties(ignoreUnknown = true)
19+
public class OssRealtimeResults {
20+
@JsonProperty("Packages")
21+
List<OssRealtimeScanPackage> packages;
22+
23+
@JsonCreator
24+
public OssRealtimeResults(@JsonProperty("Packages") List<OssRealtimeScanPackage> packages) {
25+
this.packages = packages;
26+
}
27+
28+
public static OssRealtimeResults fromLine(String line) {
29+
if (StringUtils.isBlank(line)) {
30+
return null;
31+
}
32+
try {
33+
if (isValidJSON(line) && line.contains("\"Packages\"")) {
34+
return new ObjectMapper().readValue(line, OssRealtimeResults.class);
35+
}
36+
} catch (IOException ignored) {
37+
}
38+
return null;
39+
}
40+
41+
private static boolean isValidJSON(String json) {
42+
try {
43+
new ObjectMapper().readTree(json);
44+
return true;
45+
} catch (IOException e) {
46+
return false;
47+
}
48+
}
49+
}
50+
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.checkmarx.ast.ossrealtime;
2+
3+
import com.fasterxml.jackson.annotation.JsonCreator;
4+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
5+
import com.fasterxml.jackson.annotation.JsonInclude;
6+
import com.fasterxml.jackson.annotation.JsonProperty;
7+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
8+
import lombok.Value;
9+
10+
import java.util.List;
11+
12+
@Value
13+
@JsonDeserialize
14+
@JsonInclude(JsonInclude.Include.NON_NULL)
15+
@JsonIgnoreProperties(ignoreUnknown = true)
16+
public class OssRealtimeScanPackage {
17+
@JsonProperty("PackageManager")
18+
String packageManager;
19+
@JsonProperty("PackageName")
20+
String packageName;
21+
@JsonProperty("PackageVersion")
22+
String packageVersion;
23+
@JsonProperty("FilePath")
24+
String filePath;
25+
@JsonProperty("Locations")
26+
List<OssRealtimeLocation> locations;
27+
@JsonProperty("Status")
28+
String status;
29+
@JsonProperty("Vulnerabilities")
30+
List<OssRealtimeVulnerability> vulnerabilities;
31+
32+
@JsonCreator
33+
public OssRealtimeScanPackage(@JsonProperty("PackageManager") String packageManager,
34+
@JsonProperty("PackageName") String packageName,
35+
@JsonProperty("PackageVersion") String packageVersion,
36+
@JsonProperty("FilePath") String filePath,
37+
@JsonProperty("Locations") List<OssRealtimeLocation> locations,
38+
@JsonProperty("Status") String status,
39+
@JsonProperty("Vulnerabilities") List<OssRealtimeVulnerability> vulnerabilities) {
40+
this.packageManager = packageManager;
41+
this.packageName = packageName;
42+
this.packageVersion = packageVersion;
43+
this.filePath = filePath;
44+
this.locations = locations;
45+
this.status = status;
46+
this.vulnerabilities = vulnerabilities;
47+
}
48+
}
49+

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,6 @@ public final class CxConstants {
6161
static final String ADDITONAL_PARAMS = "--additional-params";
6262
static final String ENGINE = "--engine";
6363
static final String SUB_CMD_KICS_REALTIME = "kics-realtime";
64-
static final String SUB_CMD_OSS_REALTIME = "oss-realtime";
65-
static final String IGNORED_FILE_PATH = "--ignored-file-path";
6664
static final String SCA_REMEDIATION_PACKAGE_FILES = "--package-files";
6765
static final String SCA_REMEDIATION_PACKAGE = "--package";
6866
static final String SCA_REMEDIATION_PACKAGE_VERSION = "--package-version";
@@ -77,4 +75,9 @@ public final class CxConstants {
7775
static final String SUB_CMD_TENANT = "tenant";
7876
static final String IDE_SCANS_KEY = "scan.config.plugins.ideScans";
7977
static final String AI_MCP_SERVER_KEY = "scan.config.plugins.aiMcpServer";
78+
static final String IGNORED_FILE_PATH = "--ignored-file-path";
79+
static final String SUB_CMD_OSS_REALTIME = "oss-realtime";
80+
static final String SUB_CMD_IAC_REALTIME = "iac-realtime";
81+
static final String SUB_CMD_SECRETS_REALTIME = "secrets-realtime";
82+
static final String SUB_CMD_CONTAINERS_REALTIME = "containers-realtime";
8083
}

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

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.checkmarx.ast.codebashing.CodeBashing;
55
import com.checkmarx.ast.kicsRealtimeResults.KicsRealtimeResults;
66
import com.checkmarx.ast.learnMore.LearnMore;
7+
import com.checkmarx.ast.ossrealtime.OssRealtimeResults;
78
import com.checkmarx.ast.predicate.CustomState;
89
import com.checkmarx.ast.predicate.Predicate;
910
import com.checkmarx.ast.project.Project;
@@ -404,26 +405,46 @@ public KicsRealtimeResults kicsRealtimeScan(@NonNull String fileSources, String
404405
return Execution.executeCommand(withConfigArguments(arguments), logger, KicsRealtimeResults::fromLine);
405406
}
406407

407-
public String ossRealtimeScan(@NonNull String sourcePath, String ignoredFilePath)
408+
public <T> T realtimeScan(@NonNull String subCommand, @NonNull String sourcePath, String ignoredFilePath, java.util.function.Function<String, T> resultParser)
408409
throws IOException, InterruptedException, CxException {
409-
this.logger.info("Executing 'scan oss-realtime' command using the CLI.");
410+
this.logger.info("Executing 'scan {}' command using the CLI.", subCommand);
410411
this.logger.info("Source: {} IgnoredFilePath: {}", sourcePath, ignoredFilePath);
411412
List<String> arguments = new ArrayList<>();
412413
arguments.add(CxConstants.CMD_SCAN);
413-
arguments.add(CxConstants.SUB_CMD_OSS_REALTIME);
414+
arguments.add(subCommand);
414415
arguments.add(CxConstants.SOURCE);
415416
arguments.add(sourcePath);
416417
if (StringUtils.isNotBlank(ignoredFilePath)) {
417418
arguments.add(CxConstants.IGNORED_FILE_PATH);
418419
arguments.add(ignoredFilePath);
419420
}
420-
return Execution.executeCommand(withConfigArguments(arguments), logger, line -> line);
421+
return Execution.executeCommand(withConfigArguments(arguments), logger, resultParser);
422+
}
423+
424+
// OSS Realtime
425+
public OssRealtimeResults ossRealtimeScan(@NonNull String sourcePath, String ignoredFilePath)
426+
throws IOException, InterruptedException, CxException {
427+
return realtimeScan(CxConstants.SUB_CMD_OSS_REALTIME, sourcePath, ignoredFilePath, OssRealtimeResults::fromLine);
421428
}
422429

423-
public String ossRealtimeScan(@NonNull String sourcePath)
430+
// IAC Realtime
431+
public String iacRealtimeScan(@NonNull String sourcePath, String ignoredFilePath)
424432
throws IOException, InterruptedException, CxException {
425-
return ossRealtimeScan(sourcePath, null);
433+
return realtimeScan(CxConstants.SUB_CMD_IAC_REALTIME, sourcePath, ignoredFilePath, line -> line);
426434
}
435+
436+
// Secrets Realtime
437+
public String secretsRealtimeScan(@NonNull String sourcePath, String ignoredFilePath)
438+
throws IOException, InterruptedException, CxException {
439+
return realtimeScan(CxConstants.SUB_CMD_SECRETS_REALTIME, sourcePath, ignoredFilePath, line -> line);
440+
}
441+
442+
// Containers Realtime
443+
public String containersRealtimeScan(@NonNull String sourcePath, String ignoredFilePath)
444+
throws IOException, InterruptedException, CxException {
445+
return realtimeScan(CxConstants.SUB_CMD_CONTAINERS_REALTIME, sourcePath, ignoredFilePath, line -> line);
446+
}
447+
427448
public KicsRemediation kicsRemediate(@NonNull String resultsFile, String kicsFile, String engine,String similarityIds)
428449
throws IOException, InterruptedException, CxException {
429450
this.logger.info("Executing 'remediation kics' command using the CLI.");

0 commit comments

Comments
 (0)