Skip to content

Commit 6da7c8b

Browse files
Add Oss Scanner (AST-95414) (#832)
* Add Oss Scanner * Fix comment * Skip test
1 parent ccc96fa commit 6da7c8b

File tree

7 files changed

+81
-0
lines changed

7 files changed

+81
-0
lines changed

src/main/oss/CxManifestStatus.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export enum CxManifestStatus {
2+
malicious = "Malicious",
3+
ok = "Ok",
4+
unknown = "Unknown"
5+
}

src/main/oss/CxOss.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import {CxManifestStatus} from './CxManifestStatus';
2+
3+
export default class CxOssResult {
4+
packageManager : string;
5+
packageName : string;
6+
version : string;
7+
filepath : string;
8+
lineStart : number;
9+
lineEnd : number;
10+
startIndex : number;
11+
endIndex : number;
12+
status :CxManifestStatus;
13+
14+
15+
static parseResult(resultObject: any): CxOssResult[] {
16+
let ossResults: CxOssResult[] = [];
17+
if (resultObject instanceof Array) {
18+
ossResults = resultObject.map((member: any) => {
19+
const ossResult = new CxOssResult();
20+
ossResult.packageManager = member.PackageManager;
21+
ossResult.packageName = member.PackageName;
22+
ossResult.version = member.Version;
23+
ossResult.filepath = member.Filepath;
24+
ossResult.lineStart = member.LineStart;
25+
ossResult.lineEnd = member.LineEnd;
26+
ossResult.startIndex = member.StartIndex;
27+
ossResult.endIndex = member.EndIndex;
28+
ossResult.status = member.Status as CxManifestStatus;
29+
return ossResult;
30+
});
31+
} else {
32+
const ossResult = new CxOssResult();
33+
ossResult.packageManager = resultObject.PackageManager;
34+
ossResult.packageName = resultObject.PackageName;
35+
ossResult.version = resultObject.Version;
36+
ossResult.filepath = resultObject.FilePath;
37+
ossResult.lineStart = resultObject.LineStart;
38+
ossResult.lineEnd = resultObject.LineEnd;
39+
ossResult.startIndex = resultObject.StartIndex;
40+
ossResult.endIndex = resultObject.EndIndex;
41+
ossResult.status = resultObject.Status as CxManifestStatus;
42+
ossResults.push(ossResult);
43+
}
44+
return ossResults;
45+
}
46+
}

src/main/wrapper/CxConstants.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ export enum CxConstants {
7272
CMD_ASCA = "asca",
7373
SOURCE_FILE = "--file-source",
7474
ASCA_UPDATE_VERSION = "--asca-latest-version",
75+
CMD_OSS = "oss-realtime",
7576
PROJECT_ID = "--project-id",
7677
SIMILARITY_ID = "--similarity-id",
7778
QUERY_ID = "--query-id",
@@ -87,6 +88,7 @@ export enum CxConstants {
8788
ENGINE = "--engine",
8889
SCAN_TYPE = "CxScan",
8990
SCAN_ASCA = "CxAsca",
91+
SCAN_OSS = "CxOss",
9092
PROJECT_TYPE = "CxProject",
9193
PREDICATE_TYPE = "CxPredicate",
9294
CODE_BASHING_TYPE = "CxCodeBashing",

src/main/wrapper/CxWrapper.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,13 @@ export class CxWrapper {
147147
return await exec.executeCommands(this.config.pathToExecutable, commands, CxConstants.SCAN_ASCA);
148148
}
149149

150+
async scanOss(sourceFile: string): Promise<CxCommandOutput> {
151+
const commands: string[] = [CxConstants.CMD_SCAN, CxConstants.CMD_OSS, CxConstants.SOURCE, sourceFile];
152+
commands.push(...this.initializeCommands(false));
153+
const exec = new ExecutionService();
154+
return await exec.executeCommands(this.config.pathToExecutable, commands, CxConstants.SCAN_OSS);
155+
}
156+
150157
async scanCancel(id: string): Promise<CxCommandOutput> {
151158
const commands: string[] = [CxConstants.CMD_SCAN, CxConstants.SUB_CMD_CANCEL, CxConstants.SCAN_ID, id];
152159
commands.push(...this.initializeCommands(false));

src/main/wrapper/ExecutionService.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import CxScaRealTime from "../scaRealtime/CxScaRealTime";
2323
import CxChat from "../chat/CxChat";
2424
import CxMask from "../mask/CxMask";
2525
import CxAsca from "../asca/CxAsca";
26+
import CxOssResult from "../oss/CxOss";
2627

2728
let skipValue = false;
2829
const fileSourceFlag = "--file-source"
@@ -205,6 +206,10 @@ export class ExecutionService {
205206
const asca = CxAsca.parseScan(resultObject);
206207
cxCommandOutput.payload = [asca];
207208
break;
209+
case CxConstants.SCAN_OSS:
210+
const oss = CxOssResult.parseResult(resultObject);
211+
cxCommandOutput.payload = [oss];
212+
break;
208213
case CxConstants.PROJECT_TYPE:
209214
const projects = CxProject.parseProject(resultObject);
210215
cxCommandOutput.payload = projects;

src/tests/ScanTest.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,5 +166,13 @@ describe("ScanCreate cases", () => {
166166
expect(Number.isInteger(scanObject.scanDetails[0].line)).toBe(true);
167167
expect(typeof scanObject.scanDetails[0].description).toBe('string');
168168
});
169+
170+
it.skip('ScanOss Successful case', async () => {
171+
const wrapper = new CxWrapper(cxScanConfig);
172+
const cxCommandOutput: CxCommandOutput = await wrapper.scanOss("tsc/tests/data/package.json");
173+
console.log("Json object from scanOSS successful case: " + JSON.stringify(cxCommandOutput));
174+
expect(cxCommandOutput.payload).toBeDefined();
175+
expect(cxCommandOutput.exitCode).toBe(0);
176+
});
169177

170178
});

tsc/tests/data/package.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"name": "test",
3+
"version": "0.0.1",
4+
"description": "AST CLI Javascript wrapper tests",
5+
"dependencies": {
6+
"log4js": "^6.9.1"
7+
}
8+
}

0 commit comments

Comments
 (0)