Skip to content

Commit 8ed3650

Browse files
tiagobcxJay Nanduricx-pedro-lopes
authored
add ide scans enablement command (#262)
* add ide scans enablement command * fixing linter issues * adding addtional params * adding additional params Co-authored-by: Jay Nanduri <jay.nanduri@checkmarx.com> Co-authored-by: Pedro Lopes <83576881+pedrompflopes@users.noreply.github.com>
1 parent e4128ef commit 8ed3650

File tree

6 files changed

+81
-7
lines changed

6 files changed

+81
-7
lines changed

src/main/wrapper/CxConfig.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ export class CxConfig {
66
clientSecret: string;
77
apiKey: string;
88
tenant: string;
9+
additionalParameters:string;
910
}

src/main/wrapper/CxConstants.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export enum CxConstants {
1919
CMD_REMEDIATION = "remediation",
2020
SUB_CMD_REMEDIATION_KICS = "kics",
2121
SUB_CMD_REMEDIATION_SCA = "sca",
22+
SUB_CMD_TENANT = "tenant",
2223
KICS_REMEDIATION_RESULTS_FILE = "--results-file",
2324
KICS_REMEDIATION_KICS_FILE = "--kics-files",
2425
KICS_REMEDIATION_SIMILARITY_IDS = "--similarity-ids",
@@ -76,5 +77,6 @@ export enum CxConstants {
7677
SEVERITY_HIGH = "high",
7778
SEVERITY_MEDIUM = "medium",
7879
STATE_CONFIRMED = "confirmed",
79-
CMD_LEARN_MORE = "learn-more"
80+
CMD_LEARN_MORE = "learn-more",
81+
IDE_SCANS_KEY = " scan.config.plugins.ideScans"
8082
}

src/main/wrapper/CxWrapper.ts

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ export class CxWrapper {
1717
constructor(cxScanConfig: CxConfig, logFilePath?: string) {
1818

1919
getLoggerWithFilePath(logFilePath)
20-
21-
if (cxScanConfig.clientId && cxScanConfig.clientSecret) {
20+
if (cxScanConfig.apiKey) {
21+
this.config.apiKey = cxScanConfig.apiKey;
22+
}
23+
else if (cxScanConfig.clientId && cxScanConfig.clientSecret) {
2224
logger.info("Received clientId and clientSecret");
2325
this.config.clientId = cxScanConfig.clientId;
2426
this.config.clientSecret = cxScanConfig.clientSecret;
25-
} else if (cxScanConfig.apiKey) {
26-
this.config.apiKey = cxScanConfig.apiKey;
2727
} else {
2828
logger.info("Did not receive ClientId/Secret or ApiKey from cli arguments");
2929
}
@@ -51,6 +51,9 @@ export class CxWrapper {
5151
if (cxScanConfig.tenant) {
5252
this.config.tenant = cxScanConfig.tenant;
5353
}
54+
if (cxScanConfig.additionalParameters) {
55+
this.config.additionalParameters = cxScanConfig.additionalParameters;
56+
}
5457
}
5558

5659
initializeCommands(formatRequired: boolean): string[] {
@@ -79,6 +82,12 @@ export class CxWrapper {
7982
list.push(CxConstants.TENANT);
8083
list.push(this.config.tenant);
8184
}
85+
if(this.config.additionalParameters){
86+
// this.config.additionalParameters.forEach(function (param){
87+
// list.push(param)
88+
// })
89+
list.push(this.config.additionalParameters)
90+
}
8291
if (formatRequired) {
8392
list.push(CxConstants.FORMAT);
8493
list.push(CxConstants.FORMAT_JSON);
@@ -275,6 +284,14 @@ export class CxWrapper {
275284
return exec.executeCommands(this.config.pathToExecutable, commands);
276285
}
277286

287+
async ideScansEnabled() : Promise<boolean> {
288+
const commands: string[] = [CxConstants.CMD_UTILS, CxConstants.SUB_CMD_TENANT];
289+
commands.push(...this.initializeCommands(false));
290+
const exec = new ExecutionService();
291+
const output = await exec.executeMapTenantOutputCommands(this.config.pathToExecutable, commands);
292+
return output.has(CxConstants.IDE_SCANS_KEY) && output.get(CxConstants.IDE_SCANS_KEY).toLowerCase() === " true";
293+
}
294+
278295

279296
getIndexOfBflNode(bflNodes: CxBFL[], resultNodes: any[]): number {
280297

src/main/wrapper/ExecutionService.ts

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ import CxPackageData from "../results/CxPackageData";
2121
import CxKicsRemediation from "../remediation/CxKicsRemediation";
2222

2323

24-
25-
2624
function isJsonString(s: string) {
2725
try {
2826
const stringObject = s.split('\n')[0];
@@ -118,6 +116,54 @@ export class ExecutionService {
118116
}), this.fsObject];
119117
}
120118

119+
executeMapTenantOutputCommands(pathToExecutable: string, commands: string[]): Promise<Map<string,string>> {
120+
return (new Promise( (resolve, reject)=> {
121+
let stderr = "";
122+
let stdout ="";
123+
124+
this.fsObject = spawner.spawn(pathToExecutable, transformation(commands));
125+
this.fsObject.on('error', (data: { toString: () => string; }) => {
126+
if (data) {
127+
logger.error(data.toString().replace('\n', ''));
128+
stderr += data.toString();
129+
}
130+
reject()
131+
});
132+
this.fsObject.on('exit',(code: number) => {
133+
logger.info("Exit code received from AST-CLI: " + code);
134+
if(code==1){
135+
stderr = stdout
136+
}
137+
resolve(ExecutionService.onCloseMapTenantOutputCommand(code, stderr, stdout));
138+
});
139+
this.fsObject.stdout.on('data', (data: { toString: () => string; }) => {
140+
if (data) {
141+
logger.info(data.toString().replace('\n', ''));
142+
stdout += data.toString();
143+
}
144+
});
145+
this.fsObject.stderr.on('data', (data: { toString: () => string; }) => {
146+
if (data) {
147+
logger.error(data.toString().replace('\n', ''));
148+
stderr += data.toString();
149+
}
150+
});
151+
}));
152+
}
153+
154+
private static onCloseMapTenantOutputCommand(code: number, stderr: string, stdout: string): Map<string,string> {
155+
const result = new Map<string,string>();
156+
if (code == 0) {
157+
const tenantSettingsList = stdout.split('\n');
158+
tenantSettingsList.forEach(tenantSetting => {
159+
tenantSetting.includes('Key') ? result.set(tenantSetting.split(':')[1],tenantSettingsList[tenantSettingsList.indexOf(tenantSetting) +1].split(':')[1]) : null;
160+
});
161+
} else {
162+
logger.error("Error occurred while executing command: " + stderr);
163+
}
164+
return result;
165+
}
166+
121167
private static onCloseCommand(code: number, stderr: string, stdout: string, output: string) : CxCommandOutput {
122168
const cxCommandOutput = new CxCommandOutput();
123169
cxCommandOutput.exitCode = code;

src/tests/BaseTest.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export class BaseTest {
77
scanId: string;
88
pathToExecutable: string;
99
tenant: string;
10+
additionalParameters:string;
1011

1112
constructor() {
1213
this.baseUri = process.env["CX_BASE_URI"];
@@ -16,6 +17,7 @@ export class BaseTest {
1617
this.tenant = process.env["CX_TENANT"];
1718
this.apiKey = process.env["CX_APIKEY"];
1819
this.scanId = process.env["CX_SCANID"];
20+
this.additionalParameters = "--debug"
1921
if (process.env["PATH_TO_EXECUTABLE"] !== null && process.env["PATH_TO_EXECUTABLE"] !== undefined) {
2022
this.pathToExecutable = process.env["PATH_TO_EXECUTABLE"];
2123
}

src/tests/ScanTest.test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,10 @@ describe("ScanCreate cases", () => {
9999
expect(scanObject.results.length).toBeGreaterThan(0);
100100
expect(pid).toBeDefined();
101101
})
102+
103+
it("Should check if scan create is possible", async() => {
104+
const auth = new CxWrapper(cxScanConfig);
105+
const tenantSettings: boolean = await auth.ideScansEnabled();
106+
expect(tenantSettings).toBeDefined();
107+
})
102108
});

0 commit comments

Comments
 (0)