@contrast/contrast 1.0.6 → 1.0.9

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.
Files changed (221) hide show
  1. package/.prettierignore +0 -6
  2. package/dist/audit/catalogueApplication/catalogueApplication.js +23 -5
  3. package/dist/audit/languageAnalysisEngine/getProjectRootFilenames.js +10 -19
  4. package/dist/audit/languageAnalysisEngine/report/commonReportingFunctions.js +98 -37
  5. package/dist/audit/languageAnalysisEngine/report/models/reportListModel.js +2 -1
  6. package/dist/audit/languageAnalysisEngine/report/models/reportOutputModel.js +4 -3
  7. package/dist/audit/languageAnalysisEngine/report/models/severityCountModel.js +3 -0
  8. package/dist/audit/languageAnalysisEngine/report/reportingFeature.js +87 -19
  9. package/dist/audit/languageAnalysisEngine/report/utils/reportUtils.js +46 -16
  10. package/dist/audit/languageAnalysisEngine/sendSnapshot.js +57 -19
  11. package/dist/audit/save.js +37 -0
  12. package/dist/commands/audit/auditConfig.js +0 -16
  13. package/dist/commands/audit/auditController.js +18 -11
  14. package/dist/commands/audit/help.js +31 -25
  15. package/dist/commands/audit/processAudit.js +3 -3
  16. package/dist/commands/audit/saveFile.js +8 -4
  17. package/dist/commands/scan/sca/scaAnalysis.js +55 -10
  18. package/dist/common/HTTPClient.js +64 -23
  19. package/dist/common/errorHandling.js +6 -1
  20. package/dist/common/versionChecker.js +20 -5
  21. package/dist/constants/constants.js +7 -2
  22. package/dist/constants/locales.js +35 -38
  23. package/dist/constants.js +20 -13
  24. package/dist/index.js +55 -45
  25. package/dist/lambda/analytics.js +11 -0
  26. package/dist/lambda/lambda.js +38 -4
  27. package/dist/lambda/types.js +13 -0
  28. package/dist/sbom/generateSbom.js +5 -4
  29. package/dist/scaAnalysis/common/formatMessage.js +44 -1
  30. package/dist/scaAnalysis/common/treeUpload.js +4 -6
  31. package/dist/scaAnalysis/dotnet/analysis.js +43 -0
  32. package/dist/scaAnalysis/dotnet/index.js +10 -0
  33. package/dist/scaAnalysis/go/goReadDepFile.js +1 -3
  34. package/dist/scaAnalysis/java/analysis.js +5 -8
  35. package/dist/scaAnalysis/java/index.js +2 -2
  36. package/dist/scaAnalysis/javascript/analysis.js +107 -0
  37. package/dist/scaAnalysis/javascript/index.js +50 -0
  38. package/dist/scaAnalysis/php/analysis.js +70 -0
  39. package/dist/scaAnalysis/php/index.js +17 -0
  40. package/dist/scaAnalysis/python/analysis.js +42 -0
  41. package/dist/scaAnalysis/python/index.js +10 -0
  42. package/dist/scaAnalysis/ruby/analysis.js +218 -0
  43. package/dist/scaAnalysis/ruby/index.js +10 -0
  44. package/dist/scan/autoDetection.js +23 -22
  45. package/dist/scan/fileUtils.js +57 -20
  46. package/dist/scan/formatScanOutput.js +12 -14
  47. package/dist/scan/models/groupedResultsModel.js +1 -1
  48. package/dist/scan/models/scanResultsModel.js +3 -1
  49. package/dist/scan/populateProjectIdAndProjectName.js +2 -1
  50. package/dist/scan/scan.js +1 -0
  51. package/dist/scan/scanConfig.js +8 -3
  52. package/dist/scan/scanController.js +16 -3
  53. package/dist/scan/scanResults.js +5 -1
  54. package/dist/utils/commonApi.js +4 -1
  55. package/dist/utils/filterProjectPath.js +7 -2
  56. package/dist/utils/getConfig.js +1 -6
  57. package/package.json +12 -9
  58. package/src/audit/catalogueApplication/catalogueApplication.js +28 -7
  59. package/src/audit/languageAnalysisEngine/getProjectRootFilenames.js +10 -39
  60. package/src/audit/languageAnalysisEngine/report/commonReportingFunctions.ts +183 -68
  61. package/src/audit/languageAnalysisEngine/report/models/reportLibraryModel.ts +3 -3
  62. package/src/audit/languageAnalysisEngine/report/models/reportListModel.ts +18 -11
  63. package/src/audit/languageAnalysisEngine/report/models/reportOutputModel.ts +11 -5
  64. package/src/audit/languageAnalysisEngine/report/models/reportSeverityModel.ts +6 -1
  65. package/src/audit/languageAnalysisEngine/report/models/severityCountModel.ts +4 -0
  66. package/src/audit/languageAnalysisEngine/report/reportingFeature.ts +86 -32
  67. package/src/audit/languageAnalysisEngine/report/utils/reportUtils.ts +87 -32
  68. package/src/audit/languageAnalysisEngine/sendSnapshot.js +69 -20
  69. package/src/audit/save.js +48 -0
  70. package/src/commands/audit/auditConfig.ts +0 -25
  71. package/src/commands/audit/auditController.ts +18 -20
  72. package/src/commands/audit/help.ts +31 -25
  73. package/src/commands/audit/processAudit.ts +3 -6
  74. package/src/commands/audit/saveFile.ts +6 -2
  75. package/src/commands/scan/processScan.js +0 -1
  76. package/src/commands/scan/sca/scaAnalysis.js +84 -30
  77. package/src/common/HTTPClient.js +81 -34
  78. package/src/common/errorHandling.ts +10 -1
  79. package/src/common/versionChecker.ts +24 -5
  80. package/src/constants/constants.js +9 -3
  81. package/src/constants/locales.js +58 -43
  82. package/src/constants.js +21 -14
  83. package/src/index.ts +70 -58
  84. package/src/lambda/analytics.ts +9 -0
  85. package/src/lambda/arn.ts +2 -1
  86. package/src/lambda/lambda.ts +40 -17
  87. package/src/lambda/types.ts +36 -0
  88. package/src/lambda/utils.ts +2 -7
  89. package/src/sbom/generateSbom.ts +2 -2
  90. package/src/scaAnalysis/common/formatMessage.js +48 -1
  91. package/src/scaAnalysis/common/treeUpload.js +4 -6
  92. package/src/scaAnalysis/dotnet/analysis.js +54 -0
  93. package/src/scaAnalysis/dotnet/index.js +11 -0
  94. package/src/scaAnalysis/go/goAnalysis.js +2 -3
  95. package/src/scaAnalysis/go/goReadDepFile.js +1 -3
  96. package/src/scaAnalysis/java/analysis.js +7 -8
  97. package/src/scaAnalysis/java/index.js +2 -2
  98. package/src/scaAnalysis/javascript/analysis.js +126 -0
  99. package/src/scaAnalysis/javascript/index.js +72 -0
  100. package/src/scaAnalysis/php/analysis.js +78 -0
  101. package/src/scaAnalysis/php/index.js +22 -0
  102. package/src/scaAnalysis/python/analysis.js +49 -0
  103. package/src/scaAnalysis/python/index.js +11 -0
  104. package/src/scaAnalysis/ruby/analysis.js +273 -0
  105. package/src/scaAnalysis/ruby/index.js +11 -0
  106. package/src/scan/autoDetection.js +24 -26
  107. package/src/scan/fileUtils.js +60 -20
  108. package/src/scan/formatScanOutput.ts +14 -15
  109. package/src/scan/models/groupedResultsModel.ts +3 -3
  110. package/src/scan/models/resultContentModel.ts +1 -1
  111. package/src/scan/models/scanResultsModel.ts +5 -2
  112. package/src/scan/populateProjectIdAndProjectName.js +3 -1
  113. package/src/scan/scan.ts +1 -0
  114. package/src/scan/scanConfig.js +7 -5
  115. package/src/scan/scanController.js +18 -4
  116. package/src/scan/scanResults.js +10 -0
  117. package/src/utils/commonApi.js +4 -1
  118. package/src/utils/filterProjectPath.js +6 -2
  119. package/src/utils/getConfig.ts +1 -12
  120. package/dist/audit/AnalysisEngine.js +0 -37
  121. package/dist/audit/autodetection/autoDetectLanguage.js +0 -32
  122. package/dist/audit/dotnetAnalysisEngine/index.js +0 -25
  123. package/dist/audit/dotnetAnalysisEngine/parseLockFileContents.js +0 -35
  124. package/dist/audit/dotnetAnalysisEngine/parseProjectFileContents.js +0 -15
  125. package/dist/audit/dotnetAnalysisEngine/readLockFileContents.js +0 -18
  126. package/dist/audit/dotnetAnalysisEngine/readProjectFileContents.js +0 -14
  127. package/dist/audit/dotnetAnalysisEngine/sanitizer.js +0 -9
  128. package/dist/audit/goAnalysisEngine/index.js +0 -17
  129. package/dist/audit/goAnalysisEngine/parseProjectFileContents.js +0 -164
  130. package/dist/audit/goAnalysisEngine/readProjectFileContents.js +0 -21
  131. package/dist/audit/goAnalysisEngine/sanitizer.js +0 -5
  132. package/dist/audit/javaAnalysisEngine/index.js +0 -34
  133. package/dist/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +0 -153
  134. package/dist/audit/javaAnalysisEngine/parseProjectFileContents.js +0 -353
  135. package/dist/audit/javaAnalysisEngine/readProjectFileContents.js +0 -98
  136. package/dist/audit/javaAnalysisEngine/sanitizer.js +0 -5
  137. package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +0 -24
  138. package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +0 -24
  139. package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +0 -35
  140. package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +0 -23
  141. package/dist/audit/languageAnalysisEngine/constants.js +0 -20
  142. package/dist/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +0 -25
  143. package/dist/audit/languageAnalysisEngine/index.js +0 -39
  144. package/dist/audit/languageAnalysisEngine/languageAnalysisFactory.js +0 -87
  145. package/dist/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +0 -150
  146. package/dist/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +0 -40
  147. package/dist/audit/nodeAnalysisEngine/index.js +0 -31
  148. package/dist/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +0 -18
  149. package/dist/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +0 -18
  150. package/dist/audit/nodeAnalysisEngine/readNPMLockFileContents.js +0 -17
  151. package/dist/audit/nodeAnalysisEngine/readProjectFileContents.js +0 -14
  152. package/dist/audit/nodeAnalysisEngine/readYarnLockFileContents.js +0 -24
  153. package/dist/audit/nodeAnalysisEngine/sanitizer.js +0 -9
  154. package/dist/audit/phpAnalysisEngine/index.js +0 -23
  155. package/dist/audit/phpAnalysisEngine/parseLockFileContents.js +0 -52
  156. package/dist/audit/phpAnalysisEngine/readLockFileContents.js +0 -13
  157. package/dist/audit/phpAnalysisEngine/readProjectFileContents.js +0 -16
  158. package/dist/audit/phpAnalysisEngine/sanitizer.js +0 -5
  159. package/dist/audit/pythonAnalysisEngine/index.js +0 -25
  160. package/dist/audit/pythonAnalysisEngine/parsePipfileLockContents.js +0 -17
  161. package/dist/audit/pythonAnalysisEngine/parseProjectFileContents.js +0 -21
  162. package/dist/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +0 -13
  163. package/dist/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +0 -14
  164. package/dist/audit/pythonAnalysisEngine/sanitizer.js +0 -7
  165. package/dist/audit/rubyAnalysisEngine/index.js +0 -25
  166. package/dist/audit/rubyAnalysisEngine/parseGemfileLockContents.js +0 -176
  167. package/dist/audit/rubyAnalysisEngine/parsedGemfile.js +0 -22
  168. package/dist/audit/rubyAnalysisEngine/readGemfileContents.js +0 -14
  169. package/dist/audit/rubyAnalysisEngine/readGemfileLockContents.js +0 -14
  170. package/dist/audit/rubyAnalysisEngine/sanitizer.js +0 -6
  171. package/src/audit/AnalysisEngine.js +0 -103
  172. package/src/audit/autodetection/autoDetectLanguage.ts +0 -40
  173. package/src/audit/dotnetAnalysisEngine/index.js +0 -26
  174. package/src/audit/dotnetAnalysisEngine/parseLockFileContents.js +0 -47
  175. package/src/audit/dotnetAnalysisEngine/parseProjectFileContents.js +0 -29
  176. package/src/audit/dotnetAnalysisEngine/readLockFileContents.js +0 -30
  177. package/src/audit/dotnetAnalysisEngine/readProjectFileContents.js +0 -26
  178. package/src/audit/dotnetAnalysisEngine/sanitizer.js +0 -11
  179. package/src/audit/goAnalysisEngine/index.js +0 -18
  180. package/src/audit/goAnalysisEngine/parseProjectFileContents.js +0 -209
  181. package/src/audit/goAnalysisEngine/readProjectFileContents.js +0 -31
  182. package/src/audit/goAnalysisEngine/sanitizer.js +0 -7
  183. package/src/audit/javaAnalysisEngine/index.js +0 -41
  184. package/src/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +0 -222
  185. package/src/audit/javaAnalysisEngine/parseProjectFileContents.js +0 -420
  186. package/src/audit/javaAnalysisEngine/readProjectFileContents.js +0 -141
  187. package/src/audit/javaAnalysisEngine/sanitizer.js +0 -6
  188. package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +0 -35
  189. package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +0 -41
  190. package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +0 -54
  191. package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +0 -32
  192. package/src/audit/languageAnalysisEngine/constants.js +0 -23
  193. package/src/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +0 -41
  194. package/src/audit/languageAnalysisEngine/index.js +0 -45
  195. package/src/audit/languageAnalysisEngine/languageAnalysisFactory.js +0 -116
  196. package/src/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +0 -249
  197. package/src/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +0 -49
  198. package/src/audit/nodeAnalysisEngine/index.js +0 -35
  199. package/src/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +0 -20
  200. package/src/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +0 -26
  201. package/src/audit/nodeAnalysisEngine/readNPMLockFileContents.js +0 -23
  202. package/src/audit/nodeAnalysisEngine/readProjectFileContents.js +0 -27
  203. package/src/audit/nodeAnalysisEngine/readYarnLockFileContents.js +0 -36
  204. package/src/audit/nodeAnalysisEngine/sanitizer.js +0 -11
  205. package/src/audit/phpAnalysisEngine/index.js +0 -27
  206. package/src/audit/phpAnalysisEngine/parseLockFileContents.js +0 -60
  207. package/src/audit/phpAnalysisEngine/readLockFileContents.js +0 -14
  208. package/src/audit/phpAnalysisEngine/readProjectFileContents.js +0 -25
  209. package/src/audit/phpAnalysisEngine/sanitizer.js +0 -4
  210. package/src/audit/pythonAnalysisEngine/index.js +0 -55
  211. package/src/audit/pythonAnalysisEngine/parsePipfileLockContents.js +0 -23
  212. package/src/audit/pythonAnalysisEngine/parseProjectFileContents.js +0 -33
  213. package/src/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +0 -16
  214. package/src/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +0 -22
  215. package/src/audit/pythonAnalysisEngine/sanitizer.js +0 -9
  216. package/src/audit/rubyAnalysisEngine/index.js +0 -30
  217. package/src/audit/rubyAnalysisEngine/parseGemfileLockContents.js +0 -215
  218. package/src/audit/rubyAnalysisEngine/parsedGemfile.js +0 -39
  219. package/src/audit/rubyAnalysisEngine/readGemfileContents.js +0 -18
  220. package/src/audit/rubyAnalysisEngine/readGemfileLockContents.js +0 -17
  221. package/src/audit/rubyAnalysisEngine/sanitizer.js +0 -8
