Skip to content

Commit 8c42f06

Browse files
committed
Add containers realtime scan functionality and related constants
1 parent 3fb583d commit 8c42f06

File tree

6 files changed

+97
-0
lines changed

6 files changed

+97
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import { CxRealtimeEngineStatus } from './CxRealtimeEngineStatus';
2+
3+
export interface Location {
4+
line: number;
5+
startIndex: number;
6+
endIndex: number;
7+
}
8+
9+
export default class CxContainerRealtimeResult {
10+
imageName: string;
11+
imageTag: string;
12+
filepath: string;
13+
locations: Location[];
14+
status: CxRealtimeEngineStatus;
15+
vulnerabilities: { cve: string, severity: string }[];
16+
17+
static parseResult(resultObject: any): CxContainerRealtimeResult[] {
18+
const images = resultObject.Images;
19+
let imageResults: CxContainerRealtimeResult[] = [];
20+
if (images instanceof Array) {
21+
imageResults = images.map((member: any) => {
22+
const imageResult = new CxContainerRealtimeResult();
23+
imageResult.imageName = member.ImageName;
24+
imageResult.imageTag = member.ImageTag;
25+
imageResult.filepath = member.FilePath;
26+
imageResult.locations = Array.isArray(member.Locations)
27+
? member.Locations.map((loc: any) => ({
28+
line: loc.Line,
29+
startIndex: loc.StartIndex,
30+
endIndex: loc.EndIndex
31+
}))
32+
: [];
33+
imageResult.status = member.Status as CxRealtimeEngineStatus;
34+
imageResult.vulnerabilities = Array.isArray(member.Vulnerabilities)
35+
? member.Vulnerabilities.map((vul: any) => ({
36+
cve: vul.CVE,
37+
severity: vul.Severity
38+
}))
39+
: [];
40+
return imageResult;
41+
});
42+
} else {
43+
const imageResult = new CxContainerRealtimeResult();
44+
imageResult.imageName = images.PackageManager;
45+
imageResult.imageTag = images.PackageName;
46+
imageResult.filepath = images.FilePath;
47+
imageResult.locations = Array.isArray(images.Locations)
48+
? images.Locations.map((loc: any) => ({
49+
line: loc.Line,
50+
startIndex: loc.StartIndex,
51+
endIndex: loc.EndIndex
52+
}))
53+
: [];
54+
imageResult.status = images.Status as CxRealtimeEngineStatus;
55+
imageResult.vulnerabilities = Array.isArray(images.Vulnerabilities)
56+
? images.Vulnerabilities.map((vul: any) => ({
57+
cve: vul.CVE,
58+
severity: vul.Severity
59+
}))
60+
: [];
61+
imageResults.push(imageResult);
62+
}
63+
return imageResults;
64+
}
65+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export enum CxRealtimeEngineStatus {
2+
malicious = "Malicious",
3+
ok = "OK",
4+
unknown = "Unknown",
5+
critical = "Critical",
6+
high = "High",
7+
medium = "Medium",
8+
low = "Low"
9+
}

src/main/wrapper/CxConstants.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ export enum CxConstants {
7373
SOURCE_FILE = "--file-source",
7474
ASCA_UPDATE_VERSION = "--asca-latest-version",
7575
CMD_OSS = "oss-realtime",
76+
CMD_CONTAINERS_REALTIME = "containers-realtime",
7677
CMD_SECRETS = "secrets-realtime",
7778
PROJECT_ID = "--project-id",
7879
SIMILARITY_ID = "--similarity-id",
@@ -90,6 +91,7 @@ export enum CxConstants {
9091
SCAN_TYPE = "CxScan",
9192
SCAN_ASCA = "CxAsca",
9293
SCAN_OSS = "CxOss",
94+
SCAN_CONTAINERS_REALTIME = "CxContainersRealtime",
9395
SCAN_SECRETS = "CxSecrets",
9496
PROJECT_TYPE = "CxProject",
9597
PREDICATE_TYPE = "CxPredicate",

src/main/wrapper/CxWrapper.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,13 @@ export class CxWrapper {
156156
return await exec.executeCommands(this.config.pathToExecutable, commands, CxConstants.SCAN_OSS);
157157
}
158158

159+
async containersRealtimeScanResults(sourceFile: string): Promise<CxCommandOutput> {
160+
const commands: string[] = [CxConstants.CMD_SCAN, CxConstants.CMD_CONTAINERS_REALTIME, CxConstants.SOURCE, sourceFile];
161+
commands.push(...this.initializeCommands(false));
162+
const exec = new ExecutionService();
163+
return await exec.executeCommands(this.config.pathToExecutable, commands, CxConstants.SCAN_CONTAINERS_REALTIME);
164+
}
165+
159166
async secretsScanResults(sourceFile: string): Promise<CxCommandOutput> {
160167
const commands: string[] = [CxConstants.CMD_SCAN, CxConstants.CMD_SECRETS, CxConstants.SOURCE, sourceFile];
161168
commands.push(...this.initializeCommands(false));

src/main/wrapper/ExecutionService.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import CxMask from "../mask/CxMask";
2525
import CxAsca from "../asca/CxAsca";
2626
import CxOssResult from "../oss/CxOss";
2727
import CxSecretsResult from "../secrets/CxSecrets";
28+
import CxContainerRealtimeResult from "../containersRealtime/CxContainerRealtime";
2829

2930
let skipValue = false;
3031
const fileSourceFlag = "--file-source"
@@ -211,6 +212,10 @@ export class ExecutionService {
211212
const oss = CxOssResult.parseResult(resultObject);
212213
cxCommandOutput.payload = [oss];
213214
break;
215+
case CxConstants.SCAN_CONTAINERS_REALTIME:
216+
const images = CxContainerRealtimeResult.parseResult(resultObject);
217+
cxCommandOutput.payload = [images];
218+
break;
214219
case CxConstants.SCAN_SECRETS:
215220
const secrets = CxSecretsResult.parseResult(resultObject);
216221
cxCommandOutput.payload = [secrets];

src/tests/ScanTest.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,4 +190,13 @@ describe("ScanCreate cases", () => {
190190
expect(cxCommandOutput.exitCode).toBe(0);
191191
});
192192

193+
it('ScanContainersRealtime Successful case', async () => {
194+
const wrapper = new CxWrapper(cxScanConfig);
195+
const cxCommandOutput: CxCommandOutput = await wrapper.containersRealtimeScanResults("src/tests/data/Dockerfile");
196+
console.log("Json object from scanContainersRealtime successful case: " + JSON.stringify(cxCommandOutput));
197+
expect(cxCommandOutput.payload).toBeDefined();
198+
expect(cxCommandOutput.exitCode).toBe(0);
199+
});
200+
201+
193202
});

0 commit comments

Comments
 (0)