@contrast/contrast 1.0.7 → 1.0.10

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 (196) hide show
  1. package/README.md +1 -1
  2. package/dist/audit/catalogueApplication/catalogueApplication.js +23 -5
  3. package/dist/audit/languageAnalysisEngine/getProjectRootFilenames.js +17 -26
  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 +40 -7
  10. package/dist/audit/languageAnalysisEngine/sendSnapshot.js +6 -30
  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 +2 -2
  16. package/dist/commands/audit/saveFile.js +8 -4
  17. package/dist/commands/scan/sca/scaAnalysis.js +54 -16
  18. package/dist/common/HTTPClient.js +14 -8
  19. package/dist/common/errorHandling.js +2 -2
  20. package/dist/common/versionChecker.js +19 -4
  21. package/dist/constants/constants.js +7 -2
  22. package/dist/constants/locales.js +44 -44
  23. package/dist/constants.js +31 -14
  24. package/dist/index.js +55 -45
  25. package/dist/lambda/lambda.js +5 -2
  26. package/dist/sbom/generateSbom.js +5 -4
  27. package/dist/scaAnalysis/common/formatMessage.js +33 -6
  28. package/dist/scaAnalysis/common/treeUpload.js +4 -6
  29. package/dist/scaAnalysis/dotnet/analysis.js +43 -0
  30. package/dist/scaAnalysis/dotnet/index.js +10 -0
  31. package/dist/scaAnalysis/go/goReadDepFile.js +1 -3
  32. package/dist/scaAnalysis/java/analysis.js +5 -5
  33. package/dist/scaAnalysis/javascript/analysis.js +107 -0
  34. package/dist/scaAnalysis/javascript/index.js +53 -0
  35. package/dist/scaAnalysis/php/analysis.js +70 -0
  36. package/dist/scaAnalysis/php/index.js +17 -0
  37. package/dist/scaAnalysis/python/analysis.js +8 -7
  38. package/dist/scaAnalysis/ruby/analysis.js +8 -16
  39. package/dist/scaAnalysis/ruby/index.js +2 -2
  40. package/dist/scan/autoDetection.js +13 -24
  41. package/dist/scan/fileUtils.js +44 -14
  42. package/dist/scan/formatScanOutput.js +3 -3
  43. package/dist/scan/scanConfig.js +2 -2
  44. package/dist/utils/commonApi.js +1 -1
  45. package/dist/utils/filterProjectPath.js +7 -2
  46. package/dist/utils/getConfig.js +1 -6
  47. package/package.json +2 -3
  48. package/src/audit/catalogueApplication/catalogueApplication.js +28 -6
  49. package/src/audit/languageAnalysisEngine/getProjectRootFilenames.js +22 -58
  50. package/src/audit/languageAnalysisEngine/report/commonReportingFunctions.ts +157 -47
  51. package/src/audit/languageAnalysisEngine/report/models/reportListModel.ts +4 -1
  52. package/src/audit/languageAnalysisEngine/report/models/reportOutputModel.ts +11 -5
  53. package/src/audit/languageAnalysisEngine/report/models/severityCountModel.ts +4 -0
  54. package/src/audit/languageAnalysisEngine/report/reportingFeature.ts +86 -32
  55. package/src/audit/languageAnalysisEngine/report/utils/reportUtils.ts +44 -5
  56. package/src/audit/languageAnalysisEngine/sendSnapshot.js +6 -32
  57. package/src/audit/save.js +48 -0
  58. package/src/commands/audit/auditConfig.ts +0 -25
  59. package/src/commands/audit/auditController.ts +18 -20
  60. package/src/commands/audit/help.ts +31 -25
  61. package/src/commands/audit/processAudit.ts +2 -5
  62. package/src/commands/audit/saveFile.ts +6 -2
  63. package/src/commands/scan/processScan.js +0 -1
  64. package/src/commands/scan/sca/scaAnalysis.js +87 -32
  65. package/src/common/HTTPClient.js +16 -9
  66. package/src/common/errorHandling.ts +2 -3
  67. package/src/common/versionChecker.ts +23 -4
  68. package/src/constants/constants.js +9 -3
  69. package/src/constants/locales.js +72 -50
  70. package/src/constants.js +32 -15
  71. package/src/index.ts +70 -58
  72. package/src/lambda/lambda.ts +5 -2
  73. package/src/lambda/types.ts +1 -0
  74. package/src/sbom/generateSbom.ts +2 -2
  75. package/src/scaAnalysis/common/formatMessage.js +35 -6
  76. package/src/scaAnalysis/common/treeUpload.js +4 -6
  77. package/src/scaAnalysis/dotnet/analysis.js +54 -0
  78. package/src/scaAnalysis/dotnet/index.js +11 -0
  79. package/src/scaAnalysis/go/goReadDepFile.js +1 -3
  80. package/src/scaAnalysis/java/analysis.js +5 -5
  81. package/src/scaAnalysis/javascript/analysis.js +126 -0
  82. package/src/scaAnalysis/javascript/index.js +75 -0
  83. package/src/scaAnalysis/php/analysis.js +78 -0
  84. package/src/scaAnalysis/php/index.js +22 -0
  85. package/src/scaAnalysis/python/analysis.js +8 -7
  86. package/src/scaAnalysis/ruby/analysis.js +8 -17
  87. package/src/scaAnalysis/ruby/index.js +2 -2
  88. package/src/scan/autoDetection.js +14 -27
  89. package/src/scan/fileUtils.js +46 -14
  90. package/src/scan/formatScanOutput.ts +3 -3
  91. package/src/scan/scanConfig.js +2 -4
  92. package/src/utils/commonApi.js +1 -1
  93. package/src/utils/filterProjectPath.js +6 -2
  94. package/src/utils/getConfig.ts +1 -12
  95. package/dist/audit/AnalysisEngine.js +0 -37
  96. package/dist/audit/autodetection/autoDetectLanguage.js +0 -32
  97. package/dist/audit/dotnetAnalysisEngine/index.js +0 -25
  98. package/dist/audit/dotnetAnalysisEngine/parseLockFileContents.js +0 -35
  99. package/dist/audit/dotnetAnalysisEngine/parseProjectFileContents.js +0 -15
  100. package/dist/audit/dotnetAnalysisEngine/readLockFileContents.js +0 -18
  101. package/dist/audit/dotnetAnalysisEngine/readProjectFileContents.js +0 -14
  102. package/dist/audit/dotnetAnalysisEngine/sanitizer.js +0 -9
  103. package/dist/audit/goAnalysisEngine/index.js +0 -17
  104. package/dist/audit/goAnalysisEngine/parseProjectFileContents.js +0 -164
  105. package/dist/audit/goAnalysisEngine/readProjectFileContents.js +0 -21
  106. package/dist/audit/goAnalysisEngine/sanitizer.js +0 -5
  107. package/dist/audit/javaAnalysisEngine/index.js +0 -34
  108. package/dist/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +0 -155
  109. package/dist/audit/javaAnalysisEngine/parseProjectFileContents.js +0 -353
  110. package/dist/audit/javaAnalysisEngine/readProjectFileContents.js +0 -98
  111. package/dist/audit/javaAnalysisEngine/sanitizer.js +0 -5
  112. package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +0 -25
  113. package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +0 -25
  114. package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +0 -35
  115. package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +0 -24
  116. package/dist/audit/languageAnalysisEngine/constants.js +0 -20
  117. package/dist/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +0 -25
  118. package/dist/audit/languageAnalysisEngine/index.js +0 -39
  119. package/dist/audit/languageAnalysisEngine/languageAnalysisFactory.js +0 -89
  120. package/dist/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +0 -159
  121. package/dist/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +0 -40
  122. package/dist/audit/nodeAnalysisEngine/index.js +0 -31
  123. package/dist/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +0 -18
  124. package/dist/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +0 -18
  125. package/dist/audit/nodeAnalysisEngine/readNPMLockFileContents.js +0 -17
  126. package/dist/audit/nodeAnalysisEngine/readProjectFileContents.js +0 -14
  127. package/dist/audit/nodeAnalysisEngine/readYarnLockFileContents.js +0 -24
  128. package/dist/audit/nodeAnalysisEngine/sanitizer.js +0 -9
  129. package/dist/audit/phpAnalysisEngine/index.js +0 -23
  130. package/dist/audit/phpAnalysisEngine/parseLockFileContents.js +0 -52
  131. package/dist/audit/phpAnalysisEngine/readLockFileContents.js +0 -13
  132. package/dist/audit/phpAnalysisEngine/readProjectFileContents.js +0 -16
  133. package/dist/audit/phpAnalysisEngine/sanitizer.js +0 -5
  134. package/dist/audit/pythonAnalysisEngine/index.js +0 -25
  135. package/dist/audit/pythonAnalysisEngine/parsePipfileLockContents.js +0 -17
  136. package/dist/audit/pythonAnalysisEngine/parseProjectFileContents.js +0 -21
  137. package/dist/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +0 -13
  138. package/dist/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +0 -14
  139. package/dist/audit/pythonAnalysisEngine/sanitizer.js +0 -7
  140. package/dist/audit/rubyAnalysisEngine/index.js +0 -25
  141. package/dist/audit/rubyAnalysisEngine/parseGemfileLockContents.js +0 -176
  142. package/dist/audit/rubyAnalysisEngine/parsedGemfile.js +0 -22
  143. package/dist/audit/rubyAnalysisEngine/readGemfileContents.js +0 -14
  144. package/dist/audit/rubyAnalysisEngine/readGemfileLockContents.js +0 -14
  145. package/dist/audit/rubyAnalysisEngine/sanitizer.js +0 -6
  146. package/src/audit/AnalysisEngine.js +0 -103
  147. package/src/audit/autodetection/autoDetectLanguage.ts +0 -40
  148. package/src/audit/dotnetAnalysisEngine/index.js +0 -26
  149. package/src/audit/dotnetAnalysisEngine/parseLockFileContents.js +0 -47
  150. package/src/audit/dotnetAnalysisEngine/parseProjectFileContents.js +0 -29
  151. package/src/audit/dotnetAnalysisEngine/readLockFileContents.js +0 -30
  152. package/src/audit/dotnetAnalysisEngine/readProjectFileContents.js +0 -26
  153. package/src/audit/dotnetAnalysisEngine/sanitizer.js +0 -11
  154. package/src/audit/goAnalysisEngine/index.js +0 -18
  155. package/src/audit/goAnalysisEngine/parseProjectFileContents.js +0 -209
  156. package/src/audit/goAnalysisEngine/readProjectFileContents.js +0 -31
  157. package/src/audit/goAnalysisEngine/sanitizer.js +0 -7
  158. package/src/audit/javaAnalysisEngine/index.js +0 -41
  159. package/src/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +0 -225
  160. package/src/audit/javaAnalysisEngine/parseProjectFileContents.js +0 -420
  161. package/src/audit/javaAnalysisEngine/readProjectFileContents.js +0 -141
  162. package/src/audit/javaAnalysisEngine/sanitizer.js +0 -6
  163. package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +0 -36
  164. package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +0 -42
  165. package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +0 -54
  166. package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +0 -33
  167. package/src/audit/languageAnalysisEngine/constants.js +0 -23
  168. package/src/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +0 -41
  169. package/src/audit/languageAnalysisEngine/index.js +0 -45
  170. package/src/audit/languageAnalysisEngine/languageAnalysisFactory.js +0 -124
  171. package/src/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +0 -250
  172. package/src/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +0 -49
  173. package/src/audit/nodeAnalysisEngine/index.js +0 -35
  174. package/src/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +0 -20
  175. package/src/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +0 -26
  176. package/src/audit/nodeAnalysisEngine/readNPMLockFileContents.js +0 -23
  177. package/src/audit/nodeAnalysisEngine/readProjectFileContents.js +0 -27
  178. package/src/audit/nodeAnalysisEngine/readYarnLockFileContents.js +0 -36
  179. package/src/audit/nodeAnalysisEngine/sanitizer.js +0 -11
  180. package/src/audit/phpAnalysisEngine/index.js +0 -27
  181. package/src/audit/phpAnalysisEngine/parseLockFileContents.js +0 -60
  182. package/src/audit/phpAnalysisEngine/readLockFileContents.js +0 -14
  183. package/src/audit/phpAnalysisEngine/readProjectFileContents.js +0 -25
  184. package/src/audit/phpAnalysisEngine/sanitizer.js +0 -4
  185. package/src/audit/pythonAnalysisEngine/index.js +0 -55
  186. package/src/audit/pythonAnalysisEngine/parsePipfileLockContents.js +0 -23
  187. package/src/audit/pythonAnalysisEngine/parseProjectFileContents.js +0 -33
  188. package/src/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +0 -16
  189. package/src/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +0 -22
  190. package/src/audit/pythonAnalysisEngine/sanitizer.js +0 -9
  191. package/src/audit/rubyAnalysisEngine/index.js +0 -30
  192. package/src/audit/rubyAnalysisEngine/parseGemfileLockContents.js +0 -215
  193. package/src/audit/rubyAnalysisEngine/parsedGemfile.js +0 -39
  194. package/src/audit/rubyAnalysisEngine/readGemfileContents.js +0 -18
  195. package/src/audit/rubyAnalysisEngine/readGemfileLockContents.js +0 -17
  196. package/src/audit/rubyAnalysisEngine/sanitizer.js +0 -8
