@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.
- package/README.md +1 -1
- package/dist/audit/catalogueApplication/catalogueApplication.js +23 -5
- package/dist/audit/languageAnalysisEngine/getProjectRootFilenames.js +17 -26
- package/dist/audit/languageAnalysisEngine/report/commonReportingFunctions.js +98 -37
- package/dist/audit/languageAnalysisEngine/report/models/reportListModel.js +2 -1
- package/dist/audit/languageAnalysisEngine/report/models/reportOutputModel.js +4 -3
- package/dist/audit/languageAnalysisEngine/report/models/severityCountModel.js +3 -0
- package/dist/audit/languageAnalysisEngine/report/reportingFeature.js +87 -19
- package/dist/audit/languageAnalysisEngine/report/utils/reportUtils.js +40 -7
- package/dist/audit/languageAnalysisEngine/sendSnapshot.js +6 -30
- package/dist/audit/save.js +37 -0
- package/dist/commands/audit/auditConfig.js +0 -16
- package/dist/commands/audit/auditController.js +18 -11
- package/dist/commands/audit/help.js +31 -25
- package/dist/commands/audit/processAudit.js +2 -2
- package/dist/commands/audit/saveFile.js +8 -4
- package/dist/commands/scan/sca/scaAnalysis.js +54 -16
- package/dist/common/HTTPClient.js +14 -8
- package/dist/common/errorHandling.js +2 -2
- package/dist/common/versionChecker.js +19 -4
- package/dist/constants/constants.js +7 -2
- package/dist/constants/locales.js +44 -44
- package/dist/constants.js +31 -14
- package/dist/index.js +55 -45
- package/dist/lambda/lambda.js +5 -2
- package/dist/sbom/generateSbom.js +5 -4
- package/dist/scaAnalysis/common/formatMessage.js +33 -6
- package/dist/scaAnalysis/common/treeUpload.js +4 -6
- package/dist/scaAnalysis/dotnet/analysis.js +43 -0
- package/dist/scaAnalysis/dotnet/index.js +10 -0
- package/dist/scaAnalysis/go/goReadDepFile.js +1 -3
- package/dist/scaAnalysis/java/analysis.js +5 -5
- package/dist/scaAnalysis/javascript/analysis.js +107 -0
- package/dist/scaAnalysis/javascript/index.js +53 -0
- package/dist/scaAnalysis/php/analysis.js +70 -0
- package/dist/scaAnalysis/php/index.js +17 -0
- package/dist/scaAnalysis/python/analysis.js +8 -7
- package/dist/scaAnalysis/ruby/analysis.js +8 -16
- package/dist/scaAnalysis/ruby/index.js +2 -2
- package/dist/scan/autoDetection.js +13 -24
- package/dist/scan/fileUtils.js +44 -14
- package/dist/scan/formatScanOutput.js +3 -3
- package/dist/scan/scanConfig.js +2 -2
- package/dist/utils/commonApi.js +1 -1
- package/dist/utils/filterProjectPath.js +7 -2
- package/dist/utils/getConfig.js +1 -6
- package/package.json +2 -3
- package/src/audit/catalogueApplication/catalogueApplication.js +28 -6
- package/src/audit/languageAnalysisEngine/getProjectRootFilenames.js +22 -58
- package/src/audit/languageAnalysisEngine/report/commonReportingFunctions.ts +157 -47
- package/src/audit/languageAnalysisEngine/report/models/reportListModel.ts +4 -1
- package/src/audit/languageAnalysisEngine/report/models/reportOutputModel.ts +11 -5
- package/src/audit/languageAnalysisEngine/report/models/severityCountModel.ts +4 -0
- package/src/audit/languageAnalysisEngine/report/reportingFeature.ts +86 -32
- package/src/audit/languageAnalysisEngine/report/utils/reportUtils.ts +44 -5
- package/src/audit/languageAnalysisEngine/sendSnapshot.js +6 -32
- package/src/audit/save.js +48 -0
- package/src/commands/audit/auditConfig.ts +0 -25
- package/src/commands/audit/auditController.ts +18 -20
- package/src/commands/audit/help.ts +31 -25
- package/src/commands/audit/processAudit.ts +2 -5
- package/src/commands/audit/saveFile.ts +6 -2
- package/src/commands/scan/processScan.js +0 -1
- package/src/commands/scan/sca/scaAnalysis.js +87 -32
- package/src/common/HTTPClient.js +16 -9
- package/src/common/errorHandling.ts +2 -3
- package/src/common/versionChecker.ts +23 -4
- package/src/constants/constants.js +9 -3
- package/src/constants/locales.js +72 -50
- package/src/constants.js +32 -15
- package/src/index.ts +70 -58
- package/src/lambda/lambda.ts +5 -2
- package/src/lambda/types.ts +1 -0
- package/src/sbom/generateSbom.ts +2 -2
- package/src/scaAnalysis/common/formatMessage.js +35 -6
- package/src/scaAnalysis/common/treeUpload.js +4 -6
- package/src/scaAnalysis/dotnet/analysis.js +54 -0
- package/src/scaAnalysis/dotnet/index.js +11 -0
- package/src/scaAnalysis/go/goReadDepFile.js +1 -3
- package/src/scaAnalysis/java/analysis.js +5 -5
- package/src/scaAnalysis/javascript/analysis.js +126 -0
- package/src/scaAnalysis/javascript/index.js +75 -0
- package/src/scaAnalysis/php/analysis.js +78 -0
- package/src/scaAnalysis/php/index.js +22 -0
- package/src/scaAnalysis/python/analysis.js +8 -7
- package/src/scaAnalysis/ruby/analysis.js +8 -17
- package/src/scaAnalysis/ruby/index.js +2 -2
- package/src/scan/autoDetection.js +14 -27
- package/src/scan/fileUtils.js +46 -14
- package/src/scan/formatScanOutput.ts +3 -3
- package/src/scan/scanConfig.js +2 -4
- package/src/utils/commonApi.js +1 -1
- package/src/utils/filterProjectPath.js +6 -2
- package/src/utils/getConfig.ts +1 -12
- package/dist/audit/AnalysisEngine.js +0 -37
- package/dist/audit/autodetection/autoDetectLanguage.js +0 -32
- package/dist/audit/dotnetAnalysisEngine/index.js +0 -25
- package/dist/audit/dotnetAnalysisEngine/parseLockFileContents.js +0 -35
- package/dist/audit/dotnetAnalysisEngine/parseProjectFileContents.js +0 -15
- package/dist/audit/dotnetAnalysisEngine/readLockFileContents.js +0 -18
- package/dist/audit/dotnetAnalysisEngine/readProjectFileContents.js +0 -14
- package/dist/audit/dotnetAnalysisEngine/sanitizer.js +0 -9
- package/dist/audit/goAnalysisEngine/index.js +0 -17
- package/dist/audit/goAnalysisEngine/parseProjectFileContents.js +0 -164
- package/dist/audit/goAnalysisEngine/readProjectFileContents.js +0 -21
- package/dist/audit/goAnalysisEngine/sanitizer.js +0 -5
- package/dist/audit/javaAnalysisEngine/index.js +0 -34
- package/dist/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +0 -155
- package/dist/audit/javaAnalysisEngine/parseProjectFileContents.js +0 -353
- package/dist/audit/javaAnalysisEngine/readProjectFileContents.js +0 -98
- package/dist/audit/javaAnalysisEngine/sanitizer.js +0 -5
- package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +0 -25
- package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +0 -25
- package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +0 -35
- package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +0 -24
- package/dist/audit/languageAnalysisEngine/constants.js +0 -20
- package/dist/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +0 -25
- package/dist/audit/languageAnalysisEngine/index.js +0 -39
- package/dist/audit/languageAnalysisEngine/languageAnalysisFactory.js +0 -89
- package/dist/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +0 -159
- package/dist/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +0 -40
- package/dist/audit/nodeAnalysisEngine/index.js +0 -31
- package/dist/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +0 -18
- package/dist/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +0 -18
- package/dist/audit/nodeAnalysisEngine/readNPMLockFileContents.js +0 -17
- package/dist/audit/nodeAnalysisEngine/readProjectFileContents.js +0 -14
- package/dist/audit/nodeAnalysisEngine/readYarnLockFileContents.js +0 -24
- package/dist/audit/nodeAnalysisEngine/sanitizer.js +0 -9
- package/dist/audit/phpAnalysisEngine/index.js +0 -23
- package/dist/audit/phpAnalysisEngine/parseLockFileContents.js +0 -52
- package/dist/audit/phpAnalysisEngine/readLockFileContents.js +0 -13
- package/dist/audit/phpAnalysisEngine/readProjectFileContents.js +0 -16
- package/dist/audit/phpAnalysisEngine/sanitizer.js +0 -5
- package/dist/audit/pythonAnalysisEngine/index.js +0 -25
- package/dist/audit/pythonAnalysisEngine/parsePipfileLockContents.js +0 -17
- package/dist/audit/pythonAnalysisEngine/parseProjectFileContents.js +0 -21
- package/dist/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +0 -13
- package/dist/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +0 -14
- package/dist/audit/pythonAnalysisEngine/sanitizer.js +0 -7
- package/dist/audit/rubyAnalysisEngine/index.js +0 -25
- package/dist/audit/rubyAnalysisEngine/parseGemfileLockContents.js +0 -176
- package/dist/audit/rubyAnalysisEngine/parsedGemfile.js +0 -22
- package/dist/audit/rubyAnalysisEngine/readGemfileContents.js +0 -14
- package/dist/audit/rubyAnalysisEngine/readGemfileLockContents.js +0 -14
- package/dist/audit/rubyAnalysisEngine/sanitizer.js +0 -6
- package/src/audit/AnalysisEngine.js +0 -103
- package/src/audit/autodetection/autoDetectLanguage.ts +0 -40
- package/src/audit/dotnetAnalysisEngine/index.js +0 -26
- package/src/audit/dotnetAnalysisEngine/parseLockFileContents.js +0 -47
- package/src/audit/dotnetAnalysisEngine/parseProjectFileContents.js +0 -29
- package/src/audit/dotnetAnalysisEngine/readLockFileContents.js +0 -30
- package/src/audit/dotnetAnalysisEngine/readProjectFileContents.js +0 -26
- package/src/audit/dotnetAnalysisEngine/sanitizer.js +0 -11
- package/src/audit/goAnalysisEngine/index.js +0 -18
- package/src/audit/goAnalysisEngine/parseProjectFileContents.js +0 -209
- package/src/audit/goAnalysisEngine/readProjectFileContents.js +0 -31
- package/src/audit/goAnalysisEngine/sanitizer.js +0 -7
- package/src/audit/javaAnalysisEngine/index.js +0 -41
- package/src/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +0 -225
- package/src/audit/javaAnalysisEngine/parseProjectFileContents.js +0 -420
- package/src/audit/javaAnalysisEngine/readProjectFileContents.js +0 -141
- package/src/audit/javaAnalysisEngine/sanitizer.js +0 -6
- package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +0 -36
- package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +0 -42
- package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +0 -54
- package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +0 -33
- package/src/audit/languageAnalysisEngine/constants.js +0 -23
- package/src/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +0 -41
- package/src/audit/languageAnalysisEngine/index.js +0 -45
- package/src/audit/languageAnalysisEngine/languageAnalysisFactory.js +0 -124
- package/src/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +0 -250
- package/src/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +0 -49
- package/src/audit/nodeAnalysisEngine/index.js +0 -35
- package/src/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +0 -20
- package/src/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +0 -26
- package/src/audit/nodeAnalysisEngine/readNPMLockFileContents.js +0 -23
- package/src/audit/nodeAnalysisEngine/readProjectFileContents.js +0 -27
- package/src/audit/nodeAnalysisEngine/readYarnLockFileContents.js +0 -36
- package/src/audit/nodeAnalysisEngine/sanitizer.js +0 -11
- package/src/audit/phpAnalysisEngine/index.js +0 -27
- package/src/audit/phpAnalysisEngine/parseLockFileContents.js +0 -60
- package/src/audit/phpAnalysisEngine/readLockFileContents.js +0 -14
- package/src/audit/phpAnalysisEngine/readProjectFileContents.js +0 -25
- package/src/audit/phpAnalysisEngine/sanitizer.js +0 -4
- package/src/audit/pythonAnalysisEngine/index.js +0 -55
- package/src/audit/pythonAnalysisEngine/parsePipfileLockContents.js +0 -23
- package/src/audit/pythonAnalysisEngine/parseProjectFileContents.js +0 -33
- package/src/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +0 -16
- package/src/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +0 -22
- package/src/audit/pythonAnalysisEngine/sanitizer.js +0 -9
- package/src/audit/rubyAnalysisEngine/index.js +0 -30
- package/src/audit/rubyAnalysisEngine/parseGemfileLockContents.js +0 -215
- package/src/audit/rubyAnalysisEngine/parsedGemfile.js +0 -39
- package/src/audit/rubyAnalysisEngine/readGemfileContents.js +0 -18
- package/src/audit/rubyAnalysisEngine/readGemfileLockContents.js +0 -17
- package/src/audit/rubyAnalysisEngine/sanitizer.js +0 -8
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const { readFile, parseProjectFiles } = require('./analysis')
|
|
2
|
+
const { createPhpTSMessage } = require('../common/formatMessage')
|
|
3
|
+
|
|
4
|
+
const phpAnalysis = (config, files) => {
|
|
5
|
+
let analysis = readFiles(config, files.PHP)
|
|
6
|
+
const phpDep = parseProjectFiles(analysis)
|
|
7
|
+
return createPhpTSMessage(phpDep)
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const readFiles = (config, files) => {
|
|
11
|
+
let php = {}
|
|
12
|
+
|
|
13
|
+
php.composerJSON = JSON.parse(readFile(config, 'composer.json'))
|
|
14
|
+
|
|
15
|
+
php.rawLockFileContents = JSON.parse(readFile(config, 'composer.lock'))
|
|
16
|
+
|
|
17
|
+
return php
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
module.exports = {
|
|
21
|
+
phpAnalysis
|
|
22
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const multiReplace = require('string-multiple-replace')
|
|
2
2
|
const fs = require('fs')
|
|
3
3
|
|
|
4
|
-
const readAndParseProjectFile =
|
|
5
|
-
const filePath = filePathForWindows(
|
|
4
|
+
const readAndParseProjectFile = file => {
|
|
5
|
+
const filePath = filePathForWindows(file + '/Pipfile')
|
|
6
6
|
const pipFile = fs.readFileSync(filePath, 'utf8')
|
|
7
7
|
|
|
8
8
|
const matcherObj = { '"': '' }
|
|
@@ -14,20 +14,21 @@ const readAndParseProjectFile = projectPath => {
|
|
|
14
14
|
return pythonArray.filter(element => element !== '' && !element.includes('#'))
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
const readAndParseLockFile =
|
|
18
|
-
const filePath = filePathForWindows(
|
|
17
|
+
const readAndParseLockFile = file => {
|
|
18
|
+
const filePath = filePathForWindows(file + '/Pipfile.lock')
|
|
19
19
|
const lockFile = fs.readFileSync(filePath, 'utf8')
|
|
20
20
|
let parsedPipLock = JSON.parse(lockFile)
|
|
21
21
|
parsedPipLock['defaults'] = parsedPipLock['default']
|
|
22
|
+
delete parsedPipLock['default']
|
|
22
23
|
return parsedPipLock
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
const getPythonDeps = config => {
|
|
26
27
|
try {
|
|
27
|
-
const parseProject = readAndParseProjectFile(config.
|
|
28
|
-
const parsePip = readAndParseLockFile(config.
|
|
28
|
+
const parseProject = readAndParseProjectFile(config.file)
|
|
29
|
+
const parsePip = readAndParseLockFile(config.file)
|
|
29
30
|
|
|
30
|
-
return { pipfileLock:
|
|
31
|
+
return { pipfileLock: parsePip, pipfilDependanceies: parseProject }
|
|
31
32
|
} catch (err) {
|
|
32
33
|
console.log(err.message.toString())
|
|
33
34
|
process.exit(1)
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
const fs = require('fs')
|
|
2
2
|
|
|
3
|
-
const readAndParseGemfile =
|
|
4
|
-
const
|
|
5
|
-
const gemFile = fs.readFileSync(fileName, 'utf8')
|
|
3
|
+
const readAndParseGemfile = file => {
|
|
4
|
+
const gemFile = fs.readFileSync(file + '/Gemfile', 'utf8')
|
|
6
5
|
const rubyArray = gemFile.split('\n')
|
|
7
6
|
|
|
8
7
|
let filteredRubyDep = rubyArray.filter(element => {
|
|
@@ -20,9 +19,8 @@ const readAndParseGemfile = projectPath => {
|
|
|
20
19
|
return filteredRubyDep
|
|
21
20
|
}
|
|
22
21
|
|
|
23
|
-
const readAndParseGemLockFile =
|
|
24
|
-
const
|
|
25
|
-
const lockFile = fs.readFileSync(fileName, 'utf8')
|
|
22
|
+
const readAndParseGemLockFile = file => {
|
|
23
|
+
const lockFile = fs.readFileSync(file + '/Gemfile.lock', 'utf8')
|
|
26
24
|
const dependencyRegEx = /^\s*([A-Za-z0-9.!@#$%\-^&*_+]*)\s*(\((.*?)\))/
|
|
27
25
|
|
|
28
26
|
const lines = lockFile.split('\n')
|
|
@@ -35,7 +33,7 @@ const readAndParseGemLockFile = projectPath => {
|
|
|
35
33
|
}
|
|
36
34
|
|
|
37
35
|
const nonDependencyKeys = (line, sourceObject) => {
|
|
38
|
-
const GEMFILE_KEY_VALUE = /^\s*([^:(]*)\s
|
|
36
|
+
const GEMFILE_KEY_VALUE = /^\s*([^:(]*)\s*\:*\s*(.*)/
|
|
39
37
|
let parts = GEMFILE_KEY_VALUE.exec(line)
|
|
40
38
|
let key = parts[1].trim()
|
|
41
39
|
let value = parts[2] || ''
|
|
@@ -206,7 +204,7 @@ const getSourceArray = (lines, dependencyRegEx) => {
|
|
|
206
204
|
if (
|
|
207
205
|
(currentWS === 4 && nexlineWS === 4) ||
|
|
208
206
|
(currentWS === 6 && nexlineWS === 4) ||
|
|
209
|
-
nexlineWS
|
|
207
|
+
nexlineWS == ''
|
|
210
208
|
) {
|
|
211
209
|
let newObj = {}
|
|
212
210
|
newObj = JSON.parse(JSON.stringify(sourceObject))
|
|
@@ -245,8 +243,8 @@ const buildSourceDependencyWithVersion = (
|
|
|
245
243
|
|
|
246
244
|
const getRubyDeps = config => {
|
|
247
245
|
try {
|
|
248
|
-
const parsedGem = readAndParseGemfile(config.
|
|
249
|
-
const parsedLock = readAndParseGemLockFile(config.
|
|
246
|
+
const parsedGem = readAndParseGemfile(config.file)
|
|
247
|
+
const parsedLock = readAndParseGemLockFile(config.file)
|
|
250
248
|
|
|
251
249
|
return { gemfilesDependanceies: parsedGem, gemfileLock: parsedLock }
|
|
252
250
|
} catch (err) {
|
|
@@ -259,13 +257,6 @@ const trimWhiteSpace = string => {
|
|
|
259
257
|
return string.replace(/\s+/g, '')
|
|
260
258
|
}
|
|
261
259
|
|
|
262
|
-
const filePathForWindows = path => {
|
|
263
|
-
if (process.platform === 'win32') {
|
|
264
|
-
path = path.replace(/\//g, '\\')
|
|
265
|
-
}
|
|
266
|
-
return path
|
|
267
|
-
}
|
|
268
|
-
|
|
269
260
|
module.exports = {
|
|
270
261
|
getRubyDeps,
|
|
271
262
|
readAndParseGemfile,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const
|
|
1
|
+
const analysis = require('./analysis')
|
|
2
2
|
const { createRubyTSMessage } = require('../common/formatMessage')
|
|
3
3
|
|
|
4
4
|
const rubyAnalysis = (config, languageFiles) => {
|
|
5
|
-
const rubyDeps = getRubyDeps(config, languageFiles.RUBY)
|
|
5
|
+
const rubyDeps = analysis.getRubyDeps(config, languageFiles.RUBY)
|
|
6
6
|
return createRubyTSMessage(rubyDeps)
|
|
7
7
|
}
|
|
8
8
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const i18n = require('i18n')
|
|
2
2
|
const fileFinder = require('./fileUtils')
|
|
3
|
-
const languageResolver = require('../audit/languageAnalysisEngine/reduceIdentifiedLanguages')
|
|
4
3
|
const rootFile = require('../audit/languageAnalysisEngine/getProjectRootFilenames')
|
|
4
|
+
const path = require('path')
|
|
5
5
|
|
|
6
6
|
const autoDetectFileAndLanguage = async configToUse => {
|
|
7
7
|
const entries = await fileFinder.findFile()
|
|
@@ -28,36 +28,24 @@ const autoDetectFileAndLanguage = async configToUse => {
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
const autoDetectAuditFilesAndLanguages = async
|
|
31
|
+
const autoDetectAuditFilesAndLanguages = async filePath => {
|
|
32
32
|
let languagesFound = []
|
|
33
|
-
console.log(i18n.__('searchingAuditFileDirectory', process.cwd()))
|
|
34
33
|
|
|
35
|
-
|
|
36
|
-
await fileFinder.findFilesJavascript(languagesFound)
|
|
37
|
-
await fileFinder.findFilesPython(languagesFound)
|
|
38
|
-
await fileFinder.findFilesGo(languagesFound)
|
|
39
|
-
await fileFinder.findFilesPhp(languagesFound)
|
|
40
|
-
await fileFinder.findFilesRuby(languagesFound)
|
|
34
|
+
console.log(i18n.__('searchingAuditFileDirectory', filePath))
|
|
41
35
|
|
|
42
|
-
|
|
36
|
+
await fileFinder.findFilesJava(languagesFound, filePath)
|
|
37
|
+
await fileFinder.findFilesJavascript(languagesFound, filePath)
|
|
38
|
+
await fileFinder.findFilesPython(languagesFound, filePath)
|
|
39
|
+
await fileFinder.findFilesGo(languagesFound, filePath)
|
|
40
|
+
await fileFinder.findFilesPhp(languagesFound, filePath)
|
|
41
|
+
await fileFinder.findFilesRuby(languagesFound, filePath)
|
|
42
|
+
await fileFinder.findFilesDotNet(languagesFound, filePath)
|
|
43
|
+
|
|
44
|
+
if (languagesFound) {
|
|
43
45
|
return languagesFound
|
|
44
|
-
} else {
|
|
45
|
-
console.log(
|
|
46
|
-
'found multiple languages, please specify one using --file to run SCA analysis'
|
|
47
|
-
)
|
|
48
46
|
}
|
|
49
|
-
}
|
|
50
47
|
|
|
51
|
-
|
|
52
|
-
let projectRootFilenames = rootFile.getProjectRootFilenames(projectPath)
|
|
53
|
-
let identifiedLanguages =
|
|
54
|
-
languageResolver.deduceLanguageScaAnalysis(projectRootFilenames)
|
|
55
|
-
|
|
56
|
-
if (Object.keys(identifiedLanguages).length === 0) {
|
|
57
|
-
console.log(i18n.__('languageAnalysisNoLanguage', projectPath))
|
|
58
|
-
return []
|
|
59
|
-
}
|
|
60
|
-
return [identifiedLanguages]
|
|
48
|
+
return []
|
|
61
49
|
}
|
|
62
50
|
|
|
63
51
|
const hasWhiteSpace = s => {
|
|
@@ -100,6 +88,5 @@ module.exports = {
|
|
|
100
88
|
autoDetectFileAndLanguage,
|
|
101
89
|
errorOnFileDetection,
|
|
102
90
|
autoDetectAuditFilesAndLanguages,
|
|
103
|
-
errorOnAuditFileDetection
|
|
104
|
-
manualDetectAuditFilesAndLanguages
|
|
91
|
+
errorOnAuditFileDetection
|
|
105
92
|
}
|
package/src/scan/fileUtils.js
CHANGED
|
@@ -11,13 +11,14 @@ const findFile = async () => {
|
|
|
11
11
|
})
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
const findFilesJava = async languagesFound => {
|
|
14
|
+
const findFilesJava = async (languagesFound, filePath) => {
|
|
15
15
|
const result = await fg(
|
|
16
16
|
['**/pom.xml', '**/build.gradle', '**/build.gradle.kts'],
|
|
17
17
|
{
|
|
18
18
|
dot: false,
|
|
19
19
|
deep: 1,
|
|
20
|
-
onlyFiles: true
|
|
20
|
+
onlyFiles: true,
|
|
21
|
+
cwd: filePath ? filePath : process.cwd()
|
|
21
22
|
}
|
|
22
23
|
)
|
|
23
24
|
|
|
@@ -27,13 +28,14 @@ const findFilesJava = async languagesFound => {
|
|
|
27
28
|
return languagesFound
|
|
28
29
|
}
|
|
29
30
|
|
|
30
|
-
const findFilesJavascript = async languagesFound => {
|
|
31
|
+
const findFilesJavascript = async (languagesFound, filePath) => {
|
|
31
32
|
const result = await fg(
|
|
32
|
-
['**/package.json', '**/yarn.lock', '**/package
|
|
33
|
+
['**/package.json', '**/yarn.lock', '**/package-lock.json'],
|
|
33
34
|
{
|
|
34
35
|
dot: false,
|
|
35
36
|
deep: 1,
|
|
36
|
-
onlyFiles: true
|
|
37
|
+
onlyFiles: true,
|
|
38
|
+
cwd: filePath ? filePath : process.cwd()
|
|
37
39
|
}
|
|
38
40
|
)
|
|
39
41
|
|
|
@@ -43,11 +45,12 @@ const findFilesJavascript = async languagesFound => {
|
|
|
43
45
|
return languagesFound
|
|
44
46
|
}
|
|
45
47
|
|
|
46
|
-
const findFilesPython = async languagesFound => {
|
|
48
|
+
const findFilesPython = async (languagesFound, filePath) => {
|
|
47
49
|
const result = await fg(['**/Pipfile.lock', '**/Pipfile'], {
|
|
48
50
|
dot: false,
|
|
49
51
|
deep: 3,
|
|
50
|
-
onlyFiles: true
|
|
52
|
+
onlyFiles: true,
|
|
53
|
+
cwd: filePath ? filePath : process.cwd()
|
|
51
54
|
})
|
|
52
55
|
|
|
53
56
|
if (result.length > 0) {
|
|
@@ -56,11 +59,12 @@ const findFilesPython = async languagesFound => {
|
|
|
56
59
|
return languagesFound
|
|
57
60
|
}
|
|
58
61
|
|
|
59
|
-
const findFilesGo = async languagesFound => {
|
|
62
|
+
const findFilesGo = async (languagesFound, filePath) => {
|
|
60
63
|
const result = await fg(['**/go.mod'], {
|
|
61
64
|
dot: false,
|
|
62
65
|
deep: 3,
|
|
63
|
-
onlyFiles: true
|
|
66
|
+
onlyFiles: true,
|
|
67
|
+
cwd: filePath ? filePath : process.cwd()
|
|
64
68
|
})
|
|
65
69
|
|
|
66
70
|
if (result.length > 0) {
|
|
@@ -69,11 +73,12 @@ const findFilesGo = async languagesFound => {
|
|
|
69
73
|
return languagesFound
|
|
70
74
|
}
|
|
71
75
|
|
|
72
|
-
const findFilesRuby = async languagesFound => {
|
|
76
|
+
const findFilesRuby = async (languagesFound, filePath) => {
|
|
73
77
|
const result = await fg(['**/Gemfile', '**/Gemfile.lock'], {
|
|
74
78
|
dot: false,
|
|
75
79
|
deep: 3,
|
|
76
|
-
onlyFiles: true
|
|
80
|
+
onlyFiles: true,
|
|
81
|
+
cwd: filePath ? filePath : process.cwd()
|
|
77
82
|
})
|
|
78
83
|
|
|
79
84
|
if (result.length > 0) {
|
|
@@ -82,11 +87,12 @@ const findFilesRuby = async languagesFound => {
|
|
|
82
87
|
return languagesFound
|
|
83
88
|
}
|
|
84
89
|
|
|
85
|
-
const findFilesPhp = async languagesFound => {
|
|
90
|
+
const findFilesPhp = async (languagesFound, filePath) => {
|
|
86
91
|
const result = await fg(['**/composer.json', '**/composer.lock'], {
|
|
87
92
|
dot: false,
|
|
88
93
|
deep: 3,
|
|
89
|
-
onlyFiles: true
|
|
94
|
+
onlyFiles: true,
|
|
95
|
+
cwd: filePath ? filePath : process.cwd()
|
|
90
96
|
})
|
|
91
97
|
|
|
92
98
|
if (result.length > 0) {
|
|
@@ -95,6 +101,20 @@ const findFilesPhp = async languagesFound => {
|
|
|
95
101
|
return languagesFound
|
|
96
102
|
}
|
|
97
103
|
|
|
104
|
+
const findFilesDotNet = async (languagesFound, filePath) => {
|
|
105
|
+
const result = await fg(['**/*.csproj', '**/packages.lock.json'], {
|
|
106
|
+
dot: false,
|
|
107
|
+
deep: 3,
|
|
108
|
+
onlyFiles: true,
|
|
109
|
+
cwd: filePath ? filePath : process.cwd()
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
if (result.length > 0) {
|
|
113
|
+
return languagesFound.push({ DOTNET: result })
|
|
114
|
+
}
|
|
115
|
+
return languagesFound
|
|
116
|
+
}
|
|
117
|
+
|
|
98
118
|
const checkFilePermissions = file => {
|
|
99
119
|
let readableFile = false
|
|
100
120
|
try {
|
|
@@ -112,7 +132,18 @@ const fileExists = path => {
|
|
|
112
132
|
|
|
113
133
|
const fileIsEmpty = path => {
|
|
114
134
|
if (fileExists(path) && checkFilePermissions(path)) {
|
|
115
|
-
|
|
135
|
+
try {
|
|
136
|
+
return fs.readFileSync(path).length === 0
|
|
137
|
+
} catch (e) {
|
|
138
|
+
if (
|
|
139
|
+
e.message.toString().includes('illegal operation on a directory, read')
|
|
140
|
+
) {
|
|
141
|
+
console.log('file provided cannot be a directory')
|
|
142
|
+
} else {
|
|
143
|
+
console.log(e.message.toString())
|
|
144
|
+
}
|
|
145
|
+
process.exit(0)
|
|
146
|
+
}
|
|
116
147
|
}
|
|
117
148
|
return false
|
|
118
149
|
}
|
|
@@ -127,5 +158,6 @@ module.exports = {
|
|
|
127
158
|
findFilesGo,
|
|
128
159
|
findFilesPhp,
|
|
129
160
|
findFilesRuby,
|
|
161
|
+
findFilesDotNet,
|
|
130
162
|
fileIsEmpty
|
|
131
163
|
}
|
|
@@ -34,8 +34,9 @@ export function formatScanOutput(scanResults: ScanResultsModel) {
|
|
|
34
34
|
|
|
35
35
|
let defaultView = getDefaultView(scanResultsInstances.content)
|
|
36
36
|
|
|
37
|
-
let count =
|
|
37
|
+
let count = 0
|
|
38
38
|
defaultView.forEach(entry => {
|
|
39
|
+
count++
|
|
39
40
|
let table = new Table({
|
|
40
41
|
chars: {
|
|
41
42
|
top: '',
|
|
@@ -98,7 +99,6 @@ export function formatScanOutput(scanResults: ScanResultsModel) {
|
|
|
98
99
|
]
|
|
99
100
|
table.push(learnRow)
|
|
100
101
|
}
|
|
101
|
-
count--
|
|
102
102
|
console.log(table.toString())
|
|
103
103
|
console.log()
|
|
104
104
|
})
|
|
@@ -179,7 +179,7 @@ export function getDefaultView(content: ResultContent[]) {
|
|
|
179
179
|
assignBySeverity(resultEntry, groupResultsObj)
|
|
180
180
|
})
|
|
181
181
|
|
|
182
|
-
return sortBy(groupTypeResults, ['priority'])
|
|
182
|
+
return sortBy(groupTypeResults, ['priority'])
|
|
183
183
|
}
|
|
184
184
|
export function editVulName(message: string) {
|
|
185
185
|
return message.substring(message.indexOf(' in '))
|
package/src/scan/scanConfig.js
CHANGED
|
@@ -2,9 +2,7 @@ const paramHandler = require('../utils/paramsUtil/paramHandler')
|
|
|
2
2
|
const constants = require('../../src/constants.js')
|
|
3
3
|
const parsedCLIOptions = require('../../src/utils/parsedCLIOptions')
|
|
4
4
|
const path = require('path')
|
|
5
|
-
const {
|
|
6
|
-
supportedLanguages
|
|
7
|
-
} = require('../audit/languageAnalysisEngine/constants')
|
|
5
|
+
const { supportedLanguagesScan } = require('../constants/constants')
|
|
8
6
|
const i18n = require('i18n')
|
|
9
7
|
const { scanUsageGuide } = require('./help')
|
|
10
8
|
|
|
@@ -23,7 +21,7 @@ const getScanConfig = argv => {
|
|
|
23
21
|
|
|
24
22
|
if (scanParams.language) {
|
|
25
23
|
scanParams.language = scanParams.language.toUpperCase()
|
|
26
|
-
if (!Object.values(
|
|
24
|
+
if (!Object.values(supportedLanguagesScan).includes(scanParams.language)) {
|
|
27
25
|
console.log(`Did not recognise --language ${scanParams.language}`)
|
|
28
26
|
console.log(i18n.__('constantsHowToRunDev3'))
|
|
29
27
|
process.exit(1)
|
package/src/utils/commonApi.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const path = require('path')
|
|
2
|
+
const child_process = require('child_process')
|
|
2
3
|
|
|
3
4
|
function resolveFilePath(filepath) {
|
|
4
5
|
if (filepath[0] === '~') {
|
|
@@ -8,10 +9,13 @@ function resolveFilePath(filepath) {
|
|
|
8
9
|
}
|
|
9
10
|
|
|
10
11
|
const returnProjectPath = () => {
|
|
11
|
-
if (process.
|
|
12
|
+
if (process.platform == 'win32') {
|
|
13
|
+
let winPath = child_process.execSync('cd').toString()
|
|
14
|
+
return winPath.replace(/\//g, '\\').trim()
|
|
15
|
+
} else if (process.env.PWD !== (undefined || null || 'undefined')) {
|
|
12
16
|
return process.env.PWD
|
|
13
17
|
} else {
|
|
14
|
-
return process.argv[process.argv.indexOf('--
|
|
18
|
+
return process.argv[process.argv.indexOf('--file') + 1]
|
|
15
19
|
}
|
|
16
20
|
}
|
|
17
21
|
|
package/src/utils/getConfig.ts
CHANGED
|
@@ -33,11 +33,6 @@ const localConfig = (name: string, version: string) => {
|
|
|
33
33
|
return config
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
const createConfigFromYaml = (yamlPath: string) => {
|
|
37
|
-
const yamlConfig = {}
|
|
38
|
-
return yamlConfig
|
|
39
|
-
}
|
|
40
|
-
|
|
41
36
|
const setConfigValues = (config: ContrastConf, values: ContrastConfOptions) => {
|
|
42
37
|
config.set('apiKey', values.apiKey)
|
|
43
38
|
config.set('organizationId', values.orgId)
|
|
@@ -45,10 +40,4 @@ const setConfigValues = (config: ContrastConf, values: ContrastConfOptions) => {
|
|
|
45
40
|
values.host ? config.set('host', values.host) : null
|
|
46
41
|
}
|
|
47
42
|
|
|
48
|
-
export {
|
|
49
|
-
localConfig,
|
|
50
|
-
createConfigFromYaml,
|
|
51
|
-
setConfigValues,
|
|
52
|
-
ContrastConf,
|
|
53
|
-
ContrastConfOptions
|
|
54
|
-
}
|
|
43
|
+
export { localConfig, setConfigValues, ContrastConf, ContrastConfOptions }
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
class AnalysisEngine {
|
|
3
|
-
constructor(initAnalysis = {}) {
|
|
4
|
-
this.analyzers = [];
|
|
5
|
-
this.analysis = { ...initAnalysis };
|
|
6
|
-
}
|
|
7
|
-
use(analyzer) {
|
|
8
|
-
if (Array.isArray(analyzer)) {
|
|
9
|
-
this.analyzers = [...this.analyzers, ...analyzer];
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
this.analyzers.push(analyzer);
|
|
13
|
-
}
|
|
14
|
-
analyze(callback, config) {
|
|
15
|
-
let i = 0;
|
|
16
|
-
const next = err => {
|
|
17
|
-
if (err) {
|
|
18
|
-
return setImmediate(() => callback(err, this.analysis));
|
|
19
|
-
}
|
|
20
|
-
if (i >= this.analyzers.length) {
|
|
21
|
-
return setImmediate(() => callback(null, this.analysis));
|
|
22
|
-
}
|
|
23
|
-
const analyzer = this.analyzers[i];
|
|
24
|
-
i++;
|
|
25
|
-
setImmediate(() => {
|
|
26
|
-
try {
|
|
27
|
-
analyzer(this.analysis, next, config);
|
|
28
|
-
}
|
|
29
|
-
catch (uncaughtErr) {
|
|
30
|
-
next(uncaughtErr);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
next();
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
module.exports = exports = AnalysisEngine;
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.determineProjectLanguage = exports.identifyLanguages = void 0;
|
|
7
|
-
const i18n_1 = __importDefault(require("i18n"));
|
|
8
|
-
const reduceIdentifiedLanguages_1 = require("../languageAnalysisEngine/reduceIdentifiedLanguages");
|
|
9
|
-
const getProjectRootFilenames_1 = require("../languageAnalysisEngine/getProjectRootFilenames");
|
|
10
|
-
function identifyLanguages(config) {
|
|
11
|
-
const { projectPath } = config;
|
|
12
|
-
const projectRootFilenames = (0, getProjectRootFilenames_1.getProjectRootFilenames)(projectPath);
|
|
13
|
-
const identifiedLanguages = projectRootFilenames.reduce((accumulator, filename) => {
|
|
14
|
-
const deducedLanguages = (0, reduceIdentifiedLanguages_1.deduceLanguage)(filename);
|
|
15
|
-
return [...accumulator, ...deducedLanguages];
|
|
16
|
-
}, []);
|
|
17
|
-
if (Object.keys(identifiedLanguages).length === 0) {
|
|
18
|
-
throw new Error(i18n_1.default.__('languageAnalysisNoLanguage', projectPath));
|
|
19
|
-
}
|
|
20
|
-
return (0, reduceIdentifiedLanguages_1.reduceIdentifiedLanguages)(identifiedLanguages);
|
|
21
|
-
}
|
|
22
|
-
exports.identifyLanguages = identifyLanguages;
|
|
23
|
-
function determineProjectLanguage(reducedLanguages) {
|
|
24
|
-
const reducedLanguagesKeys = Object.keys(reducedLanguages);
|
|
25
|
-
if (reducedLanguagesKeys.length === 1) {
|
|
26
|
-
return reducedLanguagesKeys[0];
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
throw new Error('Detected multiple languages. Please specify a single language using --language');
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
exports.determineProjectLanguage = determineProjectLanguage;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const AnalysisEngine = require('../AnalysisEngine');
|
|
3
|
-
const readProjectFileContents = require('./readProjectFileContents');
|
|
4
|
-
const parseProjectFileContents = require('./parseProjectFileContents');
|
|
5
|
-
const readLockFileContents = require('./readLockFileContents');
|
|
6
|
-
const parseLockFileContents = require('./parseLockFileContents');
|
|
7
|
-
const sanitizer = require('./sanitizer');
|
|
8
|
-
const i18n = require('i18n');
|
|
9
|
-
module.exports = exports = (language, config, callback) => {
|
|
10
|
-
const ae = new AnalysisEngine({ language, config, dotnet: {} });
|
|
11
|
-
ae.use([
|
|
12
|
-
readProjectFileContents,
|
|
13
|
-
parseProjectFileContents,
|
|
14
|
-
readLockFileContents,
|
|
15
|
-
parseLockFileContents,
|
|
16
|
-
sanitizer
|
|
17
|
-
]);
|
|
18
|
-
ae.analyze((err, analysis) => {
|
|
19
|
-
if (err) {
|
|
20
|
-
callback(new Error(i18n.__('dotnetAnalysisFailure') + err.message));
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
callback(null, analysis);
|
|
24
|
-
});
|
|
25
|
-
};
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const i18n = require('i18n');
|
|
3
|
-
module.exports = exports = ({ language: { lockFilePath }, dotnet }, next) => {
|
|
4
|
-
const { rawLockFileContents } = dotnet;
|
|
5
|
-
if (!rawLockFileContents) {
|
|
6
|
-
next();
|
|
7
|
-
return;
|
|
8
|
-
}
|
|
9
|
-
try {
|
|
10
|
-
let count = 0;
|
|
11
|
-
dotnet.lockFile = JSON.parse(rawLockFileContents);
|
|
12
|
-
for (const dependenciesNode in dotnet.lockFile.dependencies) {
|
|
13
|
-
for (const innerNode in dotnet.lockFile.dependencies[dependenciesNode]) {
|
|
14
|
-
const nodeValidation = JSON.stringify(dotnet.lockFile.dependencies[dependenciesNode][innerNode]);
|
|
15
|
-
if (nodeValidation.includes('"type":"Project"')) {
|
|
16
|
-
count += 1;
|
|
17
|
-
delete dotnet.lockFile.dependencies[dependenciesNode][innerNode];
|
|
18
|
-
dotnet.additionalInfo = 'dependenciesNote';
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
if (count > 0) {
|
|
23
|
-
const multiLevelProjectWarning = () => {
|
|
24
|
-
console.log('');
|
|
25
|
-
console.log(i18n.__('dependenciesNote'));
|
|
26
|
-
};
|
|
27
|
-
setTimeout(multiLevelProjectWarning, 7000);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
catch (err) {
|
|
31
|
-
next(new Error(i18n.__('dotnetParseLockfile', lockFilePath) + `${err.message}`));
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
next();
|
|
35
|
-
};
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const xml2js = require('xml2js');
|
|
3
|
-
const i18n = require('i18n');
|
|
4
|
-
module.exports = exports = ({ language: { projectFilePath }, dotnet }, next) => {
|
|
5
|
-
const { rawProjectFileContents } = dotnet;
|
|
6
|
-
const parser = new xml2js.Parser({ explicitArray: false, mergeAttrs: true });
|
|
7
|
-
parser.parseString(rawProjectFileContents, (err, projectFileXML) => {
|
|
8
|
-
if (err) {
|
|
9
|
-
next(new Error(i18n.__('dotnetParseProjectFile', projectFilePath) + `${err}`));
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
dotnet.projectFile = projectFileXML;
|
|
13
|
-
next();
|
|
14
|
-
});
|
|
15
|
-
};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const fs = require('fs');
|
|
3
|
-
const i18n = require('i18n');
|
|
4
|
-
module.exports = exports = (analysis, next) => {
|
|
5
|
-
const { language: { lockFilePath }, dotnet } = analysis;
|
|
6
|
-
if (!lockFilePath) {
|
|
7
|
-
next();
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
try {
|
|
11
|
-
dotnet.rawLockFileContents = fs.readFileSync(lockFilePath);
|
|
12
|
-
}
|
|
13
|
-
catch (err) {
|
|
14
|
-
next(new Error(i18n.__('dotnetReadLockfile', lockFilePath) + `${err.message}`));
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
next();
|
|
18
|
-
};
|
|
@@ -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 }, dotnet } = analysis;
|
|
6
|
-
try {
|
|
7
|
-
dotnet.rawProjectFileContents = fs.readFileSync(projectFilePath);
|
|
8
|
-
}
|
|
9
|
-
catch (err) {
|
|
10
|
-
next(new Error(i18n.__('dotnetReadProjectFile', projectFilePath) + `${err.message}`));
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
next();
|
|
14
|
-
};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
module.exports = exports = ({ dotnet }, next) => {
|
|
3
|
-
delete dotnet.rawProjectFileContents;
|
|
4
|
-
delete dotnet.parsedProjectFileContents;
|
|
5
|
-
delete dotnet.projectFileXML;
|
|
6
|
-
delete dotnet.packageReferences;
|
|
7
|
-
delete dotnet.rawLockFileContents;
|
|
8
|
-
next();
|
|
9
|
-
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const AnalysisEngine = require('../AnalysisEngine');
|
|
3
|
-
const readProjectFileContents = require('./readProjectFileContents');
|
|
4
|
-
const parseProjectFileContents = require('./parseProjectFileContents');
|
|
5
|
-
const sanitizer = require('./sanitizer');
|
|
6
|
-
const i18n = require('i18n');
|
|
7
|
-
module.exports = exports = (language, config, callback) => {
|
|
8
|
-
const ae = new AnalysisEngine({ language, config, go: {} });
|
|
9
|
-
ae.use([readProjectFileContents, parseProjectFileContents, sanitizer]);
|
|
10
|
-
ae.analyze((err, analysis) => {
|
|
11
|
-
if (err) {
|
|
12
|
-
callback(new Error(i18n.__('goAnalysisError') + `${err.message}`));
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
callback(null, analysis);
|
|
16
|
-
});
|
|
17
|
-
};
|