@contrast/contrast 1.0.0 → 1.0.3
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/.prettierignore +3 -0
- package/README.md +115 -78
- package/dist/audit/AnalysisEngine.js +37 -0
- package/dist/audit/catalogueApplication/catalogueApplication.js +36 -0
- package/dist/audit/dotnetAnalysisEngine/index.js +25 -0
- package/dist/audit/dotnetAnalysisEngine/parseLockFileContents.js +35 -0
- package/dist/audit/dotnetAnalysisEngine/parseProjectFileContents.js +15 -0
- package/dist/audit/dotnetAnalysisEngine/readLockFileContents.js +18 -0
- package/dist/audit/dotnetAnalysisEngine/readProjectFileContents.js +14 -0
- package/dist/audit/dotnetAnalysisEngine/sanitizer.js +9 -0
- package/dist/audit/goAnalysisEngine/index.js +17 -0
- package/dist/audit/goAnalysisEngine/parseProjectFileContents.js +164 -0
- package/dist/audit/goAnalysisEngine/readProjectFileContents.js +21 -0
- package/dist/audit/goAnalysisEngine/sanitizer.js +5 -0
- package/dist/audit/javaAnalysisEngine/index.js +34 -0
- package/dist/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +153 -0
- package/dist/audit/javaAnalysisEngine/parseProjectFileContents.js +353 -0
- package/dist/audit/javaAnalysisEngine/readProjectFileContents.js +98 -0
- package/dist/audit/javaAnalysisEngine/sanitizer.js +5 -0
- package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +24 -0
- package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +24 -0
- package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +35 -0
- package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +23 -0
- package/dist/audit/languageAnalysisEngine/commonApi.js +18 -0
- package/dist/audit/languageAnalysisEngine/constants.js +20 -0
- package/dist/audit/languageAnalysisEngine/filterProjectPath.js +20 -0
- package/dist/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +25 -0
- package/dist/audit/languageAnalysisEngine/getProjectRootFilenames.js +39 -0
- package/dist/audit/languageAnalysisEngine/index.js +39 -0
- package/dist/audit/languageAnalysisEngine/langugageAnalysisFactory.js +95 -0
- package/dist/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +121 -0
- package/dist/audit/languageAnalysisEngine/report/checkIgnoreDevDep.js +17 -0
- package/dist/audit/languageAnalysisEngine/report/commonReportingFunctions.js +257 -0
- package/dist/audit/languageAnalysisEngine/report/newReportingFeature.js +81 -0
- package/dist/audit/languageAnalysisEngine/report/reportingFeature.js +133 -0
- package/dist/audit/languageAnalysisEngine/sendSnapshot.js +41 -0
- package/dist/audit/languageAnalysisEngine/util/capabilities.js +11 -0
- package/dist/audit/languageAnalysisEngine/util/generalAPI.js +39 -0
- package/dist/audit/languageAnalysisEngine/util/requestUtils.js +14 -0
- package/dist/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +40 -0
- package/dist/audit/nodeAnalysisEngine/index.js +31 -0
- package/dist/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +18 -0
- package/dist/audit/nodeAnalysisEngine/parseYarn2LockFileContents.js +51 -0
- package/dist/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +18 -0
- package/dist/audit/nodeAnalysisEngine/readNPMLockFileContents.js +17 -0
- package/dist/audit/nodeAnalysisEngine/readProjectFileContents.js +14 -0
- package/dist/audit/nodeAnalysisEngine/readYarnLockFileContents.js +24 -0
- package/dist/audit/nodeAnalysisEngine/sanitizer.js +9 -0
- package/dist/audit/phpAnalysisEngine/index.js +23 -0
- package/dist/audit/phpAnalysisEngine/parseLockFileContents.js +52 -0
- package/dist/audit/phpAnalysisEngine/readLockFileContents.js +13 -0
- package/dist/audit/phpAnalysisEngine/readProjectFileContents.js +16 -0
- package/dist/audit/phpAnalysisEngine/sanitizer.js +5 -0
- package/dist/audit/pythonAnalysisEngine/index.js +25 -0
- package/dist/audit/pythonAnalysisEngine/parsePipfileLockContents.js +17 -0
- package/dist/audit/pythonAnalysisEngine/parseProjectFileContents.js +21 -0
- package/dist/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +13 -0
- package/dist/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +14 -0
- package/dist/audit/pythonAnalysisEngine/sanitizer.js +7 -0
- package/dist/audit/rubyAnalysisEngine/index.js +25 -0
- package/dist/audit/rubyAnalysisEngine/parseGemfileLockContents.js +176 -0
- package/dist/audit/rubyAnalysisEngine/parsedGemfile.js +22 -0
- package/dist/audit/rubyAnalysisEngine/readGemfileContents.js +14 -0
- package/dist/audit/rubyAnalysisEngine/readGemfileLockContents.js +14 -0
- package/dist/audit/rubyAnalysisEngine/sanitizer.js +6 -0
- package/dist/commands/audit/auditConfig.js +25 -0
- package/dist/commands/audit/auditController.js +31 -0
- package/dist/commands/audit/help.js +52 -0
- package/dist/commands/audit/processAudit.js +18 -0
- package/dist/commands/audit/saveFile.js +11 -0
- package/dist/commands/auth/auth.js +20 -2
- package/dist/commands/config/config.js +19 -8
- package/dist/commands/scan/processScan.js +9 -13
- package/dist/common/HTTPClient.js +112 -13
- package/dist/common/errorHandling.js +65 -1
- package/dist/common/versionChecker.js +30 -0
- package/dist/constants/constants.js +4 -2
- package/dist/constants/lambda.js +32 -4
- package/dist/constants/locales.js +60 -21
- package/dist/constants.js +181 -21
- package/dist/index.js +50 -23
- package/dist/lambda/aws.js +14 -11
- package/dist/lambda/help.js +4 -0
- package/dist/lambda/lambda.js +50 -27
- package/dist/lambda/lambdaUtils.js +72 -0
- package/dist/lambda/logUtils.js +11 -1
- package/dist/lambda/scanDetailCompletion.js +4 -4
- package/dist/lambda/scanRequest.js +11 -5
- package/dist/lambda/utils.js +110 -53
- package/dist/sbom/generateSbom.js +20 -0
- package/dist/scan/autoDetection.js +0 -32
- package/dist/scan/fileUtils.js +1 -1
- package/dist/scan/help.js +14 -40
- package/dist/scan/populateProjectIdAndProjectName.js +5 -0
- package/dist/scan/saveResults.js +14 -0
- package/dist/scan/scan.js +105 -40
- package/dist/scan/scanConfig.js +39 -0
- package/dist/scan/scanController.js +19 -16
- package/dist/scan/scanResults.js +24 -16
- package/dist/utils/commonApi.js +3 -3
- package/dist/utils/paramsUtil/commandlineParams.js +1 -20
- package/dist/utils/paramsUtil/paramHandler.js +3 -6
- package/dist/utils/parsedCLIOptions.js +14 -8
- package/dist/utils/requestUtils.js +1 -1
- package/dist/utils/saveFile.js +19 -0
- package/package.json +26 -21
- package/src/audit/AnalysisEngine.js +103 -0
- package/src/audit/catalogueApplication/catalogueApplication.js +42 -0
- package/src/audit/dotnetAnalysisEngine/index.js +26 -0
- package/src/audit/dotnetAnalysisEngine/parseLockFileContents.js +47 -0
- package/src/audit/dotnetAnalysisEngine/parseProjectFileContents.js +29 -0
- package/src/audit/dotnetAnalysisEngine/readLockFileContents.js +30 -0
- package/src/audit/dotnetAnalysisEngine/readProjectFileContents.js +26 -0
- package/src/audit/dotnetAnalysisEngine/sanitizer.js +11 -0
- package/src/audit/goAnalysisEngine/index.js +18 -0
- package/src/audit/goAnalysisEngine/parseProjectFileContents.js +209 -0
- package/src/audit/goAnalysisEngine/readProjectFileContents.js +31 -0
- package/src/audit/goAnalysisEngine/sanitizer.js +7 -0
- package/src/audit/javaAnalysisEngine/index.js +41 -0
- package/src/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +222 -0
- package/src/audit/javaAnalysisEngine/parseProjectFileContents.js +420 -0
- package/src/audit/javaAnalysisEngine/readProjectFileContents.js +141 -0
- package/src/audit/javaAnalysisEngine/sanitizer.js +6 -0
- package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +35 -0
- package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +41 -0
- package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +54 -0
- package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +32 -0
- package/src/audit/languageAnalysisEngine/commonApi.js +20 -0
- package/src/audit/languageAnalysisEngine/constants.js +23 -0
- package/src/audit/languageAnalysisEngine/filterProjectPath.js +21 -0
- package/src/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +41 -0
- package/src/audit/languageAnalysisEngine/getProjectRootFilenames.js +72 -0
- package/src/audit/languageAnalysisEngine/index.js +45 -0
- package/src/audit/languageAnalysisEngine/langugageAnalysisFactory.js +126 -0
- package/src/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +177 -0
- package/src/audit/languageAnalysisEngine/report/checkIgnoreDevDep.js +27 -0
- package/src/audit/languageAnalysisEngine/report/commonReportingFunctions.js +303 -0
- package/src/audit/languageAnalysisEngine/report/newReportingFeature.js +124 -0
- package/src/audit/languageAnalysisEngine/report/reportingFeature.js +190 -0
- package/src/audit/languageAnalysisEngine/sendSnapshot.js +51 -0
- package/src/audit/languageAnalysisEngine/util/capabilities.js +12 -0
- package/src/audit/languageAnalysisEngine/util/generalAPI.js +43 -0
- package/src/audit/languageAnalysisEngine/util/requestUtils.js +17 -0
- package/src/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +49 -0
- package/src/audit/nodeAnalysisEngine/index.js +35 -0
- package/src/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +20 -0
- package/src/audit/nodeAnalysisEngine/parseYarn2LockFileContents.js +63 -0
- package/src/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +26 -0
- package/src/audit/nodeAnalysisEngine/readNPMLockFileContents.js +23 -0
- package/src/audit/nodeAnalysisEngine/readProjectFileContents.js +27 -0
- package/src/audit/nodeAnalysisEngine/readYarnLockFileContents.js +36 -0
- package/src/audit/nodeAnalysisEngine/sanitizer.js +11 -0
- package/src/audit/phpAnalysisEngine/index.js +27 -0
- package/src/audit/phpAnalysisEngine/parseLockFileContents.js +60 -0
- package/src/audit/phpAnalysisEngine/readLockFileContents.js +14 -0
- package/src/audit/phpAnalysisEngine/readProjectFileContents.js +25 -0
- package/src/audit/phpAnalysisEngine/sanitizer.js +4 -0
- package/src/audit/pythonAnalysisEngine/index.js +55 -0
- package/src/audit/pythonAnalysisEngine/parsePipfileLockContents.js +23 -0
- package/src/audit/pythonAnalysisEngine/parseProjectFileContents.js +33 -0
- package/src/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +16 -0
- package/src/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +22 -0
- package/src/audit/pythonAnalysisEngine/sanitizer.js +9 -0
- package/src/audit/rubyAnalysisEngine/index.js +30 -0
- package/src/audit/rubyAnalysisEngine/parseGemfileLockContents.js +215 -0
- package/src/audit/rubyAnalysisEngine/parsedGemfile.js +39 -0
- package/src/audit/rubyAnalysisEngine/readGemfileContents.js +18 -0
- package/src/audit/rubyAnalysisEngine/readGemfileLockContents.js +17 -0
- package/src/audit/rubyAnalysisEngine/sanitizer.js +8 -0
- package/src/commands/audit/auditConfig.ts +30 -0
- package/src/commands/audit/auditController.ts +31 -0
- package/src/commands/audit/help.ts +48 -0
- package/src/commands/audit/processAudit.ts +18 -0
- package/src/commands/audit/saveFile.ts +6 -0
- package/src/commands/auth/auth.js +26 -2
- package/src/commands/config/config.js +22 -8
- package/src/commands/scan/processScan.js +9 -13
- package/src/common/HTTPClient.js +149 -14
- package/src/common/errorHandling.ts +85 -2
- package/src/common/versionChecker.ts +39 -0
- package/src/constants/constants.js +5 -4
- package/src/constants/lambda.js +45 -4
- package/src/constants/locales.js +76 -26
- package/src/constants.js +204 -23
- package/src/index.ts +67 -27
- package/src/lambda/aws.ts +13 -12
- package/src/lambda/help.ts +4 -0
- package/src/lambda/lambda.ts +53 -34
- package/src/lambda/lambdaUtils.ts +111 -0
- package/src/lambda/logUtils.ts +19 -1
- package/src/lambda/scanDetailCompletion.ts +4 -4
- package/src/lambda/scanRequest.ts +13 -11
- package/src/lambda/utils.ts +149 -81
- package/src/sbom/generateSbom.ts +17 -0
- package/src/scan/autoDetection.js +0 -29
- package/src/scan/fileUtils.js +1 -1
- package/src/scan/help.js +14 -45
- package/src/scan/populateProjectIdAndProjectName.js +5 -0
- package/src/scan/saveResults.js +14 -0
- package/src/scan/scan.js +127 -58
- package/src/scan/scanConfig.js +54 -0
- package/src/scan/scanController.js +22 -15
- package/src/scan/scanResults.js +32 -19
- package/src/utils/commonApi.js +2 -3
- package/src/utils/getConfig.ts +2 -0
- package/src/utils/paramsUtil/commandlineParams.js +1 -26
- package/src/utils/paramsUtil/paramHandler.js +3 -7
- package/src/utils/parsedCLIOptions.js +11 -9
- package/src/utils/requestUtils.js +1 -1
- package/src/utils/saveFile.js +19 -0
- package/dist/lambda/scanDetail.js +0 -30
- package/dist/scan/fileFinder.js +0 -15
- package/dist/utils/paramsUtil/yamlParams.js +0 -6
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const paramHandler = require('../utils/paramsUtil/paramHandler')
|
|
2
|
+
const constants = require('../../src/constants.js')
|
|
3
|
+
const parsedCLIOptions = require('../../src/utils/parsedCLIOptions')
|
|
4
|
+
const path = require('path')
|
|
5
|
+
const {
|
|
6
|
+
supportedLanguages
|
|
7
|
+
} = require('../audit/languageAnalysisEngine/constants')
|
|
8
|
+
const i18n = require('i18n')
|
|
9
|
+
const { scanUsageGuide } = require('./help')
|
|
10
|
+
|
|
11
|
+
const getScanConfig = argv => {
|
|
12
|
+
let scanParams = parsedCLIOptions.getCommandLineArgsCustom(
|
|
13
|
+
argv,
|
|
14
|
+
constants.commandLineDefinitions.scanOptionDefinitions
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
if (scanParams.help) {
|
|
18
|
+
printHelpMessage()
|
|
19
|
+
process.exit(0)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const paramsAuth = paramHandler.getAuth(scanParams)
|
|
23
|
+
|
|
24
|
+
if (scanParams.language) {
|
|
25
|
+
scanParams.language = scanParams.language.toUpperCase()
|
|
26
|
+
if (!Object.values(supportedLanguages).includes(scanParams.language)) {
|
|
27
|
+
console.log(`Did not recognise --language ${scanParams.language}`)
|
|
28
|
+
console.log(i18n.__('constantsHowToRunDev3'))
|
|
29
|
+
process.exit(0)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// if no name, take the full file path and use it as the project name
|
|
34
|
+
if (!scanParams.name && scanParams.file) {
|
|
35
|
+
scanParams.name = getFileName(scanParams.file)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return { ...paramsAuth, ...scanParams }
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const getFileName = file => {
|
|
42
|
+
// from '/Users/x/y/spring-async.war' to 'spring-async.war'
|
|
43
|
+
return file.split(path.sep).pop()
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const printHelpMessage = () => {
|
|
47
|
+
console.log(scanUsageGuide)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
module.exports = {
|
|
51
|
+
getScanConfig,
|
|
52
|
+
getFileName,
|
|
53
|
+
printHelpMessage
|
|
54
|
+
}
|
|
@@ -8,8 +8,8 @@ const populateProjectIdAndProjectName = require('./populateProjectIdAndProjectNa
|
|
|
8
8
|
const scan = require('./scan')
|
|
9
9
|
const scanResults = require('./scanResults')
|
|
10
10
|
const autoDetection = require('./autoDetection')
|
|
11
|
-
const paramHandler = require('../utils/paramsUtil/paramHandler')
|
|
12
11
|
const fileFunctions = require('./fileUtils')
|
|
12
|
+
const { performance } = require('perf_hooks')
|
|
13
13
|
|
|
14
14
|
const getTimeout = config => {
|
|
15
15
|
if (config.timeout) {
|
|
@@ -22,21 +22,23 @@ const getTimeout = config => {
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const configToUse = { ...paramsAuth, ...getScanSubCommands }
|
|
29
|
-
if (configToUse.file === undefined || configToUse.file === null) {
|
|
30
|
-
await autoDetection.autoDetectFileAndLanguage(configToUse)
|
|
31
|
-
} else {
|
|
32
|
-
if (fileFunctions.fileExists(configToUse.file)) {
|
|
33
|
-
scan.zipValidator(configToUse)
|
|
34
|
-
autoDetection.assignLanguage([configToUse.file], configToUse)
|
|
35
|
-
} else {
|
|
25
|
+
const fileAndLanguageLogic = async configToUse => {
|
|
26
|
+
if (configToUse.file) {
|
|
27
|
+
if (!fileFunctions.fileExists(configToUse.file)) {
|
|
36
28
|
console.log(i18n.__('fileNotExist'))
|
|
37
|
-
process.exit(
|
|
29
|
+
process.exit(1)
|
|
30
|
+
}
|
|
31
|
+
return configToUse
|
|
32
|
+
} else {
|
|
33
|
+
if (configToUse.file === undefined || configToUse.file === null) {
|
|
34
|
+
await autoDetection.autoDetectFileAndLanguage(configToUse)
|
|
38
35
|
}
|
|
39
36
|
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const startScan = async configToUse => {
|
|
40
|
+
const startTime = performance.now()
|
|
41
|
+
await fileAndLanguageLogic(configToUse)
|
|
40
42
|
|
|
41
43
|
if (!configToUse.projectId) {
|
|
42
44
|
configToUse.projectId = await populateProjectIdAndProjectName.populateProjectId(
|
|
@@ -46,7 +48,7 @@ const startScan = async () => {
|
|
|
46
48
|
const codeArtifactId = await scan.sendScan(configToUse)
|
|
47
49
|
|
|
48
50
|
if (!configToUse.ff) {
|
|
49
|
-
const startScanSpinner = returnOra('Contrast Scan started')
|
|
51
|
+
const startScanSpinner = returnOra('🚀 Contrast Scan started')
|
|
50
52
|
startSpinner(startScanSpinner)
|
|
51
53
|
const scanDetail = await scanResults.returnScanResults(
|
|
52
54
|
configToUse,
|
|
@@ -58,9 +60,14 @@ const startScan = async () => {
|
|
|
58
60
|
configToUse,
|
|
59
61
|
scanDetail.id
|
|
60
62
|
)
|
|
63
|
+
const endTime = performance.now()
|
|
64
|
+
const scanDurationMs = endTime - startTime
|
|
61
65
|
succeedSpinner(startScanSpinner, 'Contrast Scan complete')
|
|
66
|
+
console.log(
|
|
67
|
+
`----- Scan completed in ${(scanDurationMs / 1000).toFixed(2)}s -----`
|
|
68
|
+
)
|
|
62
69
|
const projectOverview = await scanResults.returnScanProjectById(configToUse)
|
|
63
|
-
return { projectOverview, scanResultsInstances }
|
|
70
|
+
return { projectOverview, scanDetail, scanResultsInstances }
|
|
64
71
|
}
|
|
65
72
|
}
|
|
66
73
|
|
package/src/scan/scanResults.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
const commonApi = require('../utils/commonApi')
|
|
2
2
|
const requestUtils = require('../../src/utils/requestUtils')
|
|
3
|
-
const i18n = require('i18n')
|
|
4
3
|
const oraFunctions = require('../utils/oraWrapper')
|
|
4
|
+
const _ = require('lodash')
|
|
5
|
+
const i18n = require('i18n')
|
|
5
6
|
|
|
6
7
|
const getScanId = async (config, codeArtifactId, client) => {
|
|
7
8
|
return client
|
|
@@ -36,28 +37,40 @@ const returnScanResults = async (
|
|
|
36
37
|
let scanId = await getScanId(config, codeArtifactId, client)
|
|
37
38
|
let startTime = new Date()
|
|
38
39
|
let complete = false
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
if (result.
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
if (!_.isNil(scanId)) {
|
|
41
|
+
while (!complete) {
|
|
42
|
+
let result = await pollScanResults(config, scanId, client)
|
|
43
|
+
if (JSON.stringify(result.statusCode) == 200) {
|
|
44
|
+
if (result.body.status === 'COMPLETED') {
|
|
45
|
+
complete = true
|
|
46
|
+
return result.body
|
|
47
|
+
}
|
|
48
|
+
if (result.body.status === 'FAILED') {
|
|
49
|
+
complete = true
|
|
50
|
+
oraFunctions.failSpinner(startScanSpinner, 'Contrast Scan Failed.')
|
|
51
|
+
console.log(result.body.errorMessage)
|
|
52
|
+
if (
|
|
53
|
+
result.body.errorMessage ===
|
|
54
|
+
'Unable to determine language for code artifact'
|
|
55
|
+
) {
|
|
56
|
+
console.log(
|
|
57
|
+
'Try scanning again using --language param. ',
|
|
58
|
+
i18n.__('scanOptionsLanguageSummary')
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
process.exit(1)
|
|
62
|
+
}
|
|
45
63
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
oraFunctions.failSpinner(
|
|
64
|
+
let endTime = new Date() - startTime
|
|
65
|
+
if (requestUtils.millisToSeconds(endTime) > timeout) {
|
|
66
|
+
oraFunctions.failSpinner(
|
|
67
|
+
startScanSpinner,
|
|
68
|
+
'Contrast Scan timed out at the specified ' + timeout + ' seconds.'
|
|
69
|
+
)
|
|
70
|
+
console.log('Please try again, allowing more time.')
|
|
49
71
|
process.exit(1)
|
|
50
72
|
}
|
|
51
73
|
}
|
|
52
|
-
let endTime = new Date() - startTime
|
|
53
|
-
if (requestUtils.millisToSeconds(endTime) > timeout) {
|
|
54
|
-
oraFunctions.failSpinner(
|
|
55
|
-
startScanSpinner,
|
|
56
|
-
'Contrast Scan timed out at the specified ' + timeout + ' seconds.'
|
|
57
|
-
)
|
|
58
|
-
console.log('Please try again, allowing more time.')
|
|
59
|
-
process.exit(1)
|
|
60
|
-
}
|
|
61
74
|
}
|
|
62
75
|
}
|
|
63
76
|
|
package/src/utils/commonApi.js
CHANGED
|
@@ -4,11 +4,10 @@ const {
|
|
|
4
4
|
unauthenticatedError,
|
|
5
5
|
forbiddenError,
|
|
6
6
|
proxyError,
|
|
7
|
-
hostWarningError,
|
|
8
7
|
genericError
|
|
9
8
|
} = require('../common/errorHandling')
|
|
10
9
|
|
|
11
|
-
const handleResponseErrors = (res, api
|
|
10
|
+
const handleResponseErrors = (res, api) => {
|
|
12
11
|
if (res.statusCode === 400) {
|
|
13
12
|
api === 'catalogue' ? badRequestError(true) : badRequestError(false)
|
|
14
13
|
} else if (res.statusCode === 401) {
|
|
@@ -18,7 +17,7 @@ const handleResponseErrors = (res, api, hostPresent) => {
|
|
|
18
17
|
} else if (res.statusCode === 407) {
|
|
19
18
|
proxyError()
|
|
20
19
|
} else {
|
|
21
|
-
|
|
20
|
+
genericError()
|
|
22
21
|
}
|
|
23
22
|
}
|
|
24
23
|
|
package/src/utils/getConfig.ts
CHANGED
|
@@ -6,6 +6,7 @@ type ContrastConfOptions = Partial<{
|
|
|
6
6
|
apiKey: string
|
|
7
7
|
orgId: string
|
|
8
8
|
authHeader: string
|
|
9
|
+
numOfRuns: number
|
|
9
10
|
}>
|
|
10
11
|
|
|
11
12
|
type ContrastConf = Conf<ContrastConfOptions>
|
|
@@ -15,6 +16,7 @@ const localConfig = (name: string, version: string) => {
|
|
|
15
16
|
configName: name
|
|
16
17
|
})
|
|
17
18
|
config.set('version', version)
|
|
19
|
+
|
|
18
20
|
if (!config.has('host')) {
|
|
19
21
|
config.set('host', 'https://ce.contrastsecurity.com/')
|
|
20
22
|
}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
const
|
|
2
|
-
const parsedCLIOptions = cliOptions.getCommandLineArgs()
|
|
3
|
-
|
|
4
|
-
const getAuth = () => {
|
|
1
|
+
const getAuth = (parsedCLIOptions = {}) => {
|
|
5
2
|
let params = {}
|
|
6
|
-
|
|
7
3
|
params.apiKey = parsedCLIOptions['apiKey']
|
|
8
4
|
params.authorization = parsedCLIOptions['authorization']
|
|
9
5
|
params.host = parsedCLIOptions['host']
|
|
@@ -11,27 +7,6 @@ const getAuth = () => {
|
|
|
11
7
|
return params
|
|
12
8
|
}
|
|
13
9
|
|
|
14
|
-
const getScanParams = () => {
|
|
15
|
-
let scanParams = {}
|
|
16
|
-
scanParams.help = parsedCLIOptions['help']
|
|
17
|
-
scanParams.file = parsedCLIOptions['file']
|
|
18
|
-
scanParams.language = parsedCLIOptions['language']
|
|
19
|
-
? parsedCLIOptions['language'].toUpperCase()
|
|
20
|
-
: parsedCLIOptions['language']
|
|
21
|
-
scanParams.ff = parsedCLIOptions['ff']
|
|
22
|
-
scanParams.timeout = parsedCLIOptions['timeout']
|
|
23
|
-
scanParams.name = parsedCLIOptions['name']
|
|
24
|
-
scanParams.verbose = parsedCLIOptions['verbose']
|
|
25
|
-
|
|
26
|
-
// if no name, take the full file path and use it as the project name
|
|
27
|
-
if (!scanParams.name) {
|
|
28
|
-
scanParams.name = scanParams.file
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
return scanParams
|
|
32
|
-
}
|
|
33
|
-
|
|
34
10
|
module.exports = {
|
|
35
|
-
getScanParams: getScanParams,
|
|
36
11
|
getAuth: getAuth
|
|
37
12
|
}
|
|
@@ -4,8 +4,8 @@ const envVariableParams = require('./envVariableParams')
|
|
|
4
4
|
const { validateAuthParams } = require('../validationCheck')
|
|
5
5
|
const i18n = require('i18n')
|
|
6
6
|
|
|
7
|
-
const getAuth =
|
|
8
|
-
let commandLineAuthParamsAuth = commandlineAuth.getAuth()
|
|
7
|
+
const getAuth = params => {
|
|
8
|
+
let commandLineAuthParamsAuth = commandlineAuth.getAuth(params)
|
|
9
9
|
let envVariableParamsAuth = envVariableParams.getAuth()
|
|
10
10
|
let configStoreParamsAuth = configStoreParams.getAuth()
|
|
11
11
|
|
|
@@ -21,8 +21,4 @@ const getAuth = () => {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
return commandlineAuth.getScanParams()
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
module.exports = { getAuth: getAuth, getScanSubCommands: getScanSubCommands }
|
|
24
|
+
module.exports = { getAuth: getAuth }
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
const constants = require('../constants')
|
|
2
1
|
const commandLineArgs = require('command-line-args')
|
|
3
2
|
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
partial:
|
|
3
|
+
const getCommandLineArgsCustom = (parameterList, optionDefinitions) => {
|
|
4
|
+
try {
|
|
5
|
+
return commandLineArgs(optionDefinitions, {
|
|
6
|
+
argv: parameterList,
|
|
7
|
+
partial: false,
|
|
9
8
|
camelCase: true,
|
|
10
9
|
caseInsensitive: true
|
|
11
|
-
}
|
|
12
|
-
)
|
|
10
|
+
})
|
|
11
|
+
} catch (e) {
|
|
12
|
+
console.log(e.message.toString())
|
|
13
|
+
process.exit(1)
|
|
14
|
+
}
|
|
13
15
|
}
|
|
14
16
|
|
|
15
17
|
module.exports = {
|
|
16
|
-
|
|
18
|
+
getCommandLineArgsCustom
|
|
17
19
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const { SARIF_FILE } = require('../constants/constants')
|
|
2
|
+
const commonApi = require('./commonApi')
|
|
3
|
+
const saveResults = require('../scan/saveResults')
|
|
4
|
+
const i18n = require('i18n')
|
|
5
|
+
|
|
6
|
+
const saveScanFile = async (config, scanResults) => {
|
|
7
|
+
if (config.save === null || config.save.toUpperCase() === SARIF_FILE) {
|
|
8
|
+
const scanId = scanResults.scanDetail.id
|
|
9
|
+
const client = commonApi.getHttpClient(config)
|
|
10
|
+
const rawResults = await client.getSpecificScanResultSarif(config, scanId)
|
|
11
|
+
await saveResults.writeResultsToFile(rawResults?.body)
|
|
12
|
+
} else {
|
|
13
|
+
console.log(i18n.__('scanNoFiletypeSpecifiedForSave'))
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
module.exports = {
|
|
18
|
+
saveScanFile: saveScanFile
|
|
19
|
+
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
Object.defineProperty(exports, '__esModule', { value: true })
|
|
3
|
-
exports.pollScanDetail = void 0
|
|
4
|
-
const requestUtils_1 = require('../utils/requestUtils')
|
|
5
|
-
const pollScanDetail = async (
|
|
6
|
-
config,
|
|
7
|
-
params,
|
|
8
|
-
scanId,
|
|
9
|
-
httpClient,
|
|
10
|
-
pollCount,
|
|
11
|
-
showProgress = false
|
|
12
|
-
) => {
|
|
13
|
-
await (0, requestUtils_1.sleep)(5000)
|
|
14
|
-
return httpClient.getFunctionScan(config, params, scanId).then(res => {
|
|
15
|
-
const { resultsCount = 0 } = res?.body?.data?.scan || {}
|
|
16
|
-
if (showProgress) {
|
|
17
|
-
process.stdout.write(
|
|
18
|
-
`\rScanning (${resultsCount} results found so far)${'.'.repeat(
|
|
19
|
-
pollCount
|
|
20
|
-
)}`
|
|
21
|
-
)
|
|
22
|
-
}
|
|
23
|
-
if (res.statusCode === 200) {
|
|
24
|
-
return res
|
|
25
|
-
} else {
|
|
26
|
-
throw Error(`Failed to get scan detail: ${res.statusCode} ${res.body}`)
|
|
27
|
-
}
|
|
28
|
-
})
|
|
29
|
-
}
|
|
30
|
-
exports.pollScanDetail = pollScanDetail
|
package/dist/scan/fileFinder.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
const fg = require('fast-glob')
|
|
3
|
-
const i18n = require('i18n')
|
|
4
|
-
const findFile = async () => {
|
|
5
|
-
console.log(i18n.__('searchingScanFileDirectory', process.cwd()))
|
|
6
|
-
const entries = fg(['**/*.jar', '**/*.war', '**/*.zip', '**/*.dll'], {
|
|
7
|
-
dot: false,
|
|
8
|
-
deep: 3,
|
|
9
|
-
onlyFiles: true
|
|
10
|
-
})
|
|
11
|
-
return entries
|
|
12
|
-
}
|
|
13
|
-
module.exports = {
|
|
14
|
-
findFile
|
|
15
|
-
}
|