Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
6b0329c
adding kics realtime support
tiagobcx May 5, 2022
ad6e8a9
adding vulnerable dockerfile only on test
tiagobcx May 6, 2022
629c6d1
fixing empty error messages
tiagobcx May 12, 2022
1524a1d
returning process + promise for better handling in plugins
tiagobcx May 24, 2022
a293f08
added engine support
tiagobcx May 24, 2022
ce47ef0
changing file flag
tiagobcx May 30, 2022
86cafc6
Merge branch 'main' into feature/AST-12044-kics-realtime
cx-pedro-lopes Jun 9, 2022
a7b901c
remove change in mac file
cx-pedro-lopes Jun 9, 2022
b694a9a
add log
cx-pedro-lopes Jun 9, 2022
c553a09
test
cx-pedro-lopes Jun 9, 2022
8c5b20a
change file name
cx-pedro-lopes Jun 9, 2022
0e26e94
add docker file
cx-pedro-lopes Jun 9, 2022
0e88de9
Result Test Successful case
cx-pedro-lopes Jun 9, 2022
4275840
change jest
cx-pedro-lopes Jun 9, 2022
284fcd9
fix project
cx-pedro-lopes Jun 9, 2022
4f60a18
remove run in band
cx-pedro-lopes Jun 9, 2022
de34cbe
project details
cx-pedro-lopes Jun 9, 2022
f1bb416
fix project test
cx-pedro-lopes Jun 9, 2022
81806b7
test
cx-pedro-lopes Jun 9, 2022
3cab4ea
test
cx-pedro-lopes Jun 9, 2022
55d4e39
test
cx-pedro-lopes Jun 9, 2022
4d8ddb7
test
cx-pedro-lopes Jun 9, 2022
9d668aa
test
cx-pedro-lopes Jun 9, 2022
653278b
remove runinband
cx-pedro-lopes Jun 9, 2022
bc866ae
Revert "remove change in mac file"
cx-pedro-lopes Jun 9, 2022
79a9e66
fix test
cx-pedro-lopes Jun 9, 2022
62a14c4
test
cx-pedro-lopes Jun 9, 2022
300babb
fix test
cx-pedro-lopes Jun 9, 2022
f448651
fix test
cx-pedro-lopes Jun 9, 2022
bb241c2
check test
cx-pedro-lopes Jun 9, 2022
9dbea9a
add file
cx-pedro-lopes Jun 9, 2022
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
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"scripts": {
"build": "tsc",
"postbuild": "copyfiles -u 1 src/main/wrapper/resources/cx* dist/",
"test": "tsc && jest --runInBand --coverage"
"test": "copyfiles -u 1 src/tests/data/* dist/; tsc && jest --runInBand --coverage"
},
"repository": "https://github.com/CheckmarxDev/ast-cli-javascript-wrapper.git",
"author": "Jay Nanduri",
Expand Down
15 changes: 15 additions & 0 deletions src/main/kicsRealtime/CxKicsRealTime.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
export default class CxKicsRealTime {
version: string = "";
count: string = "";
summary : any = {};
results: any = [];

static parseKicsRealTimeResponse(resultObject: any): CxKicsRealTime {
let kicsRealTime: CxKicsRealTime = new CxKicsRealTime();
kicsRealTime.version = resultObject.kics_version;
kicsRealTime.count = resultObject.total_counter;
kicsRealTime.results = resultObject.queries;
kicsRealTime.summary = resultObject.severity_counters;
return kicsRealTime;
}
}
5 changes: 5 additions & 0 deletions src/main/wrapper/CxConstants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export enum CxConstants {
CMD_RESULT = "results",
SUB_CMD_BFL = "bfl",
CMD_CODE_BASHING = "codebashing",
CMD_KICS_REALTIME = "kics-realtime",
SCAN_INFO_FORMAT = "--scan-info-format",
FORMAT = "--format",
FORMAT_JSON = "json",
Expand All @@ -47,10 +48,14 @@ export enum CxConstants {
REPORT_FORMAT = "--report-format",
OUTPUT_NAME = "--output-name",
OUTPUT_PATH = "--output-path",
FILE_SOURCES = "--file",
ADDITONAL_PARAMS = "--additional-params",
ENGINE = "--engine",
SCAN_TYPE = "CxScan",
PROJECT_TYPE = "CxProject",
PREDICATE_TYPE = "CxPredicate",
CODE_BASHING_TYPE = "CxCodeBashing",
KICS_REALTIME_TYPE = "CxKicsRealTime",
BFL_TYPE = "CxBFL",
SAST = "sast",
LANGUAGE = "--language",
Expand Down
10 changes: 10 additions & 0 deletions src/main/wrapper/CxWrapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,16 @@ export class CxWrapper {
return response;
}

async kicsRealtimeScan(fileSources: string, engine:string, additionalParams: string):Promise<[Promise<CxCommandOutput>,any]> {
const commands: string[] = [CxConstants.CMD_SCAN, CxConstants.CMD_KICS_REALTIME, CxConstants.FILE_SOURCES, fileSources, CxConstants.ADDITONAL_PARAMS, additionalParams];
if(engine.length>0){
commands.push(CxConstants.ENGINE,engine)
}
commands.push(...this.initializeCommands(false));
const exec = new ExecutionService();
return exec.executeKicsCommands(this.config.pathToExecutable, commands, CxConstants.KICS_REALTIME_TYPE);
}

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

let bflNodeNotFound = -1;
Expand Down
70 changes: 60 additions & 10 deletions src/main/wrapper/ExecutionService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import CxResult from "../results/CxResult";
import CxProject from "../project/CxProject";
import CxCodeBashing from "../codebashing/CxCodeBashing";
import CxBFL from "../bfl/CxBFL";
import CxKicsRealTime from "../kicsRealtime/CxKicsRealTime";

const spawn = require('child_process').spawn;

Expand All @@ -33,33 +34,79 @@ function transform(n:string) {
}

export class ExecutionService {
private fsObject : any = undefined

executeCommands(pathToExecutable: string, commands: string[], output? : string ): Promise<CxCommandOutput> {
return new Promise(function (resolve, reject) {
return (new Promise( (resolve, reject)=> {
let stderr = "";
let stdout ="";

let cp = spawn(pathToExecutable, transformation(commands));
cp.on('error', reject);
cp.on('exit',(code: number, signal: any) => {
this.fsObject = 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, signal: any) => {
logger.info("Exit code received from AST-CLI: " + code);
resolve(ExecutionService.onCloseCommand(code, stderr, stdout, output ));
if(code==1){
stderr = stdout
}
resolve(ExecutionService.onCloseCommand(code, stderr, stdout, output, this.fsObject ));
});
cp.stdout.on('data', (data: { toString: () => string; }) => {
this.fsObject.stdout.on('data', (data: { toString: () => string; }) => {
if (data) {
logger.info(data.toString().replace('\n', ''));
stdout += data.toString();
}
});
cp.stderr.on('data', (data: { toString: () => string; }) => {
this.fsObject.stderr.on('data', (data: { toString: () => string; }) => {
if (data) {
logger.error(data.toString().replace('\n', ''));
stderr += data.toString();
}
});
});
}));
}

executeKicsCommands(pathToExecutable: string, commands: string[], output? : string ): [Promise<CxCommandOutput>,any] {
return [new Promise( (resolve, reject)=> {
let stderr = "";
let stdout ="";

this.fsObject = 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, signal: any) => {
logger.info("Exit code received from AST-CLI: " + code);
if(code==1){
stderr = stdout
}
resolve(ExecutionService.onCloseCommand(code, stderr, stdout, output, this.fsObject ));
});
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();
}
});
}), this.fsObject];
}

private static onCloseCommand(code: number, stderr: string, stdout: string, output: string) : CxCommandOutput {
private static onCloseCommand(code: number, stderr: string, stdout: string, output: string, fsObject:any) : CxCommandOutput {
const cxCommandOutput = new CxCommandOutput();
cxCommandOutput.exitCode = code;
if (stderr) {
Expand All @@ -68,7 +115,6 @@ export class ExecutionService {
if (stdout) {
const stdoutSplit = stdout.split('\n');
const data = stdoutSplit.find(isJsonString);

if (data) {
let resultObject = JSON.parse(data);
switch (output) {
Expand All @@ -88,6 +134,10 @@ export class ExecutionService {
let bflNode = CxBFL.parseBFLResponse(resultObject);
cxCommandOutput.payload = bflNode;
break;
case "CxKicsRealTime":
let kicsResults = CxKicsRealTime.parseKicsRealTimeResponse(resultObject);
cxCommandOutput.payload = [kicsResults];
break;
default:
cxCommandOutput.payload = resultObject;
}
Expand Down
Binary file modified src/main/wrapper/resources/cx-mac
Binary file not shown.
8 changes: 5 additions & 3 deletions src/tests/ResultTest.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@ describe("Results cases",() => {
const auth = new CxWrapper(cxScanConfig);
const cxCommandOutput: CxCommandOutput = await auth.scanList("");
let sampleId = cxCommandOutput.payload.pop().id;
await auth.getResults(sampleId,"json","jsonList", ".");
const file = await fileExists("./jsonList.json");
expect(file).toBe(true);

auth.getResults(sampleId,"json","jsonList", ".").then(() => {
fileExists("./jsonList.json").then(file => expect(file).toBe(true));

});
});

it('Result List Successful case', async () => {
Expand Down
11 changes: 11 additions & 0 deletions src/tests/ScanTest.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,15 @@ describe("ScanCreate cases", () => {
const scanShowObject = await auth.scanShow(scanObject.id);
expect(scanShowObject.exitCode).toEqual(0);
})

it('KicsRealtime Successful case ', async () => {
const auth = new CxWrapper(cxScanConfig);
let [outputProcess,pid] = await auth.kicsRealtimeScan("dist/tests/data/Dockerfile","docker","-v");
const cxCommandOutput: CxCommandOutput = await outputProcess;
console.log(" Json object from successful no wait mode case: " + JSON.stringify( cxCommandOutput.payload));
const scanObject = cxCommandOutput.payload.pop();
console.log(" Json object from successful no wait mode case: " + JSON.stringify(scanObject));
expect(scanObject.results.length).toBeGreaterThan(0);
expect(pid).toBeDefined();
})
});
16 changes: 16 additions & 0 deletions src/tests/data/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
FROM openjdk:11.0.1-jre-slim-stretch

ARG webwolf_version=v8.0.0-SNAPSHOT

RUN \
apt-get update && apt-get install && \
useradd --home-dir /home/webwolf --create-home -U webwolf

USER webwolf
COPY target/webwolf-${webwolf_version}.jar /home/webwolf/webwolf.jar
COPY start-webwolf.sh /home/webwolf

EXPOSE 9090

ENTRYPOINT ["/home/webwolf/start-webwolf.sh"]
CMD ["--server.port=9090", "--server.address=0.0.0.0"]