@contrast/contrast 1.0.8 → 1.0.11

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 (217) hide show
  1. package/README.md +2 -2
  2. package/dist/audit/languageAnalysisEngine/getProjectRootFilenames.js +16 -25
  3. package/dist/audit/languageAnalysisEngine/report/commonReportingFunctions.js +103 -57
  4. package/dist/audit/languageAnalysisEngine/report/models/reportGuidanceModel.js +6 -0
  5. package/dist/audit/languageAnalysisEngine/report/models/reportOutputModel.js +3 -3
  6. package/dist/audit/languageAnalysisEngine/report/models/severityCountModel.js +1 -0
  7. package/dist/audit/languageAnalysisEngine/report/reportingFeature.js +68 -17
  8. package/dist/audit/languageAnalysisEngine/report/utils/reportUtils.js +39 -7
  9. package/dist/audit/languageAnalysisEngine/sendSnapshot.js +6 -30
  10. package/dist/audit/save.js +21 -13
  11. package/dist/commands/audit/auditConfig.js +3 -19
  12. package/dist/commands/audit/auditController.js +1 -10
  13. package/dist/commands/audit/help.js +7 -24
  14. package/dist/commands/audit/processAudit.js +5 -9
  15. package/dist/commands/audit/saveFile.js +2 -2
  16. package/dist/commands/auth/auth.js +1 -1
  17. package/dist/commands/config/config.js +2 -2
  18. package/dist/commands/scan/processScan.js +11 -4
  19. package/dist/commands/scan/sca/scaAnalysis.js +37 -13
  20. package/dist/common/HTTPClient.js +17 -8
  21. package/dist/common/errorHandling.js +2 -2
  22. package/dist/common/fail.js +66 -0
  23. package/dist/common/versionChecker.js +1 -1
  24. package/dist/constants/constants.js +7 -2
  25. package/dist/constants/locales.js +40 -38
  26. package/dist/constants.js +62 -12
  27. package/dist/index.js +57 -45
  28. package/dist/lambda/lambda.js +5 -2
  29. package/dist/sbom/generateSbom.js +2 -2
  30. package/dist/scaAnalysis/common/formatMessage.js +7 -1
  31. package/dist/scaAnalysis/common/scaParserForGoAndJava.js +32 -0
  32. package/dist/scaAnalysis/common/treeUpload.js +24 -10
  33. package/dist/scaAnalysis/dotnet/analysis.js +55 -0
  34. package/dist/scaAnalysis/dotnet/index.js +10 -0
  35. package/dist/scaAnalysis/go/goAnalysis.js +8 -2
  36. package/dist/scaAnalysis/java/analysis.js +10 -6
  37. package/dist/scaAnalysis/java/index.js +7 -1
  38. package/dist/scaAnalysis/java/javaBuildDepsParser.js +19 -3
  39. package/dist/scaAnalysis/javascript/analysis.js +4 -7
  40. package/dist/scaAnalysis/javascript/index.js +16 -4
  41. package/dist/scaAnalysis/php/analysis.js +14 -33
  42. package/dist/scaAnalysis/php/index.js +11 -4
  43. package/dist/scaAnalysis/python/analysis.js +43 -5
  44. package/dist/scaAnalysis/python/index.js +7 -2
  45. package/dist/scaAnalysis/ruby/analysis.js +16 -14
  46. package/dist/scan/autoDetection.js +13 -24
  47. package/dist/scan/fileUtils.js +31 -12
  48. package/dist/scan/formatScanOutput.js +9 -8
  49. package/dist/scan/populateProjectIdAndProjectName.js +5 -0
  50. package/dist/scan/scan.js +4 -0
  51. package/dist/scan/scanConfig.js +5 -5
  52. package/dist/scan/scanResults.js +39 -3
  53. package/dist/telemetry/telemetry.js +137 -0
  54. package/dist/utils/commonApi.js +1 -1
  55. package/dist/utils/getConfig.js +3 -8
  56. package/dist/utils/parsedCLIOptions.js +3 -1
  57. package/dist/utils/requestUtils.js +7 -1
  58. package/package.json +2 -3
  59. package/src/audit/languageAnalysisEngine/getProjectRootFilenames.js +21 -57
  60. package/src/audit/languageAnalysisEngine/report/commonReportingFunctions.ts +155 -77
  61. package/src/audit/languageAnalysisEngine/report/models/reportGuidanceModel.ts +5 -0
  62. package/src/audit/languageAnalysisEngine/report/models/reportOutputModel.ts +5 -5
  63. package/src/audit/languageAnalysisEngine/report/models/severityCountModel.ts +2 -0
  64. package/src/audit/languageAnalysisEngine/report/reportingFeature.ts +56 -27
  65. package/src/audit/languageAnalysisEngine/report/utils/reportUtils.ts +45 -6
  66. package/src/audit/languageAnalysisEngine/sendSnapshot.js +6 -32
  67. package/src/audit/save.js +32 -16
  68. package/src/commands/audit/auditConfig.ts +10 -28
  69. package/src/commands/audit/auditController.ts +0 -11
  70. package/src/commands/audit/help.ts +7 -24
  71. package/src/commands/audit/processAudit.ts +16 -8
  72. package/src/commands/audit/saveFile.ts +2 -2
  73. package/src/commands/auth/auth.js +3 -1
  74. package/src/commands/config/config.js +4 -2
  75. package/src/commands/scan/processScan.js +18 -5
  76. package/src/commands/scan/sca/scaAnalysis.js +50 -18
  77. package/src/common/HTTPClient.js +23 -9
  78. package/src/common/errorHandling.ts +2 -3
  79. package/src/common/fail.js +75 -0
  80. package/src/common/versionChecker.ts +1 -1
  81. package/src/constants/constants.js +9 -3
  82. package/src/constants/locales.js +70 -45
  83. package/src/constants.js +67 -13
  84. package/src/index.ts +91 -66
  85. package/src/lambda/lambda.ts +5 -2
  86. package/src/lambda/types.ts +1 -0
  87. package/src/sbom/generateSbom.ts +2 -2
  88. package/src/scaAnalysis/common/formatMessage.js +8 -1
  89. package/src/scaAnalysis/common/scaParserForGoAndJava.js +41 -0
  90. package/src/scaAnalysis/common/treeUpload.js +25 -11
  91. package/src/scaAnalysis/dotnet/analysis.js +72 -0
  92. package/src/scaAnalysis/dotnet/index.js +11 -0
  93. package/src/scaAnalysis/go/goAnalysis.js +9 -2
  94. package/src/scaAnalysis/java/analysis.js +11 -6
  95. package/src/scaAnalysis/java/index.js +9 -1
  96. package/src/scaAnalysis/java/javaBuildDepsParser.js +25 -6
  97. package/src/scaAnalysis/javascript/analysis.js +6 -7
  98. package/src/scaAnalysis/javascript/index.js +25 -6
  99. package/src/scaAnalysis/php/analysis.js +15 -35
  100. package/src/scaAnalysis/php/index.js +15 -4
  101. package/src/scaAnalysis/python/analysis.js +49 -5
  102. package/src/scaAnalysis/python/index.js +7 -2
  103. package/src/scaAnalysis/ruby/analysis.js +18 -15
  104. package/src/scan/autoDetection.js +14 -27
  105. package/src/scan/fileUtils.js +33 -12
  106. package/src/scan/formatScanOutput.ts +10 -8
  107. package/src/scan/populateProjectIdAndProjectName.js +5 -1
  108. package/src/scan/scan.ts +4 -0
  109. package/src/scan/scanConfig.js +7 -7
  110. package/src/scan/scanResults.js +46 -3
  111. package/src/telemetry/telemetry.ts +154 -0
  112. package/src/utils/commonApi.js +1 -1
  113. package/src/utils/getConfig.ts +5 -18
  114. package/src/utils/parsedCLIOptions.js +14 -1
  115. package/src/utils/requestUtils.js +8 -1
  116. package/dist/audit/AnalysisEngine.js +0 -37
  117. package/dist/audit/autodetection/autoDetectLanguage.js +0 -32
  118. package/dist/audit/dotnetAnalysisEngine/index.js +0 -25
  119. package/dist/audit/dotnetAnalysisEngine/parseLockFileContents.js +0 -35
  120. package/dist/audit/dotnetAnalysisEngine/parseProjectFileContents.js +0 -15
  121. package/dist/audit/dotnetAnalysisEngine/readLockFileContents.js +0 -18
  122. package/dist/audit/dotnetAnalysisEngine/readProjectFileContents.js +0 -14
  123. package/dist/audit/dotnetAnalysisEngine/sanitizer.js +0 -9
  124. package/dist/audit/goAnalysisEngine/index.js +0 -17
  125. package/dist/audit/goAnalysisEngine/parseProjectFileContents.js +0 -164
  126. package/dist/audit/goAnalysisEngine/readProjectFileContents.js +0 -21
  127. package/dist/audit/goAnalysisEngine/sanitizer.js +0 -5
  128. package/dist/audit/javaAnalysisEngine/index.js +0 -34
  129. package/dist/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +0 -155
  130. package/dist/audit/javaAnalysisEngine/parseProjectFileContents.js +0 -353
  131. package/dist/audit/javaAnalysisEngine/readProjectFileContents.js +0 -98
  132. package/dist/audit/javaAnalysisEngine/sanitizer.js +0 -5
  133. package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +0 -25
  134. package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +0 -25
  135. package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +0 -35
  136. package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +0 -24
  137. package/dist/audit/languageAnalysisEngine/constants.js +0 -20
  138. package/dist/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +0 -25
  139. package/dist/audit/languageAnalysisEngine/index.js +0 -39
  140. package/dist/audit/languageAnalysisEngine/languageAnalysisFactory.js +0 -66
  141. package/dist/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +0 -166
  142. package/dist/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +0 -40
  143. package/dist/audit/nodeAnalysisEngine/index.js +0 -31
  144. package/dist/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +0 -18
  145. package/dist/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +0 -18
  146. package/dist/audit/nodeAnalysisEngine/readNPMLockFileContents.js +0 -17
  147. package/dist/audit/nodeAnalysisEngine/readProjectFileContents.js +0 -14
  148. package/dist/audit/nodeAnalysisEngine/readYarnLockFileContents.js +0 -24
  149. package/dist/audit/nodeAnalysisEngine/sanitizer.js +0 -9
  150. package/dist/audit/phpAnalysisEngine/index.js +0 -23
  151. package/dist/audit/phpAnalysisEngine/parseLockFileContents.js +0 -52
  152. package/dist/audit/phpAnalysisEngine/readLockFileContents.js +0 -13
  153. package/dist/audit/phpAnalysisEngine/readProjectFileContents.js +0 -16
  154. package/dist/audit/phpAnalysisEngine/sanitizer.js +0 -5
  155. package/dist/audit/pythonAnalysisEngine/index.js +0 -25
  156. package/dist/audit/pythonAnalysisEngine/parsePipfileLockContents.js +0 -17
  157. package/dist/audit/pythonAnalysisEngine/parseProjectFileContents.js +0 -21
  158. package/dist/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +0 -13
  159. package/dist/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +0 -14
  160. package/dist/audit/pythonAnalysisEngine/sanitizer.js +0 -7
  161. package/dist/audit/rubyAnalysisEngine/index.js +0 -25
  162. package/dist/audit/rubyAnalysisEngine/parseGemfileLockContents.js +0 -176
  163. package/dist/audit/rubyAnalysisEngine/parsedGemfile.js +0 -22
  164. package/dist/audit/rubyAnalysisEngine/readGemfileContents.js +0 -14
  165. package/dist/audit/rubyAnalysisEngine/readGemfileLockContents.js +0 -14
  166. package/dist/audit/rubyAnalysisEngine/sanitizer.js +0 -6
  167. package/src/audit/AnalysisEngine.js +0 -103
  168. package/src/audit/autodetection/autoDetectLanguage.ts +0 -40
  169. package/src/audit/dotnetAnalysisEngine/index.js +0 -26
  170. package/src/audit/dotnetAnalysisEngine/parseLockFileContents.js +0 -47
  171. package/src/audit/dotnetAnalysisEngine/parseProjectFileContents.js +0 -29
  172. package/src/audit/dotnetAnalysisEngine/readLockFileContents.js +0 -30
  173. package/src/audit/dotnetAnalysisEngine/readProjectFileContents.js +0 -26
  174. package/src/audit/dotnetAnalysisEngine/sanitizer.js +0 -11
  175. package/src/audit/goAnalysisEngine/index.js +0 -18
  176. package/src/audit/goAnalysisEngine/parseProjectFileContents.js +0 -209
  177. package/src/audit/goAnalysisEngine/readProjectFileContents.js +0 -31
  178. package/src/audit/goAnalysisEngine/sanitizer.js +0 -7
  179. package/src/audit/javaAnalysisEngine/index.js +0 -41
  180. package/src/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +0 -225
  181. package/src/audit/javaAnalysisEngine/parseProjectFileContents.js +0 -420
  182. package/src/audit/javaAnalysisEngine/readProjectFileContents.js +0 -141
  183. package/src/audit/javaAnalysisEngine/sanitizer.js +0 -6
  184. package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +0 -36
  185. package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +0 -42
  186. package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +0 -54
  187. package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +0 -33
  188. package/src/audit/languageAnalysisEngine/constants.js +0 -23
  189. package/src/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +0 -41
  190. package/src/audit/languageAnalysisEngine/index.js +0 -45
  191. package/src/audit/languageAnalysisEngine/languageAnalysisFactory.js +0 -96
  192. package/src/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +0 -251
  193. package/src/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +0 -49
  194. package/src/audit/nodeAnalysisEngine/index.js +0 -35
  195. package/src/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +0 -20
  196. package/src/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +0 -26
  197. package/src/audit/nodeAnalysisEngine/readNPMLockFileContents.js +0 -23
  198. package/src/audit/nodeAnalysisEngine/readProjectFileContents.js +0 -27
  199. package/src/audit/nodeAnalysisEngine/readYarnLockFileContents.js +0 -36
  200. package/src/audit/nodeAnalysisEngine/sanitizer.js +0 -11
  201. package/src/audit/phpAnalysisEngine/index.js +0 -27
  202. package/src/audit/phpAnalysisEngine/parseLockFileContents.js +0 -60
  203. package/src/audit/phpAnalysisEngine/readLockFileContents.js +0 -14
  204. package/src/audit/phpAnalysisEngine/readProjectFileContents.js +0 -25
  205. package/src/audit/phpAnalysisEngine/sanitizer.js +0 -4
  206. package/src/audit/pythonAnalysisEngine/index.js +0 -55
  207. package/src/audit/pythonAnalysisEngine/parsePipfileLockContents.js +0 -23
  208. package/src/audit/pythonAnalysisEngine/parseProjectFileContents.js +0 -33
  209. package/src/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +0 -16
  210. package/src/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +0 -22
  211. package/src/audit/pythonAnalysisEngine/sanitizer.js +0 -9
  212. package/src/audit/rubyAnalysisEngine/index.js +0 -30
  213. package/src/audit/rubyAnalysisEngine/parseGemfileLockContents.js +0 -215
  214. package/src/audit/rubyAnalysisEngine/parsedGemfile.js +0 -39
  215. package/src/audit/rubyAnalysisEngine/readGemfileContents.js +0 -18
  216. package/src/audit/rubyAnalysisEngine/readGemfileLockContents.js +0 -17
  217. package/src/audit/rubyAnalysisEngine/sanitizer.js +0 -8
