From 6b30067c591d41ebc7bfdf85002bedb139ecc9ce Mon Sep 17 00:00:00 2001 From: hmmachadocx Date: Wed, 4 Jan 2023 14:47:20 +0000 Subject: [PATCH 1/2] AST-18457 - CLI | SCA Real-time | Create new command - Handle SCA Rest APIs Handle Sca Realtime --- src/main/scaRealtime/CxScaRealTime.ts | 12 ++++++++++++ src/main/wrapper/CxConstants.ts | 3 +++ src/main/wrapper/CxWrapper.ts | 11 +++++++++++ src/main/wrapper/ExecutionService.ts | 5 +++++ src/tests/ScanTest.test.ts | 7 +++++++ 5 files changed, 38 insertions(+) create mode 100644 src/main/scaRealtime/CxScaRealTime.ts diff --git a/src/main/scaRealtime/CxScaRealTime.ts b/src/main/scaRealtime/CxScaRealTime.ts new file mode 100644 index 00000000..009c2e36 --- /dev/null +++ b/src/main/scaRealtime/CxScaRealTime.ts @@ -0,0 +1,12 @@ +export default class CxScaRealTime { + totalCount: string; + results: any = []; + + static parseScaRealTimeResponse(resultObject: any): CxScaRealTime { + const scaRealTime: CxScaRealTime = new CxScaRealTime(); + scaRealTime.totalCount = resultObject.totalCount; + scaRealTime.results = resultObject.results; + + return scaRealTime; + } +} \ No newline at end of file diff --git a/src/main/wrapper/CxConstants.ts b/src/main/wrapper/CxConstants.ts index 933040ef..9c69a086 100644 --- a/src/main/wrapper/CxConstants.ts +++ b/src/main/wrapper/CxConstants.ts @@ -41,6 +41,8 @@ export enum CxConstants { SUB_CMD_BFL = "bfl", CMD_CODE_BASHING = "codebashing", CMD_KICS_REALTIME = "kics-realtime", + CMD_SCA_REALTIME = "sca-realtime", + CMD_SCA_REALTIME_PROJECT_DIR = "--project-dir", SCAN_INFO_FORMAT = "--scan-info-format", FORMAT = "--format", FORMAT_JSON = "json", @@ -67,6 +69,7 @@ export enum CxConstants { PREDICATE_TYPE = "CxPredicate", CODE_BASHING_TYPE = "CxCodeBashing", KICS_REALTIME_TYPE = "CxKicsRealTime", + SCA_REALTIME_TYPE = "CxScaRealTime", LEARN_MORE_DESCRIPTIONS_TYPE = "CxLearnMoreDescriptions", KICS_REMEDIATION_TYPE = "CxKicsRemediation", BFL_TYPE = "CxBFL", diff --git a/src/main/wrapper/CxWrapper.ts b/src/main/wrapper/CxWrapper.ts index 9b9e0633..7d94f3f8 100644 --- a/src/main/wrapper/CxWrapper.ts +++ b/src/main/wrapper/CxWrapper.ts @@ -252,6 +252,17 @@ export class CxWrapper { return exec.executeKicsCommands(this.config.pathToExecutable, commands, CxConstants.KICS_REALTIME_TYPE); } + /** + * Run SCA Realtime for a specific directory + * + * @param projectDirPath + */ + async runScaRealtimeScan(projectDirPath: string): Promise { + const commands: string[] = [CxConstants.CMD_SCAN, CxConstants.CMD_SCA_REALTIME, CxConstants.CMD_SCA_REALTIME_PROJECT_DIR, projectDirPath]; + commands.push(...this.initializeCommands(false)); + return new ExecutionService().executeCommands(this.config.pathToExecutable, commands, CxConstants.SCA_REALTIME_TYPE); + } + async learnMore(queryId: string){ const commands: string[] = [CxConstants.CMD_UTILS,CxConstants.CMD_LEARN_MORE,CxConstants.QUERY_ID,queryId] diff --git a/src/main/wrapper/ExecutionService.ts b/src/main/wrapper/ExecutionService.ts index f03ba603..1da7ca9f 100644 --- a/src/main/wrapper/ExecutionService.ts +++ b/src/main/wrapper/ExecutionService.ts @@ -19,6 +19,7 @@ import CxCvss from "../results/CxCvss"; import CxNode from "../results/CxNode"; import CxPackageData from "../results/CxPackageData"; import CxKicsRemediation from "../remediation/CxKicsRemediation"; +import CxScaRealTime from "../scaRealtime/CxScaRealTime"; function isJsonString(s: string) { @@ -196,6 +197,10 @@ export class ExecutionService { const kicsResults = CxKicsRealTime.parseKicsRealTimeResponse(resultObject); cxCommandOutput.payload = [kicsResults]; break; + case CxConstants.SCA_REALTIME_TYPE: + const scaRealtimeResponse = CxScaRealTime.parseScaRealTimeResponse(resultObject); + cxCommandOutput.payload = [scaRealtimeResponse]; + break; case CxConstants.LEARN_MORE_DESCRIPTIONS_TYPE: const learnMore = CxLearnMoreDescriptions.parseLearnMoreDescriptionsResponse(resultObject); cxCommandOutput.payload = learnMore; diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index 01c5b5ab..ced492e6 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -100,6 +100,13 @@ describe("ScanCreate cases", () => { expect(pid).toBeDefined(); }) + it('ScaRealtime Successful case ', async () => { + const wrapper = new CxWrapper(cxScanConfig); + const cxCommandOutput: CxCommandOutput = await wrapper.runScaRealtimeScan(process.cwd()); + const scanObject = cxCommandOutput.payload.pop(); + expect(scanObject.results).toBeNull(); + }) + it("Should check if scan create is possible", async() => { const auth = new CxWrapper(cxScanConfig); const tenantSettings: boolean = await auth.ideScansEnabled(); From ff3a4ac971a5c3b4c1bd78bbeb446948d6a28d66 Mon Sep 17 00:00:00 2001 From: hmmachadocx Date: Mon, 9 Jan 2023 18:36:16 +0000 Subject: [PATCH 2/2] AST-18457 - CLI | SCA Real-time | Create new command - Handle SCA Rest APIs - Fix tests --- src/main/scaRealtime/CxScaRealTime.ts | 2 +- src/tests/ScanTest.test.ts | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/scaRealtime/CxScaRealTime.ts b/src/main/scaRealtime/CxScaRealTime.ts index 009c2e36..1549bd29 100644 --- a/src/main/scaRealtime/CxScaRealTime.ts +++ b/src/main/scaRealtime/CxScaRealTime.ts @@ -5,7 +5,7 @@ export default class CxScaRealTime { static parseScaRealTimeResponse(resultObject: any): CxScaRealTime { const scaRealTime: CxScaRealTime = new CxScaRealTime(); scaRealTime.totalCount = resultObject.totalCount; - scaRealTime.results = resultObject.results; + scaRealTime.results = resultObject.results || []; return scaRealTime; } diff --git a/src/tests/ScanTest.test.ts b/src/tests/ScanTest.test.ts index ced492e6..028531cf 100644 --- a/src/tests/ScanTest.test.ts +++ b/src/tests/ScanTest.test.ts @@ -100,11 +100,15 @@ describe("ScanCreate cases", () => { expect(pid).toBeDefined(); }) - it('ScaRealtime Successful case ', async () => { + it('ScaRealtime Successful case', async () => { const wrapper = new CxWrapper(cxScanConfig); const cxCommandOutput: CxCommandOutput = await wrapper.runScaRealtimeScan(process.cwd()); - const scanObject = cxCommandOutput.payload.pop(); - expect(scanObject.results).toBeNull(); + if(cxCommandOutput.exitCode == 1) { + expect(cxCommandOutput.payload).toBeUndefined(); + } else { + const scanObject = cxCommandOutput.payload.pop(); + expect(scanObject.results).toBeDefined(); + } }) it("Should check if scan create is possible", async() => {