@@ -1,353 +0,0 @@
1
- "use strict";
2
- const i18n = require('i18n');
3
- let projectType = '';
4
- const StringBuilder = require('string-builder');
5
- let sb = new StringBuilder();
6
- module.exports = exports = ({ language: { projectFilePath }, java }, next, config) => {
7
- const { mvnDependancyTreeOutput } = java;
8
- if (projectFilePath.endsWith('build.gradle') ||
9
- projectFilePath.endsWith('pom.xml')) {
10
- if (projectFilePath.endsWith('build.gradle')) {
11
- projectType = 'Gradle';
12
- }
13
- else {
14
- projectType = 'Maven';
15
- }
16
- try {
17
- java.mavenDependencyTrees = parseGradle(mvnDependancyTreeOutput, config);
18
- next();
19
- }
20
- catch (err) {
21
- next(new Error(i18n.__('javaParseProjectFile') + `${err.message}`));
22
- return;
23
- }
24
- }
25
- else {
26
- next();
27
- }
28
- };
29
- const preParser = shavedOutput => {
30
- let obj = [];
31
- for (let dep in shavedOutput) {
32
- obj.push(shavedOutput[dep]
33
- .replace('+-', '+---')
34
- .replace('[INFO]', '')
35
- .replace('\\-', '\\---')
36
- .replace(':jar:', ':')
37
- .replace(':test', '')
38
- .replace(':compile', '')
39
- .replace(' +', '+')
40
- .replace(' |', '|')
41
- .replace(' \\', '\\')
42
- .replace(':runtime', ''));
43
- }
44
- let depTree = [];
45
- for (let x in obj) {
46
- let nodeLevel = computeRelationToLastElement(obj[x]);
47
- let notLastLevel = obj[x].startsWith('|') ||
48
- obj[x].startsWith('+') ||
49
- obj[x].startsWith('\\');
50
- if (notLastLevel) {
51
- if (nodeLevel === 0) {
52
- depTree.push(obj[x]);
53
- }
54
- else {
55
- let level = computeLevel(nodeLevel);
56
- let validatedLevel = addIndentation(nodeLevel === 2 ? 5 : level, obj[x]);
57
- depTree.push(validatedLevel);
58
- }
59
- }
60
- else {
61
- let level = computeLevel(nodeLevel);
62
- let validatedLevel = addIndentation(nodeLevel === 3 ? 5 : level, obj[x]);
63
- depTree.push(validatedLevel);
64
- }
65
- }
66
- return depTree;
67
- };
68
- const shaveOutput = gradleDependencyTreeOutput => {
69
- let shavedOutput = gradleDependencyTreeOutput.split('\n');
70
- if (projectType === 'Maven') {
71
- shavedOutput = preParser(shavedOutput);
72
- }
73
- let obj = [];
74
- for (let key in shavedOutput) {
75
- if (shavedOutput[key].includes('project :')) {
76
- }
77
- else if (shavedOutput[key].includes('+---') ||
78
- shavedOutput[key].includes('\\---')) {
79
- obj.push(shavedOutput[key]);
80
- }
81
- }
82
- return obj;
83
- };
84
- const computeIndentation = element => {
85
- let hasPlus = element.includes('+');
86
- let hasSlash = element.includes('\\');
87
- if (hasPlus) {
88
- return element.substring(element.indexOf('+'));
89
- }
90
- if (hasSlash) {
91
- return element.substring(element.indexOf('\\'));
92
- }
93
- };
94
- const computeLevel = nodeLevel => {
95
- let num = [5, 8, 11, 14, 17, 20];
96
- for (let z in num) {
97
- if (num[z] === nodeLevel) {
98
- let n = parseInt(z);
99
- return 5 * (n + 2);
100
- }
101
- }
102
- };
103
- const addIndentation = (number, str) => {
104
- str = computeIndentation(str);
105
- sb.clear();
106
- for (let j = 0; j < number; j++) {
107
- sb.append(' ');
108
- }
109
- sb.append(str);
110
- return sb.toString();
111
- };
112
- const computeRelationToLastElement = element => {
113
- let hasPlus = element.includes('+---');
114
- let hasSlash = element.includes('\\---');
115
- if (hasPlus) {
116
- return element.split('+---')[0].length;
117
- }
118
- if (hasSlash) {
119
- return element.split('\\---')[0].length;
120
- }
121
- };
122
- const stripElement = element => {
123
- return element
124
- .replace(/[|]/g, '')
125
- .replace('+---', '')
126
- .replace('\\---', '')
127
- .replace(/[' ']/g, '')
128
- .replace('(c)', '')
129
- .replace('->', '@')
130
- .replace('(*)', '');
131
- };
132
- const checkVersion = element => {
133
- let version = element.split(':');
134
- return version[version.length - 1];
135
- };
136
- const createElement = (element, isRoot) => {
137
- let tree;
138
- let cleanElement = stripElement(element);
139
- let splitGroupName = cleanElement.split(':');
140
- let validateVersion = false;
141
- if (!element.includes('->')) {
142
- validateVersion = true;
143
- }
144
- tree = {
145
- artifactID: splitGroupName[1],
146
- group: splitGroupName[0],
147
- version: validateVersion
148
- ? checkVersion(cleanElement)
149
- : splitGroupName[splitGroupName.length - 1],
150
- scope: 'compile',
151
- type: isRoot ? 'direct' : 'transitive',
152
- edges: {}
153
- };
154
- return tree;
155
- };
156
- const getElementHeader = element => {
157
- let elementHeader = stripElement(element);
158
- elementHeader = elementHeader.replace(':', '/');
159
- elementHeader = elementHeader.replace(':', '@');
160
- return elementHeader;
161
- };
162
- const buildElement = (element, rootElement, parentOfCurrent, tree, isRoot) => {
163
- let childElement = createElement(element, isRoot);
164
- let elementHeader = getElementHeader(element);
165
- let levelsArray = [rootElement, parentOfCurrent];
166
- const treeNode = getNestedObject(tree, levelsArray);
167
- const rootNode = getNestedObject(tree, [rootElement]);
168
- if (!rootNode.hasOwnProperty(elementHeader)) {
169
- tree[rootElement][elementHeader] = childElement;
170
- }
171
- treeNode.edges[elementHeader] = elementHeader;
172
- };
173
- const hasChildren = (nextNodeLevel, nodeLevel) => {
174
- if (nextNodeLevel > nodeLevel) {
175
- return true;
176
- }
177
- };
178
- const lastChild = (nextNodeLevel, nodeLevel) => {
179
- if (nextNodeLevel < nodeLevel) {
180
- return true;
181
- }
182
- };
183
- const calculateLevels = (nextNodeLevel, nodeLevel) => {
184
- return (nodeLevel - nextNodeLevel) / 5;
185
- };
186
- const buildTree = shavedOutput => {
187
- let tree = {};
188
- let rootElement;
189
- let levelNodes = [];
190
- shavedOutput.forEach((element, index) => {
191
- if (index === 0) {
192
- let cleanElement = stripElement(element);
193
- let elementHeader = getElementHeader(cleanElement);
194
- let splitElement = element.split(' ');
195
- let splitGroupName = splitElement[1].split(':');
196
- let validateVersion = false;
197
- if (!element.includes('->')) {
198
- validateVersion = true;
199
- }
200
- tree[splitGroupName[0]] = {};
201
- tree[splitGroupName[0]][elementHeader] = {
202
- artifactID: splitGroupName[1],
203
- group: splitGroupName[0],
204
- version: validateVersion
205
- ? checkVersion(cleanElement)
206
- : splitElement[splitElement.length - 1],
207
- scope: 'compile',
208
- type: 'direct',
209
- edges: {}
210
- };
211
- rootElement = splitGroupName[0];
212
- levelNodes.push(elementHeader);
213
- }
214
- if (shavedOutput.length - 1 === index) {
215
- const parentOfCurrent = levelNodes[levelNodes.length - 1];
216
- let nodeLevel = computeRelationToLastElement(element);
217
- let validateVersion = false;
218
- if (!element.includes('->')) {
219
- validateVersion = true;
220
- }
221
- if (nodeLevel === 0) {
222
- let cleanElement = stripElement(element);
223
- let elementHeader = getElementHeader(cleanElement);
224
- let splitElement = element.split(' ');
225
- let splitGroupName = splitElement[1].split(':');
226
- tree[rootElement][elementHeader] = {
227
- artifactID: splitGroupName[1],
228
- group: splitGroupName[0],
229
- version: validateVersion
230
- ? checkVersion(cleanElement)
231
- : splitElement[splitElement.length - 1],
232
- scope: 'compile',
233
- type: 'direct',
234
- edges: {}
235
- };
236
- }
237
- else {
238
- buildElement(element, rootElement, parentOfCurrent, tree);
239
- }
240
- }
241
- if (index >= 1 && index < shavedOutput.length - 1) {
242
- let nodeLevel = computeRelationToLastElement(element);
243
- let nextNodeLevel = computeRelationToLastElement(shavedOutput[index + 1]);
244
- const parentOfCurrent = levelNodes[levelNodes.length - 1];
245
- let isRoot = false;
246
- if (nodeLevel === 0) {
247
- isRoot = true;
248
- }
249
- if (isRoot) {
250
- let cleanElement = stripElement(element);
251
- let elementHeader = getElementHeader(cleanElement);
252
- let splitElement = element.split(' ');
253
- let splitGroupName = splitElement[1].split(':');
254
- let validateVersion = false;
255
- if (!element.includes('->')) {
256
- validateVersion = true;
257
- }
258
- tree[rootElement][elementHeader] = {
259
- artifactID: splitGroupName[1],
260
- group: splitGroupName[0],
261
- version: validateVersion
262
- ? checkVersion(cleanElement)
263
- : splitElement[splitElement.length - 1],
264
- scope: 'compile',
265
- type: 'direct',
266
- edges: {}
267
- };
268
- levelNodes.push(elementHeader);
269
- return;
270
- }
271
- let elementHeader = getElementHeader(element);
272
- buildElement(element, rootElement, parentOfCurrent, tree, isRoot);
273
- if (hasChildren(nextNodeLevel, nodeLevel)) {
274
- buildElement(element, rootElement, parentOfCurrent, tree, isRoot);
275
- levelNodes.push(elementHeader);
276
- }
277
- if (lastChild(nextNodeLevel, nodeLevel)) {
278
- let levelDifference = calculateLevels(nextNodeLevel, nodeLevel);
279
- if (levelDifference === 0) {
280
- levelNodes.pop();
281
- }
282
- else {
283
- let i;
284
- for (i = 0; i < levelDifference; i++) {
285
- levelNodes.pop();
286
- }
287
- }
288
- }
289
- }
290
- });
291
- return tree;
292
- };
293
- const getNestedObject = (nestedObj, pathArr) => {
294
- return pathArr.reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), nestedObj);
295
- };
296
- const parseSubProject = shavedOutput => {
297
- let obj = [];
298
- for (let key in shavedOutput) {
299
- if (!shavedOutput[key].includes('project')) {
300
- obj.push(shavedOutput[key]);
301
- }
302
- }
303
- return obj;
304
- };
305
- const validateIndentation = shavedOutput => {
306
- let validatedTree = [];
307
- shavedOutput.forEach((element, index) => {
308
- let nextNodeLevel;
309
- let nodeLevel = computeRelationToLastElement(element);
310
- if (shavedOutput[index + 1] !== undefined) {
311
- nextNodeLevel = computeRelationToLastElement(shavedOutput[index + 1]);
312
- }
313
- if (index === 0) {
314
- validatedTree.push(shavedOutput[index]);
315
- validatedTree.push(shavedOutput[index + 1]);
316
- }
317
- else if (nextNodeLevel > nodeLevel + 5) {
318
- return;
319
- }
320
- else {
321
- validatedTree.push(shavedOutput[index + 1]);
322
- }
323
- });
324
- validatedTree.pop();
325
- return validatedTree;
326
- };
327
- const parseGradle = (gradleDependencyTreeOutput, config) => {
328
- let shavedOutput = shaveOutput(gradleDependencyTreeOutput);
329
- if (config.subProject) {
330
- let subProject = parseSubProject(shavedOutput);
331
- let validatedOutput = validateIndentation(subProject);
332
- return buildTree(validatedOutput);
333
- }
334
- else {
335
- let validatedOutput = validateIndentation(shavedOutput);
336
- return buildTree(validatedOutput);
337
- }
338
- };
339
- exports.shaveOutput = shaveOutput;
340
- exports.validateIndentation = validateIndentation;
341
- exports.stripElement = stripElement;
342
- exports.getElementHeader = getElementHeader;
343
- exports.createElement = createElement;
344
- exports.parseGradle = parseGradle;
345
- exports.computeRelationToLastElement = computeRelationToLastElement;
346
- exports.hasChildren = hasChildren;
347
- exports.lastChild = lastChild;
348
- exports.calculateLevels = calculateLevels;
349
- exports.buildElement = buildElement;
350
- exports.checkVersion = checkVersion;
351
- exports.computeIndentation = computeIndentation;
352
- exports.computeLevel = computeLevel;
353
- exports.addIndentation = addIndentation;
@@ -1,98 +0,0 @@
1
- "use strict";
2
- const child_process = require('child_process');
3
- const fs = require('fs');
4
- const i18n = require('i18n');
5
- const path = require('path');
6
- module.exports = exports = ({ language: { projectFilePath }, java }, next, config) => {
7
- let cmdStdout;
8
- let cwd;
9
- let timeout;
10
- let javaProject = '';
11
- let mvn_settings = '';
12
- const maven = 'Maven';
13
- const gradle = 'Gradle';
14
- try {
15
- if (projectFilePath.includes('pom.xml')) {
16
- javaProject = maven;
17
- cwd = projectFilePath.replace('pom.xml', '');
18
- }
19
- else if (projectFilePath.includes('build.gradle')) {
20
- javaProject = gradle;
21
- cwd = projectFilePath.replace('build.gradle', '');
22
- }
23
- timeout = 960000;
24
- if (javaProject === maven) {
25
- if (config.mavenSettingsPath) {
26
- mvn_settings = ' -s ' + config.mavenSettingsPath;
27
- }
28
- if (config.betaUnifiedJavaParser) {
29
- cmdStdout = child_process.execSync('mvn dependency:tree -B' + mvn_settings, {
30
- cwd,
31
- timeout
32
- });
33
- }
34
- else {
35
- cmdStdout = child_process.execSync('mvn dependency:tree -DoutputType=dot -B' + mvn_settings, {
36
- cwd,
37
- timeout
38
- });
39
- }
40
- java.mvnDependancyTreeOutput = cmdStdout.toString();
41
- }
42
- else if (javaProject === gradle) {
43
- if (config.subProject) {
44
- cmdStdout = child_process.execSync('.' +
45
- path.sep +
46
- 'gradlew :' +
47
- config.subProject +
48
- ':dependencies --configuration runtimeClasspath', {
49
- cwd,
50
- timeout
51
- });
52
- }
53
- else {
54
- cmdStdout = child_process.execSync('.' +
55
- path.sep +
56
- 'gradlew dependencies --configuration runtimeClasspath', {
57
- cwd,
58
- timeout
59
- });
60
- }
61
- if (cmdStdout
62
- .toString()
63
- .includes("runtimeClasspath - Runtime classpath of source set 'main'.\n" +
64
- 'No dependencies')) {
65
- cmdStdout = child_process.execSync('.' + path.sep + 'gradlew dependencies', {
66
- cwd,
67
- timeout
68
- });
69
- }
70
- java.mvnDependancyTreeOutput = cmdStdout.toString();
71
- }
72
- next();
73
- }
74
- catch (err) {
75
- if (javaProject === maven) {
76
- try {
77
- child_process.execSync('mvn --version', {
78
- cwd,
79
- timeout
80
- });
81
- next(new Error(i18n.__('mavenDependencyTreeNonZero', cwd, `${err.message}`)));
82
- }
83
- catch (mvnErr) {
84
- next(new Error(i18n.__('mavenNotInstalledError', cwd, `${mvnErr.message}`)));
85
- }
86
- }
87
- else if (javaProject === gradle) {
88
- if (fs.existsSync(cwd + 'gradlew') ||
89
- fs.existsSync(cwd + 'gradlew.bat')) {
90
- next(new Error(i18n.__('gradleDependencyTreeNonZero', cwd, `${err.message}`)));
91
- }
92
- else {
93
- next(new Error(i18n.__('gradleWrapperUnavailable', cwd, `${err.message}`)));
94
- }
95
- }
96
- return;
97
- }
98
- };
@@ -1,5 +0,0 @@
1
- "use strict";
2
- module.exports = exports = ({ java }, next) => {
3
- delete java.mvnDependancyTreeOutput;
4
- next();
5
- };
@@ -1,24 +0,0 @@
1
- "use strict";
2
- const i18n = require('i18n');
3
- module.exports = exports = (analysis, next) => {
4
- const { languageAnalysis } = analysis;
5
- try {
6
- checkForMultipleIdentifiedLanguages(languageAnalysis.identifiedLanguages);
7
- }
8
- catch (err) {
9
- next(err);
10
- return;
11
- }
12
- next();
13
- };
14
- const checkForMultipleIdentifiedLanguages = identifiedLanguages => {
15
- if (Object.keys(identifiedLanguages).length > 1) {
16
- let errMsg = i18n.__('languageAnalysisMultipleLanguages1');
17
- for (const [language, { projectFilenames }] of Object.entries(identifiedLanguages)) {
18
- errMsg += `\t${language}: ${projectFilenames.join(', ')}\n`;
19
- }
20
- errMsg += i18n.__('languageAnalysisMultipleLanguages2', "'project_path'");
21
- throw new Error(errMsg);
22
- }
23
- };
24
- exports.checkForMultipleIdentifiedLanguages = checkForMultipleIdentifiedLanguages;
@@ -1,24 +0,0 @@
1
- "use strict";
2
- const i18n = require('i18n');
3
- module.exports = exports = (analysis, next) => {
4
- const { languageAnalysis } = analysis;
5
- try {
6
- checkForMultipleIdentifiedProjectFiles(languageAnalysis.identifiedLanguages);
7
- }
8
- catch (err) {
9
- next(err);
10
- return;
11
- }
12
- next();
13
- };
14
- const checkForMultipleIdentifiedProjectFiles = identifiedLanguages => {
15
- if (Object.keys(identifiedLanguages).length == 1) {
16
- let { projectFilenames } = Object.values(identifiedLanguages)[0];
17
- if (projectFilenames.length > 1) {
18
- const [language] = Object.keys(identifiedLanguages);
19
- projectFilenames = projectFilenames.join(', ');
20
- throw new Error(i18n.__('languageAnalysisProjectFiles', language, projectFilenames, "'project_path'"));
21
- }
22
- }
23
- };
24
- exports.checkForMultipleIdentifiedProjectFiles = checkForMultipleIdentifiedProjectFiles;
@@ -1,35 +0,0 @@
1
- "use strict";
2
- const i18n = require('i18n');
3
- module.exports = exports = (analysis, next) => {
4
- try {
5
- const { languageAnalysis } = analysis;
6
- if (Object.getOwnPropertyNames(languageAnalysis.identifiedLanguages)[0] ===
7
- 'JAVA' ||
8
- Object.getOwnPropertyNames(languageAnalysis.identifiedLanguages)[0] ===
9
- 'GO') {
10
- next();
11
- return;
12
- }
13
- checkForLockFile(languageAnalysis.identifiedLanguages);
14
- }
15
- catch (err) {
16
- next(err);
17
- return;
18
- }
19
- next();
20
- return;
21
- };
22
- const checkForLockFile = identifiedLanguages => {
23
- if (Object.keys(identifiedLanguages).length == 1) {
24
- let { lockFilenames } = Object.values(identifiedLanguages)[0];
25
- if (lockFilenames.length == 0) {
26
- const [language] = Object.keys(identifiedLanguages);
27
- throw new Error(i18n.__('languageAnalysisHasNoLockFile', language));
28
- }
29
- if (lockFilenames.length > 1) {
30
- const [language] = Object.keys(identifiedLanguages);
31
- throw new Error(i18n.__('languageAnalysisHasMultipleLockFiles', language, String(lockFilenames)));
32
- }
33
- }
34
- };
35
- exports.checkForLockFile = checkForLockFile;
@@ -1,23 +0,0 @@
1
- "use strict";
2
- const i18n = require('i18n');
3
- module.exports = exports = (analysis, next) => {
4
- const { languageAnalysis } = analysis;
5
- try {
6
- checkIdentifiedLanguageHasProjectFile(languageAnalysis.identifiedLanguages);
7
- }
8
- catch (err) {
9
- next(err);
10
- return;
11
- }
12
- next();
13
- };
14
- const checkIdentifiedLanguageHasProjectFile = identifiedLanguages => {
15
- if (Object.keys(identifiedLanguages).length == 1) {
16
- let { projectFilenames } = Object.values(identifiedLanguages)[0];
17
- if (projectFilenames.length == 0) {
18
- const [language] = Object.keys(identifiedLanguages);
19
- throw new Error(i18n.__('languageAnalysisProjectFileError', language));
20
- }
21
- }
22
- };
23
- exports.checkIdentifiedLanguageHasProjectFile = checkIdentifiedLanguageHasProjectFile;
@@ -1,20 +0,0 @@
1
- "use strict";
2
- const NODE = 'NODE';
3
- const JAVASCRIPT = 'JAVASCRIPT';
4
- const DOTNET = 'DOTNET';
5
- const JAVA = 'JAVA';
6
- const RUBY = 'RUBY';
7
- const PYTHON = 'PYTHON';
8
- const GO = 'GO';
9
- const PHP = 'PHP';
10
- const LOW = 'LOW';
11
- const MEDIUM = 'MEDIUM';
12
- const HIGH = 'HIGH';
13
- const CRITICAL = 'CRITICAL';
14
- module.exports = {
15
- supportedLanguages: { NODE, DOTNET, JAVA, RUBY, PYTHON, GO, PHP, JAVASCRIPT },
16
- LOW: LOW,
17
- MEDIUM: MEDIUM,
18
- HIGH: HIGH,
19
- CRITICAL: CRITICAL
20
- };
@@ -1,25 +0,0 @@
1
- "use strict";
2
- const path = require('path');
3
- module.exports = exports = (analysis, next) => {
4
- const { projectPath, languageAnalysis } = analysis;
5
- languageAnalysis.identifiedLanguageInfo = getIdentifiedLanguageInfo(projectPath, languageAnalysis.identifiedLanguages);
6
- next();
7
- };
8
- const getIdentifiedLanguageInfo = (projectPath, identifiedLanguages) => {
9
- const [language] = Object.keys(identifiedLanguages);
10
- const { projectFilenames: [projectFilename], lockFilenames: [lockFilename] } = Object.values(identifiedLanguages)[0];
11
- let identifiedLanguageInfo = {
12
- language,
13
- projectFilename,
14
- projectFilePath: path.join(projectPath, projectFilename)
15
- };
16
- if (lockFilename) {
17
- identifiedLanguageInfo = {
18
- ...identifiedLanguageInfo,
19
- lockFilename,
20
- lockFilePath: path.join(projectPath, lockFilename)
21
- };
22
- }
23
- return identifiedLanguageInfo;
24
- };
25
- exports.getIdentifiedLanguageInfo = getIdentifiedLanguageInfo;
@@ -1,39 +0,0 @@
1
- "use strict";
2
- const AnalysisEngine = require('./../AnalysisEngine');
3
- const i18n = require('i18n');
4
- const getProjectRootFilenames = require('./getProjectRootFilenames');
5
- const reduceIdentifiedLanguages = require('./reduceIdentifiedLanguages');
6
- const checkForMultipleIdentifiedLanguages = require('./checkForMultipleIdentifiedLanguages');
7
- const checkForMultipleIdentifiedProjectFiles = require('./checkForMultipleIdentifiedProjectFiles');
8
- const checkIdentifiedLanguageHasProjectFile = require('./checkIdentifiedLanguageHasProjectFile');
9
- const checkIdentifiedLanguageHasLockFile = require('./checkIdentifiedLanguageHasLockFile');
10
- const getIdentifiedLanguageInfo = require('./getIdentifiedLanguageInfo');
11
- const { libraryAnalysisError } = require('../../common/errorHandling');
12
- module.exports = exports = (projectPath, callback, appId, config) => {
13
- const ae = new AnalysisEngine({
14
- projectPath,
15
- appId,
16
- languageAnalysis: { appId: appId },
17
- config
18
- });
19
- ae.use([
20
- getProjectRootFilenames,
21
- reduceIdentifiedLanguages,
22
- checkForMultipleIdentifiedLanguages,
23
- checkForMultipleIdentifiedProjectFiles,
24
- checkIdentifiedLanguageHasProjectFile,
25
- checkIdentifiedLanguageHasLockFile,
26
- getIdentifiedLanguageInfo
27
- ]);
28
- ae.analyze((err, analysis) => {
29
- if (err) {
30
- console.log('*******************' +
31
- i18n.__('languageAnalysisFailureMessage') +
32
- '****************');
33
- console.error(`${err.message}`);
34
- libraryAnalysisError();
35
- process.exit(1);
36
- }
37
- callback(null, analysis);
38
- });
39
- };