scanoss 0.5.7 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.idea/workspace.xml +29 -19
- package/build/main/cli/bin/cli-bin.js +1 -1
- package/build/main/sdk/Dependencies/LocalDependency/DependencyTypes.d.ts +1 -1
- package/build/main/sdk/Dependencies/LocalDependency/LocalDependency.js +4 -2
- package/build/main/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.d.ts +2 -0
- package/build/main/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.js +95 -0
- package/build/main/sdk/Dependencies/LocalDependency/parsers/golangParser.d.ts +2 -2
- package/build/main/sdk/Dependencies/LocalDependency/parsers/golangParser.js +5 -5
- package/build/main/sdk/Dependencies/LocalDependency/parsers/mavenParser.d.ts +1 -1
- package/build/main/sdk/Dependencies/LocalDependency/parsers/mavenParser.js +4 -3
- package/build/main/sdk/Dependencies/LocalDependency/parsers/npmParser.d.ts +5 -5
- package/build/main/sdk/Dependencies/LocalDependency/parsers/npmParser.js +11 -10
- package/build/main/sdk/Dependencies/LocalDependency/parsers/nugetParser.d.ts +2 -2
- package/build/main/sdk/Dependencies/LocalDependency/parsers/nugetParser.js +4 -4
- package/build/main/sdk/Dependencies/LocalDependency/parsers/pyParser.d.ts +1 -1
- package/build/main/sdk/Dependencies/LocalDependency/parsers/pyParser.js +3 -3
- package/build/main/sdk/Dependencies/LocalDependency/parsers/rubyParser.d.ts +2 -2
- package/build/main/sdk/Dependencies/LocalDependency/parsers/rubyParser.js +5 -5
- package/build/main/sdk/scanner/Dispatcher/Dispatcher.js +1 -2
- package/build/main/sdk/scanner/Scanner.d.ts +12 -12
- package/build/main/sdk/scanner/Scanner.js +7 -4
- package/build/main/tsconfig.tsbuildinfo +35 -20
- package/build/module/cli/bin/cli-bin.js +1 -1
- package/build/module/sdk/Dependencies/LocalDependency/DependencyTypes.d.ts +1 -1
- package/build/module/sdk/Dependencies/LocalDependency/LocalDependency.js +4 -2
- package/build/module/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.d.ts +2 -0
- package/build/module/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.js +87 -0
- package/build/module/sdk/Dependencies/LocalDependency/parsers/golangParser.d.ts +2 -2
- package/build/module/sdk/Dependencies/LocalDependency/parsers/golangParser.js +5 -5
- package/build/module/sdk/Dependencies/LocalDependency/parsers/mavenParser.d.ts +1 -1
- package/build/module/sdk/Dependencies/LocalDependency/parsers/mavenParser.js +4 -3
- package/build/module/sdk/Dependencies/LocalDependency/parsers/npmParser.d.ts +5 -5
- package/build/module/sdk/Dependencies/LocalDependency/parsers/npmParser.js +11 -10
- package/build/module/sdk/Dependencies/LocalDependency/parsers/nugetParser.d.ts +2 -2
- package/build/module/sdk/Dependencies/LocalDependency/parsers/nugetParser.js +4 -4
- package/build/module/sdk/Dependencies/LocalDependency/parsers/pyParser.d.ts +1 -1
- package/build/module/sdk/Dependencies/LocalDependency/parsers/pyParser.js +3 -3
- package/build/module/sdk/Dependencies/LocalDependency/parsers/rubyParser.d.ts +2 -2
- package/build/module/sdk/Dependencies/LocalDependency/parsers/rubyParser.js +5 -5
- package/build/module/sdk/scanner/Dispatcher/Dispatcher.js +1 -2
- package/build/module/sdk/scanner/Scanner.d.ts +12 -12
- package/build/module/sdk/scanner/Scanner.js +7 -4
- package/build/module/tsconfig.module.tsbuildinfo +35 -20
- package/package.json +1 -1
- package/src/cli/bin/cli-bin.ts +1 -1
- package/src/sdk/Dependencies/LocalDependency/DependencyTypes.ts +1 -1
- package/src/sdk/Dependencies/LocalDependency/LocalDependency.ts +4 -1
- package/src/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.ts +115 -0
- package/src/sdk/Dependencies/LocalDependency/parsers/golangParser.ts +6 -6
- package/src/sdk/Dependencies/LocalDependency/parsers/mavenParser.ts +4 -3
- package/src/sdk/Dependencies/LocalDependency/parsers/npmParser.ts +16 -15
- package/src/sdk/Dependencies/LocalDependency/parsers/nugetParser.ts +5 -5
- package/src/sdk/Dependencies/LocalDependency/parsers/pyParser.ts +3 -3
- package/src/sdk/Dependencies/LocalDependency/parsers/rubyParser.ts +6 -6
- package/src/sdk/scanner/Dispatcher/Dispatcher.ts +0 -1
- package/src/sdk/scanner/Scanner.ts +21 -17
- package/tests/sdk/Dependencies/LocalDependency/Parsers/buildGradle.spec.ts +48 -0
- package/tests/sdk/Dependencies/LocalDependency/Parsers/golangParser.spec.ts +4 -4
- package/tests/sdk/Dependencies/LocalDependency/Parsers/npmParser.spec.ts +14 -14
- package/tests/sdk/Dependencies/LocalDependency/Parsers/nugetParser.spec.ts +10 -7
- package/tests/sdk/Dependencies/LocalDependency/Parsers/pomParser.spec.ts +2 -2
- package/tests/sdk/Dependencies/LocalDependency/Parsers/samples/gradle/1/build.gradle +26 -0
- package/tests/sdk/Dependencies/LocalDependency/Parsers/samples/gradle/2/build.gradle +16 -0
- package/tests/sdk/Dependencies/LocalDependency/Parsers/samples/yarn-lock/generate_expected_output.sh +1 -1
- package/yarn.lock +7 -0
- package/package-lock.json +0 -17030
|
@@ -527,7 +527,7 @@
|
|
|
527
527
|
"affectsGlobalScope": false
|
|
528
528
|
},
|
|
529
529
|
"../../src/sdk/scanner/Dispatcher/Dispatcher.ts": {
|
|
530
|
-
"version": "
|
|
530
|
+
"version": "c0e48eb8ea6f97d7433648377d3f2a32815b302422d64f6b736422a722ca249e",
|
|
531
531
|
"signature": "060f7710dc3ecddc5678e67a21cdfdb67bb3a7ca2632a0f4d3305e20fb71595c",
|
|
532
532
|
"affectsGlobalScope": false
|
|
533
533
|
},
|
|
@@ -552,8 +552,8 @@
|
|
|
552
552
|
"affectsGlobalScope": false
|
|
553
553
|
},
|
|
554
554
|
"../../src/sdk/scanner/Scanner.ts": {
|
|
555
|
-
"version": "
|
|
556
|
-
"signature": "
|
|
555
|
+
"version": "8b2de158c5298c4040d61de6c577bb2691793048483f342456fcbaa2297321d3",
|
|
556
|
+
"signature": "8b6c6e21d6e4c91ad92cfe30b13cb928c806b893ec1c6952cf58fc3b4ac74925",
|
|
557
557
|
"affectsGlobalScope": false
|
|
558
558
|
},
|
|
559
559
|
"../../src/sdk/Dependencies/DependencyTypes.ts": {
|
|
@@ -567,8 +567,8 @@
|
|
|
567
567
|
"affectsGlobalScope": false
|
|
568
568
|
},
|
|
569
569
|
"../../src/sdk/Dependencies/LocalDependency/DependencyTypes.ts": {
|
|
570
|
-
"version": "
|
|
571
|
-
"signature": "
|
|
570
|
+
"version": "97bc88c00e7f7b15c0b3c2abd28920cc4ee01d994bd80e604191982198fac839",
|
|
571
|
+
"signature": "219c0332248e4d656e2a66b8e85d073b773f26fed90809fdda2db372b17f142e",
|
|
572
572
|
"affectsGlobalScope": false
|
|
573
573
|
},
|
|
574
574
|
"../../node_modules/@grpc/grpc-js/build/src/metadata.d.ts": {
|
|
@@ -997,28 +997,28 @@
|
|
|
997
997
|
"affectsGlobalScope": false
|
|
998
998
|
},
|
|
999
999
|
"../../src/sdk/Dependencies/LocalDependency/parsers/pyParser.ts": {
|
|
1000
|
-
"version": "
|
|
1001
|
-
"signature": "
|
|
1000
|
+
"version": "8731a14b6efeb98c379502e89bce1215f960a2b455931d53cd4c6fa86cadd064",
|
|
1001
|
+
"signature": "60a2d5fa0cc89f7dc1f0fadec78c4aec40e1711796650bfaf01e4d72afd12653",
|
|
1002
1002
|
"affectsGlobalScope": false
|
|
1003
1003
|
},
|
|
1004
1004
|
"../../src/sdk/Dependencies/LocalDependency/parsers/mavenParser.ts": {
|
|
1005
|
-
"version": "
|
|
1006
|
-
"signature": "
|
|
1005
|
+
"version": "90fcbe4a637dfc6c47afe4894f778561c80828d173d6d287675d5c0932501387",
|
|
1006
|
+
"signature": "e1867fe84d4367ae35b518735018ed9500236d2b8025730a9a583d6dbeb250f8",
|
|
1007
1007
|
"affectsGlobalScope": false
|
|
1008
1008
|
},
|
|
1009
1009
|
"../../src/sdk/Dependencies/LocalDependency/parsers/npmParser.ts": {
|
|
1010
|
-
"version": "
|
|
1011
|
-
"signature": "
|
|
1010
|
+
"version": "373fe307703f18152a11b3a4cbdd6e0c9b5e8e180951a405ff372858a79f0a64",
|
|
1011
|
+
"signature": "42f317f68c7debfec90d4435f03d13069d06e1150e89d09041951cc4da9c49b2",
|
|
1012
1012
|
"affectsGlobalScope": false
|
|
1013
1013
|
},
|
|
1014
1014
|
"../../src/sdk/Dependencies/LocalDependency/parsers/rubyParser.ts": {
|
|
1015
|
-
"version": "
|
|
1016
|
-
"signature": "
|
|
1015
|
+
"version": "ba96c46b7dbec51bd0e022c61677a6beae63f2af0c017188cbf73ad0a2b92b20",
|
|
1016
|
+
"signature": "d7cf3d36988a27b67513ed325168938038babd43a260c7bdf501dd3368e4de98",
|
|
1017
1017
|
"affectsGlobalScope": false
|
|
1018
1018
|
},
|
|
1019
1019
|
"../../src/sdk/Dependencies/LocalDependency/parsers/golangParser.ts": {
|
|
1020
|
-
"version": "
|
|
1021
|
-
"signature": "
|
|
1020
|
+
"version": "f7f52b8132533c6199aa2024a1345f839020c6a0e3b08056c1f4b688a023f553",
|
|
1021
|
+
"signature": "a3c3cf8ad915027c8112973f3d2aacd8faca3b117732e61e97bab6663fdfb190",
|
|
1022
1022
|
"affectsGlobalScope": false
|
|
1023
1023
|
},
|
|
1024
1024
|
"../../node_modules/xml-js/types/index.d.ts": {
|
|
@@ -1027,12 +1027,17 @@
|
|
|
1027
1027
|
"affectsGlobalScope": false
|
|
1028
1028
|
},
|
|
1029
1029
|
"../../src/sdk/Dependencies/LocalDependency/parsers/nugetParser.ts": {
|
|
1030
|
-
"version": "
|
|
1031
|
-
"signature": "
|
|
1030
|
+
"version": "0b7590b7f965bbbc44d37b7aa25c0680ac83a3202ae1f4dcd1da24252ee9da23",
|
|
1031
|
+
"signature": "3edc8c93883a02c7ba71d31afb26d6affe4367b411d5db2779b76c21cbead170",
|
|
1032
|
+
"affectsGlobalScope": false
|
|
1033
|
+
},
|
|
1034
|
+
"../../src/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.ts": {
|
|
1035
|
+
"version": "7615bd12f5dca897cfd5477583fffaabb21e4b9929d30dfb90e832bfa82e30bf",
|
|
1036
|
+
"signature": "5be0bf1b37a315973ea4791db74c473fccfc81e3b76bfea738c2dba011d6868b",
|
|
1032
1037
|
"affectsGlobalScope": false
|
|
1033
1038
|
},
|
|
1034
1039
|
"../../src/sdk/Dependencies/LocalDependency/LocalDependency.ts": {
|
|
1035
|
-
"version": "
|
|
1040
|
+
"version": "fbd412a873faf06f15d60c02dd2f556165150e4b13fb42b669e06952684dc786",
|
|
1036
1041
|
"signature": "839144fdad988ceefaf7893c3554b9a7ac98f67a736a070443e52c0f9ca77663",
|
|
1037
1042
|
"affectsGlobalScope": false
|
|
1038
1043
|
},
|
|
@@ -1197,7 +1202,7 @@
|
|
|
1197
1202
|
"affectsGlobalScope": false
|
|
1198
1203
|
},
|
|
1199
1204
|
"../../src/cli/bin/cli-bin.ts": {
|
|
1200
|
-
"version": "
|
|
1205
|
+
"version": "70926ff24ff0a5dafacab5124fc427d99384049bde65c2d991e27e1717ebfbfc",
|
|
1201
1206
|
"signature": "43e818adf60173644896298637f47b01d5819b17eda46eaa32d0c7d64724d012",
|
|
1202
1207
|
"affectsGlobalScope": false
|
|
1203
1208
|
},
|
|
@@ -2451,6 +2456,7 @@
|
|
|
2451
2456
|
"../../node_modules/@types/node/path.d.ts",
|
|
2452
2457
|
"../../node_modules/@types/node/util.d.ts",
|
|
2453
2458
|
"../../src/sdk/Dependencies/LocalDependency/DependencyTypes.ts",
|
|
2459
|
+
"../../src/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.ts",
|
|
2454
2460
|
"../../src/sdk/Dependencies/LocalDependency/parsers/golangParser.ts",
|
|
2455
2461
|
"../../src/sdk/Dependencies/LocalDependency/parsers/mavenParser.ts",
|
|
2456
2462
|
"../../src/sdk/Dependencies/LocalDependency/parsers/npmParser.ts",
|
|
@@ -2458,6 +2464,12 @@
|
|
|
2458
2464
|
"../../src/sdk/Dependencies/LocalDependency/parsers/pyParser.ts",
|
|
2459
2465
|
"../../src/sdk/Dependencies/LocalDependency/parsers/rubyParser.ts"
|
|
2460
2466
|
],
|
|
2467
|
+
"../../src/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.ts": [
|
|
2468
|
+
"../../node_modules/@types/node/path.d.ts",
|
|
2469
|
+
"../../node_modules/@types/node/util.d.ts",
|
|
2470
|
+
"../../node_modules/packageurl-js/src/package-url.d.ts",
|
|
2471
|
+
"../../src/sdk/Dependencies/LocalDependency/DependencyTypes.ts"
|
|
2472
|
+
],
|
|
2461
2473
|
"../../src/sdk/Dependencies/LocalDependency/parsers/golangParser.ts": [
|
|
2462
2474
|
"../../node_modules/@types/node/path.d.ts",
|
|
2463
2475
|
"../../node_modules/@types/node/util.d.ts",
|
|
@@ -3780,6 +3792,9 @@
|
|
|
3780
3792
|
"../../src/sdk/Dependencies/LocalDependency/LocalDependency.ts": [
|
|
3781
3793
|
"../../src/sdk/Dependencies/LocalDependency/DependencyTypes.ts"
|
|
3782
3794
|
],
|
|
3795
|
+
"../../src/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.ts": [
|
|
3796
|
+
"../../src/sdk/Dependencies/LocalDependency/DependencyTypes.ts"
|
|
3797
|
+
],
|
|
3783
3798
|
"../../src/sdk/Dependencies/LocalDependency/parsers/golangParser.ts": [
|
|
3784
3799
|
"../../src/sdk/Dependencies/LocalDependency/DependencyTypes.ts"
|
|
3785
3800
|
],
|
|
@@ -3864,7 +3879,6 @@
|
|
|
3864
3879
|
],
|
|
3865
3880
|
"../../src/sdk/scanner/Scanner.ts": [
|
|
3866
3881
|
"../../node_modules/eventemitter3/index.d.ts",
|
|
3867
|
-
"../../src/sdk/scanner/Dispatcher/DispatcherResponse.ts",
|
|
3868
3882
|
"../../src/sdk/scanner/ScannerCfg.ts",
|
|
3869
3883
|
"../../src/sdk/scanner/ScannerTypes.ts"
|
|
3870
3884
|
],
|
|
@@ -4123,6 +4137,7 @@
|
|
|
4123
4137
|
"../../src/sdk/Dependencies/DependencyTypes.ts",
|
|
4124
4138
|
"../../src/sdk/Dependencies/LocalDependency/DependencyTypes.ts",
|
|
4125
4139
|
"../../src/sdk/Dependencies/LocalDependency/LocalDependency.ts",
|
|
4140
|
+
"../../src/sdk/Dependencies/LocalDependency/parsers/buildGradleParser.ts",
|
|
4126
4141
|
"../../src/sdk/Dependencies/LocalDependency/parsers/golangParser.ts",
|
|
4127
4142
|
"../../src/sdk/Dependencies/LocalDependency/parsers/mavenParser.ts",
|
|
4128
4143
|
"../../src/sdk/Dependencies/LocalDependency/parsers/npmParser.ts",
|
package/package.json
CHANGED
package/src/cli/bin/cli-bin.ts
CHANGED
|
@@ -14,7 +14,7 @@ export interface ILocalDependencies{
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
/* Parser funcion definition */
|
|
17
|
-
export type ParserFuncType = (fileContent: string, filePath: string) => ILocalDependency
|
|
17
|
+
export type ParserFuncType = (fileContent: string, filePath: string) => Promise<ILocalDependency>;
|
|
18
18
|
|
|
19
19
|
export interface ParserDefinitions {
|
|
20
20
|
[key: string]: ParserFuncType;
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
import { gemfilelockParser, gemfileParser } from "./parsers/rubyParser";
|
|
12
12
|
import { goModParser, goSumParser } from './parsers/golangParser';
|
|
13
13
|
import { csprojParser, packagesConfigParser } from './parsers/nugetParser';
|
|
14
|
+
import { buildGradleParser } from './parsers/buildGradleParser';
|
|
14
15
|
|
|
15
16
|
export class LocalDependencies {
|
|
16
17
|
|
|
@@ -32,6 +33,7 @@ export class LocalDependencies {
|
|
|
32
33
|
'yarn.lock': yarnLockParser,
|
|
33
34
|
'*.csproj': csprojParser,
|
|
34
35
|
'packages.config': packagesConfigParser,
|
|
36
|
+
'build.gradle': buildGradleParser,
|
|
35
37
|
};
|
|
36
38
|
|
|
37
39
|
}
|
|
@@ -44,7 +46,7 @@ export class LocalDependencies {
|
|
|
44
46
|
if(parser != null) {
|
|
45
47
|
try {
|
|
46
48
|
const fileContent = await fs.promises.readFile(filePath, 'utf8');
|
|
47
|
-
const dependency = parser(fileContent, filePath);
|
|
49
|
+
const dependency = await parser(fileContent, filePath);
|
|
48
50
|
if(dependency.purls.length != 0)
|
|
49
51
|
results.files.push(dependency);
|
|
50
52
|
} catch(e) {
|
|
@@ -66,6 +68,7 @@ export class LocalDependencies {
|
|
|
66
68
|
//Check for a wildcard string match
|
|
67
69
|
const filesPatterns = Object.keys(this.parserMap).filter((item) => item.includes("*"));
|
|
68
70
|
for (const pattern of filesPatterns) {
|
|
71
|
+
|
|
69
72
|
if (this.stringMatchWithWildcard(filename, pattern)) return this.parserMap[pattern];
|
|
70
73
|
}
|
|
71
74
|
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { ILocalDependency } from '../DependencyTypes';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { PackageURL } from 'packageurl-js';
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
const MANIFEST_FILE = 'build.gradle';
|
|
7
|
+
const depBlockRex = /dependencies\s*{\s*(?<dependencies>(.|\n)*?)}/gm;
|
|
8
|
+
|
|
9
|
+
enum GRADLE_STATES {
|
|
10
|
+
WALKING,
|
|
11
|
+
SINGLELINE_DEPENDENCY,
|
|
12
|
+
MULTILINE_DEPENDENCY
|
|
13
|
+
}
|
|
14
|
+
export async function buildGradleParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
// If the file is not a manifest file, return an empty results
|
|
18
|
+
const results: ILocalDependency = {file: filePath, purls: []};
|
|
19
|
+
if(path.basename(filePath) != MANIFEST_FILE)
|
|
20
|
+
return results;
|
|
21
|
+
|
|
22
|
+
//For each dependency block, generate purls
|
|
23
|
+
let gradle;
|
|
24
|
+
while ((gradle = depBlockRex.exec(fileContent)) !== null) {
|
|
25
|
+
let depBlock = gradle?.groups?.dependencies;
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
let current_config_name = ""; //Config name is placed in the scope
|
|
29
|
+
let lines = depBlock.split(/\r?\n/) as string;
|
|
30
|
+
for (let i = 0; i<lines.length; i++) {
|
|
31
|
+
let line = lines[i];
|
|
32
|
+
|
|
33
|
+
if (line.includes("//")) line = line.replace(/\/\/.*$/gm, "");
|
|
34
|
+
line = line.trim();
|
|
35
|
+
if (line == '') continue;
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
current_config_name = getConfigNameFromLine(line);
|
|
39
|
+
|
|
40
|
+
//Multiline dependency
|
|
41
|
+
if(current_config_name && line.includes("(")) {
|
|
42
|
+
|
|
43
|
+
while( i<lines.length && !lines[i].includes(")")) {
|
|
44
|
+
const componentData = createPurlNameFromLine(lines[i]);
|
|
45
|
+
if (componentData != null) {
|
|
46
|
+
results.purls.push({
|
|
47
|
+
purl: componentData.purlName,
|
|
48
|
+
requirement: componentData.version,
|
|
49
|
+
scope: current_config_name
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
i++;
|
|
53
|
+
}
|
|
54
|
+
current_config_name='';
|
|
55
|
+
} else { //Single line dependency
|
|
56
|
+
const componentData = createPurlNameFromLine(line);
|
|
57
|
+
if (componentData == null) {
|
|
58
|
+
current_config_name = '';
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
results.purls.push({purl: componentData.purlName, requirement: componentData.version, scope: current_config_name});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return Promise.resolve(results);
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function getConfigNameFromLine(line): string {
|
|
75
|
+
let configName = ""
|
|
76
|
+
|
|
77
|
+
const dep = line.split(/\s/);
|
|
78
|
+
if (dep.length) configName = dep[0].replace("(", "").trim();
|
|
79
|
+
|
|
80
|
+
return configName;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
//Takes a line and generate a purl when possible.
|
|
84
|
+
// There are three ways of declaring dependencies
|
|
85
|
+
interface componentData{
|
|
86
|
+
purlName: string;
|
|
87
|
+
version: string;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function createPurlNameFromLine(line: string): componentData {
|
|
91
|
+
|
|
92
|
+
let namespace = undefined;
|
|
93
|
+
let name = undefined;
|
|
94
|
+
let version = undefined;
|
|
95
|
+
|
|
96
|
+
//Enters when line = implementation 'org.scala-lang:scala-library:2.11.12'
|
|
97
|
+
let dep = line.match(/(?<namespace>[\w\.\-]+):(?<name>[\w\.\-]+):(?<version>[\d\.]+)/);
|
|
98
|
+
if (dep?.length) {
|
|
99
|
+
namespace = dep.groups.namespace
|
|
100
|
+
name = dep.groups.name
|
|
101
|
+
version = dep.groups.version
|
|
102
|
+
} else if (line.includes("group") && line.includes("name") && line.includes("version")) {
|
|
103
|
+
version = line.match(/version:\s+['"](?<version>[\w\.\-\d]+)['"]/).groups.version
|
|
104
|
+
name = line.match(/name:\s+['"](?<name>[\w\.\-\d]+)['"]/).groups?.name
|
|
105
|
+
namespace = line.match(/group:\s+['"](?<group>[\w\.\-\d]+)['"]/).groups?.group
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
let purlName = "";
|
|
109
|
+
if(name && namespace) {
|
|
110
|
+
const purlObj = new PackageURL('maven', namespace, name, undefined, undefined, undefined);
|
|
111
|
+
return { purlName: purlObj.toString(), version }
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
@@ -36,12 +36,12 @@ const PURL_TYPE = 'golang';
|
|
|
36
36
|
|
|
37
37
|
// See reference on: https://go.dev/ref/mod#go-mod-file
|
|
38
38
|
const MANIFEST_FILE = 'go.mod';
|
|
39
|
-
export function goModParser(fileContent: string, filePath: string): ILocalDependency {
|
|
39
|
+
export function goModParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
|
|
40
40
|
|
|
41
41
|
// If the file is not a go.mod manifest file, return an empty results
|
|
42
42
|
const results: ILocalDependency = {file: filePath, purls: []};
|
|
43
43
|
if(path.basename(filePath) != MANIFEST_FILE)
|
|
44
|
-
return results;
|
|
44
|
+
return Promise.resolve(results);
|
|
45
45
|
|
|
46
46
|
const lines = fileContent.split('\n');
|
|
47
47
|
|
|
@@ -70,7 +70,7 @@ export function goModParser(fileContent: string, filePath: string): ILocalDepend
|
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
return results;
|
|
73
|
+
return Promise.resolve(results);
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
|
|
@@ -99,12 +99,12 @@ function getDepDataGoSumFromLine(line: string) {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
// See reference on: https://go.dev/ref/mod#go-mod-file
|
|
102
|
-
export function goSumParser(fileContent: string, filePath: string): ILocalDependency {
|
|
102
|
+
export function goSumParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
|
|
103
103
|
|
|
104
104
|
// If the file is not a go.mod manifest file, return an empty results
|
|
105
105
|
const results: ILocalDependency = { file: filePath, purls: [] };
|
|
106
106
|
if (path.basename(filePath) != 'go.sum')
|
|
107
|
-
return results;
|
|
107
|
+
return Promise.resolve(results);
|
|
108
108
|
|
|
109
109
|
|
|
110
110
|
const lines = fileContent.split('\n');
|
|
@@ -123,7 +123,7 @@ export function goSumParser(fileContent: string, filePath: string): ILocalDepend
|
|
|
123
123
|
results.purls.push({purl: purlString, requirement: version})
|
|
124
124
|
}
|
|
125
125
|
|
|
126
|
-
return results;
|
|
126
|
+
return Promise.resolve(results);
|
|
127
127
|
|
|
128
128
|
|
|
129
129
|
}
|
|
@@ -8,12 +8,12 @@ const PURL_TYPE = 'maven';
|
|
|
8
8
|
// See reference on: https://maven.apache.org/guides/introduction/introduction-to-the-pom.html
|
|
9
9
|
// and https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
|
|
10
10
|
const MANIFEST_FILE = 'pom.xml';
|
|
11
|
-
export function pomParser(fileContent: string, filePath: string): ILocalDependency {
|
|
11
|
+
export function pomParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
|
|
12
12
|
|
|
13
13
|
// If the file is not a python manifest file, return an empty results
|
|
14
14
|
const results: ILocalDependency = {file: filePath, purls: []};
|
|
15
15
|
if(path.basename(filePath) != MANIFEST_FILE)
|
|
16
|
-
|
|
16
|
+
return Promise.resolve(results);
|
|
17
17
|
|
|
18
18
|
const dependencies = fileContent.match(/<dependency>((?:.|\n)*?)<\/dependency>/gm);
|
|
19
19
|
if(dependencies) {
|
|
@@ -58,7 +58,8 @@ export function pomParser(fileContent: string, filePath: string): ILocalDependen
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
//Remove purls duplicated
|
|
61
|
-
|
|
61
|
+
const nonDuplicatedResults = removeDuplicated(results);
|
|
62
|
+
return Promise.resolve(nonDuplicatedResults);
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
function removeDuplicated(results: ILocalDependency): ILocalDependency {
|
|
@@ -8,11 +8,12 @@ const PURL_TYPE = 'npm';
|
|
|
8
8
|
// Parse a package.json file from node projects
|
|
9
9
|
// See reference on: https://docs.npmjs.com/cli/v8/configuring-npm/package-json
|
|
10
10
|
const MANIFEST_FILE = 'package.json';
|
|
11
|
-
export function packageParser(fileContent: string, filePath: string): ILocalDependency {
|
|
11
|
+
export function packageParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
|
|
12
12
|
// If the file is not manifest file, return an empty results
|
|
13
13
|
const results: ILocalDependency = {file: filePath, purls: []};
|
|
14
14
|
if(path.basename(filePath) != MANIFEST_FILE)
|
|
15
|
-
|
|
15
|
+
return Promise.resolve(results);
|
|
16
|
+
|
|
16
17
|
const o = JSON.parse(fileContent);
|
|
17
18
|
let devDeps = Object.keys(o.devDependencies || {});
|
|
18
19
|
let deps = Object.keys(o.dependencies || {});
|
|
@@ -27,22 +28,22 @@ export function packageParser(fileContent: string, filePath: string): ILocalDepe
|
|
|
27
28
|
results.purls.push({purl: purlString, scope: "devDependencies", requirement: o.devDependencies[name]});
|
|
28
29
|
}
|
|
29
30
|
|
|
30
|
-
return results;
|
|
31
|
+
return Promise.resolve(results);
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
|
|
34
35
|
// Parse a package-lock.json file from node projects
|
|
35
36
|
// See reference on: https://docs.npmjs.com/cli/v8/configuring-npm/package-json
|
|
36
|
-
export function packagelockParser(fileContent: string, filePath: string): ILocalDependency {
|
|
37
|
+
export function packagelockParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
|
|
37
38
|
|
|
38
39
|
const results: ILocalDependency = {file: filePath, purls: []};
|
|
39
40
|
|
|
40
41
|
if(path.basename(filePath) != 'package-lock.json')
|
|
41
|
-
|
|
42
|
+
return Promise.resolve(results);
|
|
42
43
|
|
|
43
44
|
const packages = JSON.parse(fileContent)?.packages;
|
|
44
45
|
|
|
45
|
-
if(!packages) return results;
|
|
46
|
+
if(!packages) return Promise.resolve(results);
|
|
46
47
|
|
|
47
48
|
for (const [key, value] of Object.entries(packages)) {
|
|
48
49
|
if(!key) continue;
|
|
@@ -55,22 +56,22 @@ export function packagelockParser(fileContent: string, filePath: string): ILocal
|
|
|
55
56
|
results.purls.push({purl: purl, requirement: req});
|
|
56
57
|
}
|
|
57
58
|
|
|
58
|
-
return results;
|
|
59
|
+
return Promise.resolve(results);
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
|
|
62
63
|
|
|
63
|
-
export function yarnLockParser(fileContent: string, filePath: string): ILocalDependency {
|
|
64
|
+
export function yarnLockParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
|
|
64
65
|
const results: ILocalDependency = {file: filePath, purls: []};
|
|
65
66
|
|
|
66
67
|
if(path.basename(filePath) != 'yarn.lock')
|
|
67
|
-
return results;
|
|
68
|
+
return Promise.resolve(results);
|
|
68
69
|
|
|
69
70
|
const yarnVersion = yarnLockRecognizeVersion(fileContent)
|
|
70
71
|
if (yarnVersion === YarnLockVersionEnum.V1) return yarnLockV1Parser(fileContent, filePath)
|
|
71
72
|
else if (yarnVersion === YarnLockVersionEnum.V2) return yarnLockV2Parser(fileContent, filePath)
|
|
72
73
|
|
|
73
|
-
return results;
|
|
74
|
+
return Promise.resolve(results);
|
|
74
75
|
}
|
|
75
76
|
|
|
76
77
|
enum YarnLockVersionEnum {
|
|
@@ -100,7 +101,7 @@ export function yarnLockRecognizeVersion(fileContent: string): YarnLockVersionEn
|
|
|
100
101
|
return YarnLockVersionEnum.UnknownYarnLockFormat
|
|
101
102
|
}
|
|
102
103
|
|
|
103
|
-
export function yarnLockV1Parser(fileContent: string, filePath: string): ILocalDependency {
|
|
104
|
+
export function yarnLockV1Parser(fileContent: string, filePath: string): Promise <ILocalDependency> {
|
|
104
105
|
|
|
105
106
|
const results: ILocalDependency = {file: filePath, purls: []};
|
|
106
107
|
|
|
@@ -210,17 +211,17 @@ export function yarnLockV1Parser(fileContent: string, filePath: string): ILocalD
|
|
|
210
211
|
}
|
|
211
212
|
|
|
212
213
|
|
|
213
|
-
return results;
|
|
214
|
-
|
|
214
|
+
return Promise.resolve(results);
|
|
215
215
|
|
|
216
216
|
}
|
|
217
217
|
|
|
218
218
|
|
|
219
|
-
|
|
219
|
+
//TODO: Implement yarn lock V2 parser
|
|
220
|
+
export function yarnLockV2Parser(fileContent: string, filePath: string): Promise<ILocalDependency> {
|
|
220
221
|
|
|
221
222
|
const results: ILocalDependency = {file: filePath, purls: []};
|
|
222
223
|
|
|
223
224
|
|
|
224
|
-
return results;
|
|
225
|
+
return Promise.resolve(results);
|
|
225
226
|
|
|
226
227
|
}
|
|
@@ -4,7 +4,7 @@ import { PackageURL } from 'packageurl-js';
|
|
|
4
4
|
|
|
5
5
|
const PURL_TYPE = "nuget";
|
|
6
6
|
|
|
7
|
-
export function csprojParser(fileContent: string, filePath: string): ILocalDependency {
|
|
7
|
+
export function csprojParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
|
|
8
8
|
|
|
9
9
|
const results: ILocalDependency = {file: filePath, purls: []};
|
|
10
10
|
|
|
@@ -34,14 +34,14 @@ export function csprojParser(fileContent: string, filePath: string): ILocalDepen
|
|
|
34
34
|
|
|
35
35
|
} catch (e) {
|
|
36
36
|
console.error(e);
|
|
37
|
-
return {file: filePath, purls: []};
|
|
37
|
+
return Promise.resolve({file: filePath, purls: []});
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
return results
|
|
40
|
+
return Promise.resolve(results)
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
export function packagesConfigParser(fileContent: string, filePath: string): ILocalDependency {
|
|
44
|
+
export function packagesConfigParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
|
|
45
45
|
|
|
46
46
|
const results: ILocalDependency = { file: filePath, purls: [] };
|
|
47
47
|
const packageConfig = xml.xml2js(fileContent);
|
|
@@ -60,5 +60,5 @@ export function packagesConfigParser(fileContent: string, filePath: string): ILo
|
|
|
60
60
|
})
|
|
61
61
|
});
|
|
62
62
|
|
|
63
|
-
return results;
|
|
63
|
+
return Promise.resolve(results);
|
|
64
64
|
}
|
|
@@ -18,12 +18,12 @@ const PURL_TYPE = 'pypi';
|
|
|
18
18
|
// Parse a requirements.txt file from python projects
|
|
19
19
|
// See reference on: https://pip.pypa.io/en/stable/reference/requirements-file-format/
|
|
20
20
|
const MANIFEST_FILE = 'requirements.txt';
|
|
21
|
-
export function requirementsParser(fileContent: string, filePath: string): ILocalDependency {
|
|
21
|
+
export function requirementsParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
|
|
22
22
|
|
|
23
23
|
// If the file is not a python manifest file, return an empty results
|
|
24
24
|
const results: ILocalDependency = {file: filePath, purls: []};
|
|
25
25
|
if(path.basename(filePath) != MANIFEST_FILE)
|
|
26
|
-
return results;
|
|
26
|
+
return Promise.resolve(results);
|
|
27
27
|
|
|
28
28
|
const lines: Array<string> = fileContent.split('\n');
|
|
29
29
|
|
|
@@ -54,5 +54,5 @@ export function requirementsParser(fileContent: string, filePath: string): ILoca
|
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
|
|
57
|
+
return Promise.resolve(results);
|
|
58
58
|
}
|
|
@@ -10,12 +10,12 @@ const PURL_TYPE = 'gem';
|
|
|
10
10
|
// See reference on: https://bundler.io/gemfile.html
|
|
11
11
|
// and https://bundler.io/man/gemfile.5.html
|
|
12
12
|
const MANIFEST_FILE = 'Gemfile';
|
|
13
|
-
export function gemfileParser(fileContent: string, filePath: string): ILocalDependency {
|
|
13
|
+
export function gemfileParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
|
|
14
14
|
|
|
15
15
|
// If the file is not a manifest file, return an empty results
|
|
16
16
|
const results: ILocalDependency = {file: filePath, purls: []};
|
|
17
17
|
if(path.basename(filePath) != MANIFEST_FILE)
|
|
18
|
-
|
|
18
|
+
return Promise.resolve(results);
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
const lines: Array<string> = fileContent.split('\n');
|
|
@@ -34,24 +34,24 @@ export function gemfileParser(fileContent: string, filePath: string): ILocalDepe
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
-
return results;
|
|
37
|
+
return Promise.resolve(results);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
const MANIFEST_FILE_1 = 'Gemfile.lock';
|
|
42
|
-
export function gemfilelockParser(fileContent: string, filePath: string): ILocalDependency {
|
|
42
|
+
export function gemfilelockParser(fileContent: string, filePath: string): Promise<ILocalDependency> {
|
|
43
43
|
|
|
44
44
|
// If the file is not a manifest file, return an empty results
|
|
45
45
|
const results: ILocalDependency = {file: filePath, purls: []};
|
|
46
46
|
if(path.basename(filePath) != MANIFEST_FILE_1)
|
|
47
|
-
|
|
47
|
+
return Promise.resolve(results);
|
|
48
48
|
|
|
49
49
|
const gemlockParser = new GemfileLockParser();
|
|
50
50
|
const purls = gemlockParser.getDependencies(fileContent);
|
|
51
51
|
for (const purl of purls) {
|
|
52
52
|
results.purls.push({purl});
|
|
53
53
|
}
|
|
54
|
-
return results;
|
|
54
|
+
return Promise.resolve(results);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
|
|
@@ -161,7 +161,6 @@ export class Dispatcher extends EventEmitter {
|
|
|
161
161
|
this.emit(ScannerEvents.DISPATCHER_NEW_DATA, dispatcherResponse);
|
|
162
162
|
return Promise.resolve();
|
|
163
163
|
} catch (e) {
|
|
164
|
-
console.log(e);
|
|
165
164
|
clearTimeout(timeoutId);
|
|
166
165
|
this.globalAbortController.removeAbortController(timeoutController);
|
|
167
166
|
this.errorHandler(e, item);
|