diff --git a/src/main/results/CxDependencyPaths.ts b/src/main/results/CxDependencyPaths.ts index ae5185ac..921683d6 100644 --- a/src/main/results/CxDependencyPaths.ts +++ b/src/main/results/CxDependencyPaths.ts @@ -3,4 +3,5 @@ export default class CxDependencyPaths { name: string; version: string; isDevelopment: boolean; + supportsQuickFix:boolean; } \ No newline at end of file diff --git a/src/main/results/CxScaPackageData.ts b/src/main/results/CxScaPackageData.ts index 9581e12c..806b5d15 100644 --- a/src/main/results/CxScaPackageData.ts +++ b/src/main/results/CxScaPackageData.ts @@ -6,12 +6,14 @@ export default class CxScaPackageData { dependencyPaths: CxDependencyPaths []; outdated: boolean; fixLink:string + supportsQuickFix:boolean; - constructor(id: string,locations: string [],dependencyPaths: CxDependencyPaths [],outdated: boolean,fixLink:string) { + constructor(id: string,locations: string [],dependencyPaths: CxDependencyPaths [],outdated: boolean,fixLink:string,supportsQuickFix:boolean) { this.id = id; this.locations = locations; this.dependencyPaths = dependencyPaths; this.outdated = outdated; this.fixLink = fixLink; + this.supportsQuickFix = supportsQuickFix; } } \ No newline at end of file diff --git a/src/main/wrapper/CxConstants.ts b/src/main/wrapper/CxConstants.ts index 078276d9..15bf4251 100644 --- a/src/main/wrapper/CxConstants.ts +++ b/src/main/wrapper/CxConstants.ts @@ -22,7 +22,7 @@ export enum CxConstants { KICS_REMEDIATION_RESULTS_FILE = "--results-file", KICS_REMEDIATION_KICS_FILE = "--kics-files", KICS_REMEDIATION_SIMILARITY_IDS = "--similarity-ids", - SCA_REMEDIATION_PACKAGE_FILE = "--package-file", + SCA_REMEDIATION_PACKAGE_FILES = "--package-files", SCA_REMEDIATION_PACKAGE = "--package", SCA_REMEDIATION_PACKAGE_VERSION = "--package-version", CMD_AUTH = "auth", diff --git a/src/main/wrapper/CxWrapper.ts b/src/main/wrapper/CxWrapper.ts index ba092e90..cc52ff7b 100644 --- a/src/main/wrapper/CxWrapper.ts +++ b/src/main/wrapper/CxWrapper.ts @@ -260,8 +260,8 @@ export class CxWrapper { return exec.executeKicsCommands(this.config.pathToExecutable, commands, CxConstants.KICS_REMEDIATION_TYPE); } - async scaRemediation(packageFile: string, packages:string, packageVersion:string): Promise { - const commands: string[] = [CxConstants.CMD_UTILS, CxConstants.CMD_REMEDIATION,CxConstants.SUB_CMD_REMEDIATION_SCA,CxConstants.SCA_REMEDIATION_PACKAGE_FILE, packageFile,CxConstants.SCA_REMEDIATION_PACKAGE, packages,CxConstants.SCA_REMEDIATION_PACKAGE_VERSION,packageVersion]; + async scaRemediation(packageFiles: string, packages:string, packageVersion:string): Promise { + const commands: string[] = [CxConstants.CMD_UTILS, CxConstants.CMD_REMEDIATION,CxConstants.SUB_CMD_REMEDIATION_SCA,CxConstants.SCA_REMEDIATION_PACKAGE_FILES, packageFiles,CxConstants.SCA_REMEDIATION_PACKAGE, packages,CxConstants.SCA_REMEDIATION_PACKAGE_VERSION,packageVersion]; commands.push(...this.initializeCommands(false)); const exec = new ExecutionService(); return exec.executeCommands(this.config.pathToExecutable, commands); diff --git a/src/main/wrapper/ExecutionService.ts b/src/main/wrapper/ExecutionService.ts index a24d8c88..8d48cf7f 100644 --- a/src/main/wrapper/ExecutionService.ts +++ b/src/main/wrapper/ExecutionService.ts @@ -192,7 +192,7 @@ export class ExecutionService { const read_json = JSON.parse(read.replace(/:([0-9]{15,}),/g, ':"$1",')); if (read_json.results){ const r : CxResult[] = read_json.results.map((member:any)=>{ - const cxScaPackageData = new CxScaPackageData(member.data.scaPackageData?.id,member.data.scaPackageData?.locations,member.data.scaPackageData?.dependencyPaths,member.data.scaPackageData?.outdated,member.data.scaPackageData?.fixLink); + const cxScaPackageData = new CxScaPackageData(member.data.scaPackageData?.id,member.data.scaPackageData?.locations,member.data.scaPackageData?.dependencyPaths,member.data.scaPackageData?.outdated,member.data.scaPackageData?.fixLink,member.data.scaPackageData?.supportsQuickFix); const cvss = new CxCvss(member.vulnerabilityDetails.cvss.version,member.vulnerabilityDetails.cvss.attackVector,member.vulnerabilityDetails.cvss.availability,member.vulnerabilityDetails.cvss.confidentiality,member.vulnerabilityDetails.cvss.attackComplexity,member.vulnerabilityDetails.cvss.integrityImpact,member.vulnerabilityDetails.cvss.scope,member.vulnerabilityDetails.cvss.privilegesRequired,member.vulnerabilityDetails.cvss.userInteraction); const cxVulnerabilityDetails = new CxVulnerabilityDetails(member.vulnerabilityDetails.cweId,cvss,member.vulnerabilityDetails.compliances,member.vulnerabilityDetails.cvssScore,member.vulnerabilityDetails.cveName); const nodes:CxNode[]=member.data.nodes?.map((node:any)=>{ diff --git a/src/tests/RemediationTest.test.ts b/src/tests/RemediationTest.test.ts index 679c73c0..2a245172 100644 --- a/src/tests/RemediationTest.test.ts +++ b/src/tests/RemediationTest.test.ts @@ -3,6 +3,15 @@ import {BaseTest} from "./BaseTest"; import {CxCommandOutput} from "../main/wrapper/CxCommandOutput"; import CxKicsRemediation from "../main/remediation/CxKicsRemediation"; +describe("SCA Remediation cases",() => { + const cxScanConfig = new BaseTest(); + it('SCA Remediation Successful case ', async () => { + const auth = new CxWrapper(cxScanConfig); + const e:CxCommandOutput = await auth.scaRemediation("dist/tests/data/package.json","copyfiles","1.2") + expect(e.exitCode).toBe(0); + }); +}); + describe("Kics Remediation cases",() => { const cxScanConfig = new BaseTest(); it('Kics Remediation Successful case', async () => { @@ -22,10 +31,4 @@ describe("Kics Remediation cases",() => { expect(remediation.availableRemediation).toBeDefined(); expect(remediation.appliedRemediation).toBeDefined(); }); - - it('SCA Remediation Successful case ', async () => { - const auth = new CxWrapper(cxScanConfig); - const e:CxCommandOutput = await auth.scaRemediation("dist/tests/data/package.json","copyfiles","1.2") - expect(e.exitCode).toBe(0); - }); }); \ No newline at end of file