@@ -1,89 +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
- const { pollForSnapshotCompletition } = require('./sendSnapshot');
19
- module.exports = exports = (err, analysis) => {
20
- const { identifiedLanguageInfo } = analysis.languageAnalysis;
21
- const catalogueAppId = analysis.languageAnalysis.appId;
22
- if (err) {
23
- console.error(err);
24
- return;
25
- }
26
- const langCallback = async (err, analysis) => {
27
- const config = analysis.config;
28
- if (err) {
29
- console.log();
30
- console.log('***********' +
31
- i18n.__('languageAnalysisFactoryFailureHeader') +
32
- '****************');
33
- console.log(identifiedLanguageInfo.language);
34
- console.log();
35
- console.error(`${identifiedLanguageInfo.language}` +
36
- i18n.__('languageAnalysisFailure') +
37
- err);
38
- return process.exit(5);
39
- }
40
- const reportSpinner = returnOra(i18n.__('auditSCAAnalysisBegins'));
41
- startSpinner(reportSpinner);
42
- const snapshotResponse = await newSendSnapShot(analysis, catalogueAppId);
43
- const pollResult = await pollForSnapshotCompletition(analysis.config, snapshotResponse.id, reportSpinner);
44
- succeedSpinner(reportSpinner, 'Contrast SCA analysis complete');
45
- await vulnerabilityReport(analysis, catalogueAppId, snapshotResponse.id);
46
- await auditSave(config);
47
- };
48
- if (identifiedLanguageInfo.language === DOTNET) {
49
- dotnetAE(identifiedLanguageInfo, analysis.config, langCallback);
50
- }
51
- if (identifiedLanguageInfo.language === NODE) {
52
- nodeAE(identifiedLanguageInfo, analysis.config, langCallback);
53
- }
54
- if (identifiedLanguageInfo.language === JAVA) {
55
- javaAE(identifiedLanguageInfo, analysis.config, langCallback);
56
- }
57
- if (identifiedLanguageInfo.language === RUBY) {
58
- rubyAE(identifiedLanguageInfo, analysis.config, langCallback);
59
- }
60
- if (identifiedLanguageInfo.language === PYTHON) {
61
- pythonAE(identifiedLanguageInfo, analysis.config, langCallback);
62
- }
63
- if (identifiedLanguageInfo.language === PHP) {
64
- phpAE(identifiedLanguageInfo, analysis.config, langCallback);
65
- }
66
- if (identifiedLanguageInfo.language === GO) {
67
- goAE(identifiedLanguageInfo, analysis.config, langCallback);
68
- }
69
- };
70
- async function auditSave(config) {
71
- if (config.save) {
72
- if (config.save.toLowerCase() === 'sbom') {
73
- saveFile(config, await generateSbom(config));
74
- const filename = `${config.applicationId}-sbom-cyclonedx.json`;
75
- if (fs.existsSync(filename)) {
76
- console.log(i18n.__('auditSBOMSaveSuccess') + ` - ${filename}`);
77
- }
78
- else {
79
- console.log(chalk.yellow.bold(`\n Unable to save ${filename} Software Bill of Materials (SBOM)`));
80
- }
81
- }
82
- else {
83
- console.log(i18n.__('auditBadFiletypeSpecifiedForSave'));
84
- }
85
- }
86
- else if (config.save === null) {
87
- console.log(i18n.__('auditNoFiletypeSpecifiedForSave'));
88
- }
89
- }
@@ -1,159 +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 (isRubyProjectFilename(filename)) {
42
- deducedLanguages.push(filename);
43
- language = RUBY;
44
- }
45
- if (isPythonProjectFilename(filename)) {
46
- deducedLanguages.push(filename);
47
- language = PYTHON;
48
- }
49
- if (isNodeLockFilename(filename)) {
50
- deducedLanguages.push(filename);
51
- language = NODE;
52
- }
53
- if (isGoProjectFilename(filename)) {
54
- deducedLanguages.push({ language: GO, projectFilename: filename });
55
- language = GO;
56
- }
57
- });
58
- let identifiedLanguages = { [language]: deducedLanguages };
59
- return identifiedLanguages;
60
- };
61
- const deduceLanguage = filename => {
62
- const deducedLanguages = [];
63
- if (isJavaMavenProjectFilename(filename)) {
64
- deducedLanguages.push({ language: JAVA, projectFilename: filename });
65
- }
66
- if (isJavaGradleProjectFilename(filename)) {
67
- deducedLanguages.push({ language: JAVA, projectFilename: filename });
68
- }
69
- if (isNodeProjectFilename(filename)) {
70
- deducedLanguages.push({ language: NODE, projectFilename: filename });
71
- }
72
- if (isDotNetProjectFilename(filename)) {
73
- deducedLanguages.push({ language: DOTNET, projectFilename: filename });
74
- }
75
- if (isRubyProjectFilename(filename)) {
76
- deducedLanguages.push({ language: RUBY, projectFilename: filename });
77
- }
78
- if (isPythonProjectFilename(filename)) {
79
- deducedLanguages.push({ language: PYTHON, projectFilename: filename });
80
- }
81
- if (isPhpProjectFilename(filename)) {
82
- deducedLanguages.push({ language: PHP, projectFilename: filename });
83
- }
84
- if (isDotNetLockFilename(filename)) {
85
- deducedLanguages.push({ language: DOTNET, lockFilename: filename });
86
- }
87
- if (isNodeLockFilename(filename)) {
88
- deducedLanguages.push({ language: NODE, lockFilename: filename });
89
- }
90
- if (isRubyLockFilename(filename)) {
91
- deducedLanguages.push({ language: RUBY, lockFilename: filename });
92
- }
93
- if (isPipfileLockLockFilename(filename)) {
94
- deducedLanguages.push({ language: PYTHON, lockFilename: filename });
95
- }
96
- if (isPhpLockFilename(filename)) {
97
- deducedLanguages.push({ language: PHP, lockFilename: filename });
98
- }
99
- if (isGoProjectFilename(filename)) {
100
- deducedLanguages.push({ language: GO, projectFilename: filename });
101
- }
102
- return deducedLanguages;
103
- };
104
- const reduceIdentifiedLanguages = identifiedLanguages => identifiedLanguages.reduce((accumulator, identifiedLanguageInfo) => {
105
- const { language, projectFilename, lockFilename } = identifiedLanguageInfo;
106
- if (!(language in accumulator)) {
107
- accumulator[language] = { projectFilenames: [], lockFilenames: [] };
108
- }
109
- if (projectFilename) {
110
- accumulator[language].projectFilenames.push(projectFilename);
111
- }
112
- else {
113
- accumulator[language].lockFilenames.push(lockFilename);
114
- }
115
- return accumulator;
116
- }, {});
117
- module.exports = exports = (analysis, next) => {
118
- const { projectPath, languageAnalysis, config } = analysis;
119
- let identifiedLanguages = languageAnalysis.projectRootFilenames.reduce((accumulator, filename) => {
120
- const deducedLanguages = deduceLanguage(filename);
121
- return [...accumulator, ...deducedLanguages];
122
- }, []);
123
- if (Object.keys(identifiedLanguages).length === 0) {
124
- next(new Error(i18n.__('languageAnalysisNoLanguage', projectPath)));
125
- return;
126
- }
127
- let language = config.language;
128
- if (language === undefined) {
129
- languageAnalysis.identifiedLanguages =
130
- reduceIdentifiedLanguages(identifiedLanguages);
131
- }
132
- else {
133
- let refinedIdentifiedLanguages = [];
134
- for (let x in identifiedLanguages) {
135
- if (identifiedLanguages[x].language === language.toUpperCase() ||
136
- (identifiedLanguages[x].language === NODE &&
137
- language.toUpperCase() === JAVASCRIPT)) {
138
- refinedIdentifiedLanguages.push(identifiedLanguages[x]);
139
- }
140
- }
141
- if (refinedIdentifiedLanguages.length === 0) {
142
- console.log(`Could not detect language as specified: ${config.language}`);
143
- process.exit(1);
144
- }
145
- languageAnalysis.identifiedLanguages = reduceIdentifiedLanguages(refinedIdentifiedLanguages);
146
- }
147
- next();
148
- };
149
- exports.isJavaMavenProjectFilename = isJavaMavenProjectFilename;
150
- exports.isJavaGradleProjectFilename = isJavaGradleProjectFilename;
151
- exports.isNodeProjectFilename = isNodeProjectFilename;
152
- exports.isDotNetProjectFilename = isDotNetProjectFilename;
153
- exports.isDotNetLockFilename = isDotNetLockFilename;
154
- exports.isGoProjectFilename = isGoProjectFilename;
155
- exports.isPhpProjectFilename = isPhpProjectFilename;
156
- exports.isPhpLockFilename = isPhpLockFilename;
157
- exports.deduceLanguage = deduceLanguage;
158
- exports.reduceIdentifiedLanguages = reduceIdentifiedLanguages;
159
- 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
- };