Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/main/wrapper/CxConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ export class CxConfig {
clientSecret: string;
apiKey: string;
tenant: string;
additionalParameters:string;
}
4 changes: 3 additions & 1 deletion src/main/wrapper/CxConstants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export enum CxConstants {
CMD_REMEDIATION = "remediation",
SUB_CMD_REMEDIATION_KICS = "kics",
SUB_CMD_REMEDIATION_SCA = "sca",
SUB_CMD_TENANT = "tenant",
KICS_REMEDIATION_RESULTS_FILE = "--results-file",
KICS_REMEDIATION_KICS_FILE = "--kics-files",
KICS_REMEDIATION_SIMILARITY_IDS = "--similarity-ids",
Expand Down Expand Up @@ -76,5 +77,6 @@ export enum CxConstants {
SEVERITY_HIGH = "high",
SEVERITY_MEDIUM = "medium",
STATE_CONFIRMED = "confirmed",
CMD_LEARN_MORE = "learn-more"
CMD_LEARN_MORE = "learn-more",
IDE_SCANS_KEY = " scan.config.plugins.ideScans"
}
25 changes: 21 additions & 4 deletions src/main/wrapper/CxWrapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ export class CxWrapper {
constructor(cxScanConfig: CxConfig, logFilePath?: string) {

getLoggerWithFilePath(logFilePath)

if (cxScanConfig.clientId && cxScanConfig.clientSecret) {
if (cxScanConfig.apiKey) {
this.config.apiKey = cxScanConfig.apiKey;
}
else if (cxScanConfig.clientId && cxScanConfig.clientSecret) {
logger.info("Received clientId and clientSecret");
this.config.clientId = cxScanConfig.clientId;
this.config.clientSecret = cxScanConfig.clientSecret;
} else if (cxScanConfig.apiKey) {
this.config.apiKey = cxScanConfig.apiKey;
} else {
logger.info("Did not receive ClientId/Secret or ApiKey from cli arguments");
}
Expand Down Expand Up @@ -51,6 +51,9 @@ export class CxWrapper {
if (cxScanConfig.tenant) {
this.config.tenant = cxScanConfig.tenant;
}
if (cxScanConfig.additionalParameters) {
this.config.additionalParameters = cxScanConfig.additionalParameters;
}
}

initializeCommands(formatRequired: boolean): string[] {
Expand Down Expand Up @@ -79,6 +82,12 @@ export class CxWrapper {
list.push(CxConstants.TENANT);
list.push(this.config.tenant);
}
if(this.config.additionalParameters){
// this.config.additionalParameters.forEach(function (param){
// list.push(param)
// })
list.push(this.config.additionalParameters)
}
if (formatRequired) {
list.push(CxConstants.FORMAT);
list.push(CxConstants.FORMAT_JSON);
Expand Down Expand Up @@ -275,6 +284,14 @@ export class CxWrapper {
return exec.executeCommands(this.config.pathToExecutable, commands);
}

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


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

Expand Down
50 changes: 48 additions & 2 deletions src/main/wrapper/ExecutionService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ import CxPackageData from "../results/CxPackageData";
import CxKicsRemediation from "../remediation/CxKicsRemediation";




function isJsonString(s: string) {
try {
const stringObject = s.split('\n')[0];
Expand Down Expand Up @@ -118,6 +116,54 @@ export class ExecutionService {
}), this.fsObject];
}

executeMapTenantOutputCommands(pathToExecutable: string, commands: string[]): Promise<Map<string,string>> {
return (new Promise( (resolve, reject)=> {
let stderr = "";
let stdout ="";

this.fsObject = spawner.spawn(pathToExecutable, transformation(commands));
this.fsObject.on('error', (data: { toString: () => string; }) => {
if (data) {
logger.error(data.toString().replace('\n', ''));
stderr += data.toString();
}
reject()
});
this.fsObject.on('exit',(code: number) => {
logger.info("Exit code received from AST-CLI: " + code);
if(code==1){
stderr = stdout
}
resolve(ExecutionService.onCloseMapTenantOutputCommand(code, stderr, stdout));
});
this.fsObject.stdout.on('data', (data: { toString: () => string; }) => {
if (data) {
logger.info(data.toString().replace('\n', ''));
stdout += data.toString();
}
});
this.fsObject.stderr.on('data', (data: { toString: () => string; }) => {
if (data) {
logger.error(data.toString().replace('\n', ''));
stderr += data.toString();
}
});
}));
}

private static onCloseMapTenantOutputCommand(code: number, stderr: string, stdout: string): Map<string,string> {
const result = new Map<string,string>();
if (code == 0) {
const tenantSettingsList = stdout.split('\n');
tenantSettingsList.forEach(tenantSetting => {
tenantSetting.includes('Key') ? result.set(tenantSetting.split(':')[1],tenantSettingsList[tenantSettingsList.indexOf(tenantSetting) +1].split(':')[1]) : null;
});
} else {
logger.error("Error occurred while executing command: " + stderr);
}
return result;
}

private static onCloseCommand(code: number, stderr: string, stdout: string, output: string) : CxCommandOutput {
const cxCommandOutput = new CxCommandOutput();
cxCommandOutput.exitCode = code;
Expand Down
2 changes: 2 additions & 0 deletions src/tests/BaseTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ export class BaseTest {
scanId: string;
pathToExecutable: string;
tenant: string;
additionalParameters:string;

constructor() {
this.baseUri = process.env["CX_BASE_URI"];
Expand All @@ -16,6 +17,7 @@ export class BaseTest {
this.tenant = process.env["CX_TENANT"];
this.apiKey = process.env["CX_APIKEY"];
this.scanId = process.env["CX_SCANID"];
this.additionalParameters = "--debug"
if (process.env["PATH_TO_EXECUTABLE"] !== null && process.env["PATH_TO_EXECUTABLE"] !== undefined) {
this.pathToExecutable = process.env["PATH_TO_EXECUTABLE"];
}
Expand Down
6 changes: 6 additions & 0 deletions src/tests/ScanTest.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,4 +99,10 @@ describe("ScanCreate cases", () => {
expect(scanObject.results.length).toBeGreaterThan(0);
expect(pid).toBeDefined();
})

it("Should check if scan create is possible", async() => {
const auth = new CxWrapper(cxScanConfig);
const tenantSettings: boolean = await auth.ideScansEnabled();
expect(tenantSettings).toBeDefined();
})
});