@@ -1,66 +0,0 @@
1
- "use strict";
2
- const { supportedLanguages: { DOTNET, NODE, JAVA, RUBY, PYTHON, GO, PHP } } = require('../languageAnalysisEngine/constants');
3
- const i18n = require('i18n');
4
- const dotnetAE = require('../dotnetAnalysisEngine');
5
- const nodeAE = require('../nodeAnalysisEngine');
6
- const javaAE = require('../javaAnalysisEngine');
7
- const rubyAE = require('../rubyAnalysisEngine');
8
- const pythonAE = require('../pythonAnalysisEngine');
9
- const phpAE = require('../phpAnalysisEngine');
10
- const goAE = require('../goAnalysisEngine');
11
- const { vulnerabilityReport } = require('./report/reportingFeature');
12
- const { newSendSnapShot } = require('../languageAnalysisEngine/sendSnapshot');
13
- const { returnOra, startSpinner, succeedSpinner } = require('../../utils/oraWrapper');
14
- const { pollForSnapshotCompletition } = require('./sendSnapshot');
15
- const auditSave = require('../save');
16
- module.exports = exports = (err, analysis) => {
17
- const { identifiedLanguageInfo } = analysis.languageAnalysis;
18
- const catalogueAppId = analysis.languageAnalysis.appId;
19
- if (err) {
20
- console.error(err);
21
- return;
22
- }
23
- const langCallback = async (err, analysis) => {
24
- const config = analysis.config;
25
- if (err) {
26
- console.log();
27
- console.log('***********' +
28
- i18n.__('languageAnalysisFactoryFailureHeader') +
29
- '****************');
30
- console.log(identifiedLanguageInfo.language);
31
- console.log();
32
- console.error(`${identifiedLanguageInfo.language}` +
33
- i18n.__('languageAnalysisFailure') +
34
- err);
35
- return process.exit(5);
36
- }
37
- const reportSpinner = returnOra(i18n.__('auditSCAAnalysisBegins'));
38
- startSpinner(reportSpinner);
39
- const snapshotResponse = await newSendSnapShot(analysis, catalogueAppId);
40
- await pollForSnapshotCompletition(analysis.config, snapshotResponse.id, reportSpinner);
41
- succeedSpinner(reportSpinner, i18n.__('auditSCAAnalysisComplete'));
42
- await vulnerabilityReport(analysis, catalogueAppId, snapshotResponse.id);
43
- await auditSave.auditSave(config);
44
- };
45
- if (identifiedLanguageInfo.language === DOTNET) {
46
- dotnetAE(identifiedLanguageInfo, analysis.config, langCallback);
47
- }
48
- if (identifiedLanguageInfo.language === NODE) {
49
- nodeAE(identifiedLanguageInfo, analysis.config, langCallback);
50
- }
51
- if (identifiedLanguageInfo.language === JAVA) {
52
- javaAE(identifiedLanguageInfo, analysis.config, langCallback);
53
- }
54
- if (identifiedLanguageInfo.language === RUBY) {
55
- rubyAE(identifiedLanguageInfo, analysis.config, langCallback);
56
- }
57
- if (identifiedLanguageInfo.language === PYTHON) {
58
- pythonAE(identifiedLanguageInfo, analysis.config, langCallback);
59
- }
60
- if (identifiedLanguageInfo.language === PHP) {
61
- phpAE(identifiedLanguageInfo, analysis.config, langCallback);
62
- }
63
- if (identifiedLanguageInfo.language === GO) {
64
- goAE(identifiedLanguageInfo, analysis.config, langCallback);
65
- }
66
- };
@@ -1,166 +0,0 @@
1
- "use strict";
2
- const { supportedLanguages: { NODE, DOTNET, JAVA, RUBY, PYTHON, GO, PHP, JAVASCRIPT } } = require('./constants');
3
- const i18n = require('i18n');
4
- const DOT_NET_PROJECT_FILE_REGEX = /.+\.csproj$/;
5
- const DOT_NET_LOCK_FILENAME = 'packages.lock.json';
6
- const isDotNetProjectFilename = filename => filename.search(DOT_NET_PROJECT_FILE_REGEX) !== -1;
7
- const isDotNetLockFilename = filename => filename === DOT_NET_LOCK_FILENAME;
8
- function isJavaMavenProjectFilename(filename) {
9
- return filename === 'pom.xml';
10
- }
11
- function isJavaGradleProjectFilename(filename) {
12
- return filename === 'build.gradle' || filename === 'build.gradle.kts';
13
- }
14
- const isRubyProjectFilename = filename => filename === 'Gemfile';
15
- const isNodeProjectFilename = filename => filename === 'package.json';
16
- const isPythonProjectFilename = filename => filename === 'requirements.txt' || filename === 'Pipfile';
17
- const isPhpProjectFilename = filename => filename === 'composer.json';
18
- const isPhpLockFilename = filename => filename === 'composer.lock';
19
- function isNodeLockFilename(filename) {
20
- return filename === 'package-lock.json' || filename === 'yarn.lock';
21
- }
22
- const isRubyLockFilename = filename => filename === 'Gemfile.lock';
23
- const isPipfileLockLockFilename = filename => filename === 'Pipfile.lock';
24
- const isGoProjectFilename = filename => filename === 'go.mod';
25
- const deduceLanguageScaAnalysis = filenames => {
26
- const deducedLanguages = [];
27
- let language = '';
28
- filenames.forEach(filename => {
29
- if (isJavaMavenProjectFilename(filename)) {
30
- deducedLanguages.push(filename);
31
- language = JAVA;
32
- }
33
- if (isJavaGradleProjectFilename(filename)) {
34
- deducedLanguages.push(filename);
35
- language = JAVA;
36
- }
37
- if (isNodeProjectFilename(filename)) {
38
- deducedLanguages.push(filename);
39
- language = JAVASCRIPT;
40
- }
41
- if (isRubyProjectFilename(filename)) {
42
- deducedLanguages.push(filename);
43
- language = RUBY;
44
- }
45
- if (isPythonProjectFilename(filename)) {
46
- deducedLanguages.push(filename);
47
- language = PYTHON;
48
- }
49
- if (isPhpProjectFilename(filename)) {
50
- deducedLanguages.push({ language: PHP, projectFilename: filename });
51
- language = PHP;
52
- }
53
- if (isNodeLockFilename(filename)) {
54
- deducedLanguages.push(filename);
55
- language = JAVASCRIPT;
56
- }
57
- if (isPhpLockFilename(filename)) {
58
- deducedLanguages.push({ language: PHP, lockFilename: filename });
59
- }
60
- if (isGoProjectFilename(filename)) {
61
- deducedLanguages.push({ language: GO, projectFilename: filename });
62
- language = GO;
63
- }
64
- });
65
- let identifiedLanguages = { [language]: deducedLanguages };
66
- return identifiedLanguages;
67
- };
68
- const deduceLanguage = filename => {
69
- const deducedLanguages = [];
70
- if (isJavaMavenProjectFilename(filename)) {
71
- deducedLanguages.push({ language: JAVA, projectFilename: filename });
72
- }
73
- if (isJavaGradleProjectFilename(filename)) {
74
- deducedLanguages.push({ language: JAVA, projectFilename: filename });
75
- }
76
- if (isNodeProjectFilename(filename)) {
77
- deducedLanguages.push({ language: NODE, projectFilename: filename });
78
- }
79
- if (isDotNetProjectFilename(filename)) {
80
- deducedLanguages.push({ language: DOTNET, projectFilename: filename });
81
- }
82
- if (isRubyProjectFilename(filename)) {
83
- deducedLanguages.push({ language: RUBY, projectFilename: filename });
84
- }
85
- if (isPythonProjectFilename(filename)) {
86
- deducedLanguages.push({ language: PYTHON, projectFilename: filename });
87
- }
88
- if (isPhpProjectFilename(filename)) {
89
- deducedLanguages.push({ language: PHP, projectFilename: filename });
90
- }
91
- if (isDotNetLockFilename(filename)) {
92
- deducedLanguages.push({ language: DOTNET, lockFilename: filename });
93
- }
94
- if (isNodeLockFilename(filename)) {
95
- deducedLanguages.push({ language: NODE, lockFilename: filename });
96
- }
97
- if (isRubyLockFilename(filename)) {
98
- deducedLanguages.push({ language: RUBY, lockFilename: filename });
99
- }
100
- if (isPipfileLockLockFilename(filename)) {
101
- deducedLanguages.push({ language: PYTHON, lockFilename: filename });
102
- }
103
- if (isPhpLockFilename(filename)) {
104
- deducedLanguages.push({ language: PHP, lockFilename: filename });
105
- }
106
- if (isGoProjectFilename(filename)) {
107
- deducedLanguages.push({ language: GO, projectFilename: filename });
108
- }
109
- return deducedLanguages;
110
- };
111
- const reduceIdentifiedLanguages = identifiedLanguages => identifiedLanguages.reduce((accumulator, identifiedLanguageInfo) => {
112
- const { language, projectFilename, lockFilename } = identifiedLanguageInfo;
113
- if (!(language in accumulator)) {
114
- accumulator[language] = { projectFilenames: [], lockFilenames: [] };
115
- }
116
- if (projectFilename) {
117
- accumulator[language].projectFilenames.push(projectFilename);
118
- }
119
- else {
120
- accumulator[language].lockFilenames.push(lockFilename);
121
- }
122
- return accumulator;
123
- }, {});
124
- module.exports = exports = (analysis, next) => {
125
- const { file, languageAnalysis, config } = analysis;
126
- let identifiedLanguages = languageAnalysis.projectRootFilenames.reduce((accumulator, filename) => {
127
- const deducedLanguages = deduceLanguage(filename);
128
- return [...accumulator, ...deducedLanguages];
129
- }, []);
130
- if (Object.keys(identifiedLanguages).length === 0) {
131
- next(new Error(i18n.__('languageAnalysisNoLanguage', file)));
132
- return;
133
- }
134
- let language = config.language;
135
- if (language === undefined) {
136
- languageAnalysis.identifiedLanguages =
137
- reduceIdentifiedLanguages(identifiedLanguages);
138
- }
139
- else {
140
- let refinedIdentifiedLanguages = [];
141
- for (let x in identifiedLanguages) {
142
- if (identifiedLanguages[x].language === language.toUpperCase() ||
143
- (identifiedLanguages[x].language === NODE &&
144
- language.toUpperCase() === JAVASCRIPT)) {
145
- refinedIdentifiedLanguages.push(identifiedLanguages[x]);
146
- }
147
- }
148
- if (refinedIdentifiedLanguages.length === 0) {
149
- console.log(`Could not detect language as specified: ${config.language}`);
150
- process.exit(1);
151
- }
152
- languageAnalysis.identifiedLanguages = reduceIdentifiedLanguages(refinedIdentifiedLanguages);
153
- }
154
- next();
155
- };
156
- exports.isJavaMavenProjectFilename = isJavaMavenProjectFilename;
157
- exports.isJavaGradleProjectFilename = isJavaGradleProjectFilename;
158
- exports.isNodeProjectFilename = isNodeProjectFilename;
159
- exports.isDotNetProjectFilename = isDotNetProjectFilename;
160
- exports.isDotNetLockFilename = isDotNetLockFilename;
161
- exports.isGoProjectFilename = isGoProjectFilename;
162
- exports.isPhpProjectFilename = isPhpProjectFilename;
163
- exports.isPhpLockFilename = isPhpLockFilename;
164
- exports.deduceLanguage = deduceLanguage;
165
- exports.reduceIdentifiedLanguages = reduceIdentifiedLanguages;
166
- exports.deduceLanguageScaAnalysis = deduceLanguageScaAnalysis;
@@ -1,40 +0,0 @@
1
- "use strict";
2
- const i18n = require('i18n');
3
- module.exports = exports = (analysis, next) => {
4
- const { language: { lockFilePath }, node } = analysis;
5
- try {
6
- if (node.npmLockFile && node.npmLockFile.lockfileVersion > 1) {
7
- const listOfTopDep = Object.keys(node.npmLockFile.dependencies);
8
- Object.entries(node.npmLockFile.dependencies).forEach(([key, value]) => {
9
- if (value.requires) {
10
- const listOfRequiresDep = Object.keys(value.requires);
11
- listOfRequiresDep.forEach(dep => {
12
- if (!listOfTopDep.includes(dep)) {
13
- addDepToLockFile(value['requires'], dep);
14
- }
15
- });
16
- }
17
- if (value.dependencies) {
18
- Object.entries(value.dependencies).forEach(([childKey, childValue]) => {
19
- if (childValue.requires) {
20
- const listOfRequiresDep = Object.keys(childValue.requires);
21
- listOfRequiresDep.forEach(dep => {
22
- if (!listOfTopDep.includes(dep)) {
23
- addDepToLockFile(childValue['requires'], dep);
24
- }
25
- });
26
- }
27
- });
28
- }
29
- });
30
- }
31
- }
32
- catch (err) {
33
- next(next(new Error(i18n.__('NodeParseNPM', lockFilePath) + `${err.message}`)));
34
- return;
35
- }
36
- function addDepToLockFile(depObj, key) {
37
- node.npmLockFile.dependencies[key] = { version: depObj[key] };
38
- }
39
- next();
40
- };
@@ -1,31 +0,0 @@
1
- "use strict";
2
- const AnalysisEngine = require('../AnalysisEngine');
3
- const readProjectFileContents = require('./readProjectFileContents');
4
- const readNPMLockFileContents = require('./readNPMLockFileContents');
5
- const parseNPMLockFileContents = require('./parseNPMLockFileContents');
6
- const readYarnLockFileContents = require('./readYarnLockFileContents');
7
- const parseYarnLockFileContents = require('./parseYarnLockFileContents');
8
- const parseYarn2LockFileContents = require('./parseYarn2LockFileContents');
9
- const handleNPMLockFileV2 = require('./handleNPMLockFileV2');
10
- const sanitizer = require('./sanitizer');
11
- const i18n = require('i18n');
12
- module.exports = exports = (language, config, callback) => {
13
- const ae = new AnalysisEngine({ language, config, node: {} });
14
- ae.use([
15
- readProjectFileContents,
16
- readNPMLockFileContents,
17
- parseNPMLockFileContents,
18
- readYarnLockFileContents,
19
- parseYarnLockFileContents,
20
- parseYarn2LockFileContents,
21
- handleNPMLockFileV2,
22
- sanitizer
23
- ]);
24
- ae.analyze((err, analysis) => {
25
- if (err) {
26
- callback(new Error(i18n.__('NodeAnalysisFailure') + `${err.message}`));
27
- return;
28
- }
29
- callback(null, analysis);
30
- });
31
- };
@@ -1,18 +0,0 @@
1
- "use strict";
2
- const i18n = require('i18n');
3
- module.exports = exports = ({ language: { lockFilePath }, node }, next) => {
4
- if (node.rawLockFileContents === undefined) {
5
- next();
6
- }
7
- else {
8
- try {
9
- node.npmLockFile = JSON.parse(node.rawLockFileContents);
10
- }
11
- catch (err) {
12
- next(new Error(i18n.__('NodeParseNPM', lockFilePath ? lockFilePath : 'undefined') +
13
- `${err.message}`));
14
- return;
15
- }
16
- next();
17
- }
18
- };
@@ -1,18 +0,0 @@
1
- "use strict";
2
- const yarnParser = require('@yarnpkg/lockfile');
3
- const i18n = require('i18n');
4
- module.exports = exports = ({ language: { lockFilename }, node }, next) => {
5
- if (node.rawYarnLockFileContents === undefined || node.yarnVersion === 2) {
6
- next();
7
- }
8
- else {
9
- try {
10
- node.yarnLockFile = yarnParser.parse(node.rawYarnLockFileContents);
11
- }
12
- catch (err) {
13
- next(new Error(i18n.__('NodeParseYarn', lockFilename.lockFilePath ? lockFilename.lockFilePath : 'undefined') + `${err.message}`));
14
- return;
15
- }
16
- next();
17
- }
18
- };
@@ -1,17 +0,0 @@
1
- "use strict";
2
- const fs = require('fs');
3
- const i18n = require('i18n');
4
- module.exports = exports = ({ language: { lockFilePath }, node }, next) => {
5
- if (!lockFilePath || !lockFilePath.includes('package-lock.json')) {
6
- next();
7
- return;
8
- }
9
- try {
10
- node.rawLockFileContents = fs.readFileSync(lockFilePath);
11
- }
12
- catch (err) {
13
- next(new Error(i18n.__('NodeReadNpmError', lockFilePath) + `${err.message}`));
14
- return;
15
- }
16
- next();
17
- };
@@ -1,14 +0,0 @@
1
- "use strict";
2
- const fs = require('fs');
3
- const i18n = require('i18n');
4
- module.exports = exports = (analysis, next) => {
5
- const { language: { projectFilePath }, node } = analysis;
6
- try {
7
- node.packageJSON = JSON.parse(fs.readFileSync(projectFilePath, 'utf8'));
8
- }
9
- catch (err) {
10
- next(new Error(i18n.__('nodeReadProjectFileError', projectFilePath) + `${err.message}`));
11
- return;
12
- }
13
- next();
14
- };
@@ -1,24 +0,0 @@
1
- "use strict";
2
- const fs = require('fs');
3
- const yaml = require('js-yaml');
4
- const i18n = require('i18n');
5
- module.exports = exports = ({ language: { lockFilePath }, node }, next) => {
6
- if (!lockFilePath || !lockFilePath.includes('yarn.lock')) {
7
- next();
8
- return;
9
- }
10
- try {
11
- node.rawYarnLockFileContents = fs.readFileSync(lockFilePath, 'utf8');
12
- node.yarnVersion = 1;
13
- if (!node.rawYarnLockFileContents.includes('lockfile v1') ||
14
- node.rawYarnLockFileContents.includes('__metadata')) {
15
- node.rawYarnLockFileContents = yaml.load(fs.readFileSync(lockFilePath, 'utf8'));
16
- node.yarnVersion = 2;
17
- }
18
- }
19
- catch (err) {
20
- next(new Error(i18n.__('nodeReadYarnLockFileError', lockFilePath) + `${err.message}`));
21
- return;
22
- }
23
- next();
24
- };
@@ -1,9 +0,0 @@
1
- "use strict";
2
- module.exports = exports = ({ node }, next) => {
3
- delete node.rawProjectFileContents;
4
- delete node.projectFileJSON;
5
- delete node.projectLockFileJSON;
6
- delete node.rawLockFileContents;
7
- delete node.rawYarnLockFileContents;
8
- next();
9
- };
@@ -1,23 +0,0 @@
1
- "use strict";
2
- const AnalysisEngine = require('../AnalysisEngine');
3
- const readProjectFileContents = require('./readProjectFileContents');
4
- const readLockFileContents = require('./readLockFileContents');
5
- const parseLockFileContents = require('./parseLockFileContents');
6
- const sanitizer = require('./sanitizer');
7
- const i18n = require('i18n');
8
- module.exports = exports = (language, config, callback) => {
9
- const ae = new AnalysisEngine({ language, config, php: {} });
10
- ae.use([
11
- readProjectFileContents,
12
- readLockFileContents,
13
- parseLockFileContents,
14
- sanitizer
15
- ]);
16
- ae.analyze((err, analysis) => {
17
- if (err) {
18
- callback(new Error(i18n.__('phpAnalysisFailure') + `${err.message}`));
19
- return;
20
- }
21
- callback(null, analysis);
22
- });
23
- };
@@ -1,52 +0,0 @@
1
- "use strict";
2
- const i18n = require('i18n');
3
- const _ = require('lodash');
4
- module.exports = exports = ({ language: { lockFilePath }, php }, next) => {
5
- try {
6
- php.lockFile = php.rawLockFileContents;
7
- let packages = _.keyBy(php.lockFile.packages, 'name');
8
- let packagesDev = _.keyBy(php.lockFile['packages-dev'], 'name');
9
- php.lockFile.dependencies = _.merge(packages, packagesDev);
10
- const listOfTopDep = Object.keys(php.lockFile.dependencies);
11
- Object.entries(php.lockFile.dependencies).forEach(([key, value]) => {
12
- if (value.require) {
13
- const listOfRequiresDep = Object.keys(value.require);
14
- listOfRequiresDep.forEach(dep => {
15
- if (!listOfTopDep.includes(dep)) {
16
- addChildDepToLockFileAsOwnObj(value['require'], dep);
17
- }
18
- });
19
- }
20
- if (value['require-dev']) {
21
- const listOfRequiresDep = Object.keys(value['require-dev']);
22
- listOfRequiresDep.forEach(dep => {
23
- if (!listOfTopDep.includes(dep)) {
24
- addChildDepToLockFileAsOwnObj(value['require-dev'], dep);
25
- }
26
- });
27
- }
28
- });
29
- formatParentDepToLockFile();
30
- }
31
- catch (err) {
32
- next(new Error(i18n.__('phpParseComposerLock', lockFilePath) + `${err.message}`));
33
- return;
34
- }
35
- next();
36
- function addChildDepToLockFileAsOwnObj(depObj, key) {
37
- php.lockFile.dependencies[key] = { version: depObj[key] };
38
- }
39
- function formatParentDepToLockFile() {
40
- for (const [key, value] of Object.entries(php.lockFile.dependencies)) {
41
- let requires = {};
42
- for (const [childKey, childValue] of Object.entries(value)) {
43
- if (childKey === 'require' || childKey === 'require-dev') {
44
- requires = _.merge(requires, childValue);
45
- php.lockFile.dependencies[key].requires = requires;
46
- delete php.lockFile.dependencies[key].require;
47
- delete php.lockFile.dependencies[key]['require-dev'];
48
- }
49
- }
50
- }
51
- }
52
- };
@@ -1,13 +0,0 @@
1
- "use strict";
2
- const fs = require('fs');
3
- const i18n = require('i18n');
4
- module.exports = exports = ({ language: { lockFilePath }, php }, next) => {
5
- try {
6
- php.rawLockFileContents = JSON.parse(fs.readFileSync(lockFilePath));
7
- }
8
- catch (err) {
9
- next(new Error(i18n.__('phpReadError', lockFilePath) + `${err.message}`));
10
- return;
11
- }
12
- next();
13
- };
@@ -1,16 +0,0 @@
1
- "use strict";
2
- const fs = require('fs');
3
- const i18n = require('i18n');
4
- module.exports = exports = (analysis, next) => {
5
- const { language: { projectFilePath }, php } = analysis;
6
- try {
7
- php.composerJSON = JSON.parse(fs.readFileSync(projectFilePath, 'utf8'));
8
- php.composerJSON.dependencies = php.composerJSON.require;
9
- php.composerJSON.devDependencies = php.composerJSON['require-dev'];
10
- }
11
- catch (err) {
12
- next(new Error(i18n.__('phpReadProjectFileError', projectFilePath) + `${err.message}`));
13
- return;
14
- }
15
- next();
16
- };
@@ -1,5 +0,0 @@
1
- "use strict";
2
- module.exports = exports = ({ php }, next) => {
3
- delete php.rawLockFileContents;
4
- next();
5
- };
@@ -1,25 +0,0 @@
1
- "use strict";
2
- const AnalysisEngine = require('./../AnalysisEngine');
3
- const readPythonProjectFileContents = require('./readPythonProjectFileContents');
4
- const readPipfileLockFileContents = require('./readPipfileLockFileContents');
5
- const parseProjectFileContents = require('./parseProjectFileContents');
6
- const parsePipfileLockContents = require('./parsePipfileLockContents');
7
- const sanitizer = require('./sanitizer');
8
- const i18n = require('i18n');
9
- module.exports = exports = (language, config, callback) => {
10
- const ae = new AnalysisEngine({ language, config, python: {} });
11
- ae.use([
12
- readPythonProjectFileContents,
13
- parseProjectFileContents,
14
- readPipfileLockFileContents,
15
- parsePipfileLockContents,
16
- sanitizer
17
- ]);
18
- ae.analyze((err, analysis) => {
19
- if (err) {
20
- callback(new Error(i18n.__('pythonAnalysisEngineError') + `${err.message}`));
21
- return;
22
- }
23
- callback(null, analysis);
24
- });
25
- };
@@ -1,17 +0,0 @@
1
- "use strict";
2
- const i18n = require('i18n');
3
- module.exports = exports = ({ language: { lockFilePath }, python }, next) => {
4
- if (python.rawLockFileContents === undefined) {
5
- return next();
6
- }
7
- try {
8
- let parsedPipLock = JSON.parse(python.rawLockFileContents);
9
- parsedPipLock['defaults'] = parsedPipLock['default'];
10
- python.pipfileLock = parsedPipLock;
11
- }
12
- catch (err) {
13
- next(new Error(i18n.__('pythonAnalysisEnginePipError', lockFilePath ? lockFilePath : 'undefined') + `${err.message}`));
14
- return;
15
- }
16
- next();
17
- };
@@ -1,21 +0,0 @@
1
- "use strict";
2
- const multiReplace = require('string-multiple-replace');
3
- const i18n = require('i18n');
4
- module.exports = exports = ({ python }, next) => {
5
- const { rawProjectFileContents } = python;
6
- try {
7
- const matcherObj = { '"': '' };
8
- const sequencer = ['"'];
9
- const parsedPipfile = multiReplace(rawProjectFileContents, matcherObj, sequencer);
10
- const pythonArray = parsedPipfile.split('\n');
11
- python.pipfilDependanceies = pythonArray.filter(element => {
12
- return element != '' && !element.includes('#');
13
- });
14
- next();
15
- }
16
- catch (err) {
17
- next(new Error(i18n.__('pythonAnalysisParseProjectFileError', rawProjectFileContents) +
18
- `${err.message}`));
19
- return;
20
- }
21
- };
@@ -1,13 +0,0 @@
1
- "use strict";
2
- const fs = require('fs');
3
- const i18n = require('i18n');
4
- module.exports = exports = ({ language: { lockFilePath }, python }, next) => {
5
- try {
6
- python.rawLockFileContents = fs.readFileSync(lockFilePath);
7
- }
8
- catch (err) {
9
- next(new Error(i18n.__('pythonAnalysisReadPipFileError', lockFilePath) +
10
- `${err.message}`));
11
- }
12
- next();
13
- };
@@ -1,14 +0,0 @@
1
- "use strict";
2
- const fs = require('fs');
3
- const i18n = require('i18n');
4
- module.exports = exports = ({ language: { projectFilePath }, python }, next) => {
5
- try {
6
- python.rawProjectFileContents = fs.readFileSync(projectFilePath, 'utf8');
7
- next();
8
- }
9
- catch (err) {
10
- next(new Error(i18n.__('pythonAnalysisReadPythonProjectFileError', projectFilePath) +
11
- `${err.message}`));
12
- return;
13
- }
14
- };
@@ -1,7 +0,0 @@
1
- "use strict";
2
- module.exports = exports = ({ python }, next) => {
3
- delete python.rawProjectFileContents;
4
- delete python.rawLockFileContents;
5
- delete python.pipfileLock.default;
6
- next();
7
- };
@@ -1,25 +0,0 @@
1
- "use strict";
2
- const AnalysisEngine = require('./../AnalysisEngine');
3
- const readGemfileContents = require('./readGemfileContents');
4
- const readGemfileLockContents = require('./readGemfileLockContents');
5
- const parsedGemfile = require('./parsedGemfile');
6
- const parseGemfileLockFileContents = require('./parseGemfileLockContents');
7
- const sanitizer = require('./sanitizer');
8
- const i18n = require('i18n');
9
- module.exports = exports = (language, config, callback) => {
10
- const ae = new AnalysisEngine({ language, config, ruby: {} });
11
- ae.use([
12
- readGemfileContents,
13
- parsedGemfile,
14
- readGemfileLockContents,
15
- parseGemfileLockFileContents,
16
- sanitizer
17
- ]);
18
- ae.analyze((err, analysis) => {
19
- if (err) {
20
- callback(new Error(i18n.__('rubyAnalysisEngineError') + `${err.message}`));
21
- return;
22
- }
23
- callback(null, analysis);
24
- });
25
- };