@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,87 +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 fs = require('fs');
14
- const chalk = require('chalk');
15
- const saveFile = require('../../commands/audit/saveFile').default;
16
- const generateSbom = require('../../sbom/generateSbom').default;
17
- const { failSpinner, returnOra, startSpinner, succeedSpinner } = require('../../utils/oraWrapper');
18
- module.exports = exports = (err, analysis) => {
19
- const { identifiedLanguageInfo } = analysis.languageAnalysis;
20
- const catalogueAppId = analysis.languageAnalysis.appId;
21
- if (err) {
22
- console.error(err);
23
- return;
24
- }
25
- const langCallback = async (err, analysis) => {
26
- const config = analysis.config;
27
- if (err) {
28
- console.log();
29
- console.log('***********' +
30
- i18n.__('languageAnalysisFactoryFailureHeader') +
31
- '****************');
32
- console.log(identifiedLanguageInfo.language);
33
- console.log();
34
- console.error(`${identifiedLanguageInfo.language}` +
35
- i18n.__('languageAnalysisFailure') +
36
- err);
37
- return process.exit(5);
38
- }
39
- const reportSpinner = returnOra(i18n.__('auditSCAAnalysisBegins'));
40
- startSpinner(reportSpinner);
41
- const snapshotResponse = await newSendSnapShot(analysis, catalogueAppId);
42
- succeedSpinner(reportSpinner, 'Contrast SCA analysis complete');
43
- await vulnerabilityReport(analysis, catalogueAppId, snapshotResponse.id);
44
- await auditSave(config);
45
- };
46
- if (identifiedLanguageInfo.language === DOTNET) {
47
- dotnetAE(identifiedLanguageInfo, analysis.config, langCallback);
48
- }
49
- if (identifiedLanguageInfo.language === NODE) {
50
- nodeAE(identifiedLanguageInfo, analysis.config, langCallback);
51
- }
52
- if (identifiedLanguageInfo.language === JAVA) {
53
- javaAE(identifiedLanguageInfo, analysis.config, langCallback);
54
- }
55
- if (identifiedLanguageInfo.language === RUBY) {
56
- rubyAE(identifiedLanguageInfo, analysis.config, langCallback);
57
- }
58
- if (identifiedLanguageInfo.language === PYTHON) {
59
- pythonAE(identifiedLanguageInfo, analysis.config, langCallback);
60
- }
61
- if (identifiedLanguageInfo.language === PHP) {
62
- phpAE(identifiedLanguageInfo, analysis.config, langCallback);
63
- }
64
- if (identifiedLanguageInfo.language === GO) {
65
- goAE(identifiedLanguageInfo, analysis.config, langCallback);
66
- }
67
- };
68
- async function auditSave(config) {
69
- if (config.save) {
70
- if (config.save.toLowerCase() === 'sbom') {
71
- saveFile(config, await generateSbom(config));
72
- const filename = `${config.applicationId}-sbom-cyclonedx.json`;
73
- if (fs.existsSync(filename)) {
74
- console.log(i18n.__('auditSBOMSaveSuccess') + ` - ${filename}`);
75
- }
76
- else {
77
- console.log(chalk.yellow.bold(`\n Unable to save ${filename} Software Bill of Materials (SBOM)`));
78
- }
79
- }
80
- else {
81
- console.log(i18n.__('auditBadFiletypeSpecifiedForSave'));
82
- }
83
- }
84
- else if (config.save === null) {
85
- console.log(i18n.__('auditNoFiletypeSpecifiedForSave'));
86
- }
87
- }
@@ -1,150 +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 = NODE;
40
- }
41
- if (isNodeLockFilename(filename)) {
42
- deducedLanguages.push(filename);
43
- language = NODE;
44
- }
45
- if (isGoProjectFilename(filename)) {
46
- deducedLanguages.push({ language: GO, projectFilename: filename });
47
- language = GO;
48
- }
49
- });
50
- let identifiedLanguages = { [language]: deducedLanguages };
51
- return identifiedLanguages;
52
- };
53
- const deduceLanguage = filename => {
54
- const deducedLanguages = [];
55
- if (isJavaMavenProjectFilename(filename)) {
56
- deducedLanguages.push({ language: JAVA, projectFilename: filename });
57
- }
58
- if (isJavaGradleProjectFilename(filename)) {
59
- deducedLanguages.push({ language: JAVA, projectFilename: filename });
60
- }
61
- if (isNodeProjectFilename(filename)) {
62
- deducedLanguages.push({ language: NODE, projectFilename: filename });
63
- }
64
- if (isDotNetProjectFilename(filename)) {
65
- deducedLanguages.push({ language: DOTNET, projectFilename: filename });
66
- }
67
- if (isRubyProjectFilename(filename)) {
68
- deducedLanguages.push({ language: RUBY, projectFilename: filename });
69
- }
70
- if (isPythonProjectFilename(filename)) {
71
- deducedLanguages.push({ language: PYTHON, projectFilename: filename });
72
- }
73
- if (isPhpProjectFilename(filename)) {
74
- deducedLanguages.push({ language: PHP, projectFilename: filename });
75
- }
76
- if (isDotNetLockFilename(filename)) {
77
- deducedLanguages.push({ language: DOTNET, lockFilename: filename });
78
- }
79
- if (isNodeLockFilename(filename)) {
80
- deducedLanguages.push({ language: NODE, lockFilename: filename });
81
- }
82
- if (isRubyLockFilename(filename)) {
83
- deducedLanguages.push({ language: RUBY, lockFilename: filename });
84
- }
85
- if (isPipfileLockLockFilename(filename)) {
86
- deducedLanguages.push({ language: PYTHON, lockFilename: filename });
87
- }
88
- if (isPhpLockFilename(filename)) {
89
- deducedLanguages.push({ language: PHP, lockFilename: filename });
90
- }
91
- if (isGoProjectFilename(filename)) {
92
- deducedLanguages.push({ language: GO, projectFilename: filename });
93
- }
94
- return deducedLanguages;
95
- };
96
- const reduceIdentifiedLanguages = identifiedLanguages => identifiedLanguages.reduce((accumulator, identifiedLanguageInfo) => {
97
- const { language, projectFilename, lockFilename } = identifiedLanguageInfo;
98
- if (!(language in accumulator)) {
99
- accumulator[language] = { projectFilenames: [], lockFilenames: [] };
100
- }
101
- if (projectFilename) {
102
- accumulator[language].projectFilenames.push(projectFilename);
103
- }
104
- else {
105
- accumulator[language].lockFilenames.push(lockFilename);
106
- }
107
- return accumulator;
108
- }, {});
109
- module.exports = exports = (analysis, next) => {
110
- const { projectPath, languageAnalysis, config } = analysis;
111
- let identifiedLanguages = languageAnalysis.projectRootFilenames.reduce((accumulator, filename) => {
112
- const deducedLanguages = deduceLanguage(filename);
113
- return [...accumulator, ...deducedLanguages];
114
- }, []);
115
- if (Object.keys(identifiedLanguages).length === 0) {
116
- next(new Error(i18n.__('languageAnalysisNoLanguage', projectPath)));
117
- return;
118
- }
119
- let language = config.language;
120
- if (language === undefined) {
121
- languageAnalysis.identifiedLanguages = reduceIdentifiedLanguages(identifiedLanguages);
122
- }
123
- else {
124
- let refinedIdentifiedLanguages = [];
125
- for (let x in identifiedLanguages) {
126
- if (identifiedLanguages[x].language === language.toUpperCase() ||
127
- (identifiedLanguages[x].language === NODE &&
128
- language.toUpperCase() === JAVASCRIPT)) {
129
- refinedIdentifiedLanguages.push(identifiedLanguages[x]);
130
- }
131
- }
132
- if (refinedIdentifiedLanguages.length === 0) {
133
- console.log(`Could not detect language as specified: ${config.language}`);
134
- process.exit(1);
135
- }
136
- languageAnalysis.identifiedLanguages = reduceIdentifiedLanguages(refinedIdentifiedLanguages);
137
- }
138
- next();
139
- };
140
- exports.isJavaMavenProjectFilename = isJavaMavenProjectFilename;
141
- exports.isJavaGradleProjectFilename = isJavaGradleProjectFilename;
142
- exports.isNodeProjectFilename = isNodeProjectFilename;
143
- exports.isDotNetProjectFilename = isDotNetProjectFilename;
144
- exports.isDotNetLockFilename = isDotNetLockFilename;
145
- exports.isGoProjectFilename = isGoProjectFilename;
146
- exports.isPhpProjectFilename = isPhpProjectFilename;
147
- exports.isPhpLockFilename = isPhpLockFilename;
148
- exports.deduceLanguage = deduceLanguage;
149
- exports.reduceIdentifiedLanguages = reduceIdentifiedLanguages;
150
- 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
- };