@contrast/contrast 1.0.5 → 1.0.6
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 +1 -0
- package/dist/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +5 -1
- package/dist/audit/languageAnalysisEngine/report/commonReportingFunctions.js +66 -13
- package/dist/audit/languageAnalysisEngine/report/models/reportOutputModel.js +24 -0
- package/dist/audit/languageAnalysisEngine/report/models/reportSeverityModel.js +3 -1
- package/dist/audit/languageAnalysisEngine/report/models/severityCountModel.js +13 -0
- package/dist/audit/languageAnalysisEngine/report/reportingFeature.js +1 -1
- package/dist/audit/languageAnalysisEngine/report/utils/reportUtils.js +59 -45
- package/dist/commands/audit/auditController.js +1 -1
- package/dist/commands/scan/processScan.js +1 -1
- package/dist/commands/scan/sca/scaAnalysis.js +12 -7
- package/dist/constants/constants.js +13 -3
- package/dist/scaAnalysis/common/formatMessage.js +9 -1
- package/dist/scaAnalysis/common/treeUpload.js +2 -3
- package/dist/scaAnalysis/go/goAnalysis.js +17 -0
- package/dist/scaAnalysis/go/goParseDeps.js +158 -0
- package/dist/scaAnalysis/go/goReadDepFile.js +23 -0
- package/dist/scaAnalysis/java/analysis.js +6 -14
- package/dist/scaAnalysis/java/index.js +5 -5
- package/dist/scaAnalysis/java/javaBuildDepsParser.js +14 -1
- package/dist/scan/formatScanOutput.js +10 -7
- package/dist/scan/scan.js +4 -3
- package/dist/scan/scanController.js +11 -4
- package/dist/scan/scanResults.js +15 -5
- package/dist/utils/oraWrapper.js +5 -1
- package/package.json +1 -1
- package/src/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +6 -5
- package/src/audit/languageAnalysisEngine/report/commonReportingFunctions.ts +117 -18
- package/src/audit/languageAnalysisEngine/report/models/reportOutputModel.ts +29 -0
- package/src/audit/languageAnalysisEngine/report/models/reportSeverityModel.ts +7 -3
- package/src/audit/languageAnalysisEngine/report/models/severityCountModel.ts +16 -0
- package/src/audit/languageAnalysisEngine/report/reportingFeature.ts +2 -2
- package/src/audit/languageAnalysisEngine/report/utils/reportUtils.ts +74 -68
- package/src/commands/audit/auditController.ts +1 -2
- package/src/commands/scan/processScan.js +2 -1
- package/src/commands/scan/sca/scaAnalysis.js +12 -10
- package/src/constants/constants.js +13 -3
- package/src/scaAnalysis/common/formatMessage.js +11 -1
- package/src/scaAnalysis/common/treeUpload.js +2 -6
- package/src/scaAnalysis/go/goAnalysis.js +20 -0
- package/src/scaAnalysis/go/goParseDeps.js +203 -0
- package/src/scaAnalysis/go/goReadDepFile.js +32 -0
- package/src/scaAnalysis/java/analysis.js +8 -24
- package/src/scaAnalysis/java/index.js +5 -5
- package/src/scaAnalysis/java/javaBuildDepsParser.js +15 -2
- package/src/scan/formatScanOutput.ts +17 -8
- package/src/scan/scan.ts +7 -6
- package/src/scan/scanController.js +13 -6
- package/src/scan/scanResults.js +21 -10
- package/src/utils/oraWrapper.js +6 -1
|
@@ -4,13 +4,13 @@ let sb = new StringBuilder()
|
|
|
4
4
|
|
|
5
5
|
const parseBuildDeps = (config, input) => {
|
|
6
6
|
const { mvnDependancyTreeOutput, projectType } = input
|
|
7
|
-
// console.log(projectType)
|
|
8
7
|
try {
|
|
9
8
|
return parseGradle(mvnDependancyTreeOutput, config, projectType)
|
|
10
9
|
} catch (err) {
|
|
11
10
|
throw new Error(i18n.__('javaParseProjectFile') + `${err.message}`)
|
|
12
11
|
}
|
|
13
12
|
}
|
|
13
|
+
|
|
14
14
|
const preParser = shavedOutput => {
|
|
15
15
|
let obj = []
|
|
16
16
|
for (let dep in shavedOutput) {
|
|
@@ -387,5 +387,18 @@ const parseGradle = (gradleDependencyTreeOutput, config, projectType) => {
|
|
|
387
387
|
}
|
|
388
388
|
|
|
389
389
|
module.exports = {
|
|
390
|
-
parseBuildDeps
|
|
390
|
+
parseBuildDeps,
|
|
391
|
+
shaveOutput,
|
|
392
|
+
validateIndentation,
|
|
393
|
+
calculateLevels,
|
|
394
|
+
lastChild,
|
|
395
|
+
hasChildren,
|
|
396
|
+
getElementHeader,
|
|
397
|
+
createElement,
|
|
398
|
+
stripElement,
|
|
399
|
+
checkVersion,
|
|
400
|
+
computeRelationToLastElement,
|
|
401
|
+
addIndentation,
|
|
402
|
+
computeLevel,
|
|
403
|
+
computeIndentation
|
|
391
404
|
}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ProjectOverview,
|
|
3
|
+
ScanResultsInstances,
|
|
4
|
+
ScanResultsModel
|
|
5
|
+
} from './models/scanResultsModel'
|
|
2
6
|
import i18n from 'i18n'
|
|
3
7
|
import chalk from 'chalk'
|
|
4
8
|
import { ResultContent } from './models/resultContentModel'
|
|
@@ -16,7 +20,7 @@ import {
|
|
|
16
20
|
export function formatScanOutput(scanResults: ScanResultsModel) {
|
|
17
21
|
const { scanResultsInstances } = scanResults
|
|
18
22
|
|
|
19
|
-
let projectOverview = getProjectOverview(scanResultsInstances
|
|
23
|
+
let projectOverview = getProjectOverview(scanResultsInstances)
|
|
20
24
|
if (scanResultsInstances.content.length === 0) {
|
|
21
25
|
console.log(i18n.__('scanNoVulnerabilitiesFound'))
|
|
22
26
|
console.log(i18n.__('scanNoVulnerabilitiesFoundSecureCode'))
|
|
@@ -118,7 +122,7 @@ function printVulnInfo(projectOverview: any) {
|
|
|
118
122
|
)
|
|
119
123
|
}
|
|
120
124
|
|
|
121
|
-
export function getProjectOverview(
|
|
125
|
+
export function getProjectOverview(scanResultsInstances: ScanResultsInstances) {
|
|
122
126
|
let acc: any = {
|
|
123
127
|
critical: 0,
|
|
124
128
|
high: 0,
|
|
@@ -127,11 +131,16 @@ export function getProjectOverview(content: ResultContent[]) {
|
|
|
127
131
|
note: 0,
|
|
128
132
|
total: 0
|
|
129
133
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
134
|
+
if (
|
|
135
|
+
scanResultsInstances?.content &&
|
|
136
|
+
scanResultsInstances.content.length > 0
|
|
137
|
+
) {
|
|
138
|
+
scanResultsInstances.content.forEach((i: ResultContent) => {
|
|
139
|
+
acc[i.severity.toLowerCase()] += 1
|
|
140
|
+
acc.total += 1
|
|
141
|
+
return acc
|
|
142
|
+
})
|
|
143
|
+
}
|
|
135
144
|
|
|
136
145
|
return acc
|
|
137
146
|
}
|
package/src/scan/scan.ts
CHANGED
|
@@ -40,18 +40,19 @@ export const sendScan = async (config: any) => {
|
|
|
40
40
|
return res.body.id
|
|
41
41
|
} else {
|
|
42
42
|
if (config.debug) {
|
|
43
|
-
console.log(res.statusCode)
|
|
44
43
|
console.log(config)
|
|
44
|
+
oraWrapper.failSpinner(
|
|
45
|
+
startUploadSpinner,
|
|
46
|
+
i18n.__('uploadingScanFail')
|
|
47
|
+
)
|
|
48
|
+
console.log(i18n.__('genericServiceError', res.statusCode))
|
|
45
49
|
}
|
|
46
|
-
oraWrapper.failSpinner(
|
|
47
|
-
startUploadSpinner,
|
|
48
|
-
i18n.__('uploadingScanFail')
|
|
49
|
-
)
|
|
50
50
|
if (res.statusCode === 403) {
|
|
51
51
|
console.log(i18n.__('permissionsError'))
|
|
52
52
|
process.exit(1)
|
|
53
53
|
}
|
|
54
|
-
|
|
54
|
+
oraWrapper.stopSpinner(startUploadSpinner)
|
|
55
|
+
console.log('Contrast Scan Finished')
|
|
55
56
|
process.exit(1)
|
|
56
57
|
}
|
|
57
58
|
})
|
|
@@ -2,7 +2,8 @@ const i18n = require('i18n')
|
|
|
2
2
|
const {
|
|
3
3
|
returnOra,
|
|
4
4
|
startSpinner,
|
|
5
|
-
succeedSpinner
|
|
5
|
+
succeedSpinner,
|
|
6
|
+
stopSpinner
|
|
6
7
|
} = require('../utils/oraWrapper')
|
|
7
8
|
const populateProjectIdAndProjectName = require('./populateProjectIdAndProjectName')
|
|
8
9
|
const scan = require('./scan')
|
|
@@ -64,11 +65,17 @@ const startScan = async configToUse => {
|
|
|
64
65
|
|
|
65
66
|
const endTime = performance.now()
|
|
66
67
|
const scanDurationMs = endTime - startTime
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
if (scanResultsInstances.statusCode !== 200) {
|
|
69
|
+
stopSpinner(startScanSpinner)
|
|
70
|
+
console.log('Result Service is unavailable, please try again later')
|
|
71
|
+
process.exit(1)
|
|
72
|
+
} else {
|
|
73
|
+
succeedSpinner(startScanSpinner, 'Contrast Scan complete')
|
|
74
|
+
console.log(
|
|
75
|
+
`----- Scan completed in ${(scanDurationMs / 1000).toFixed(2)}s -----`
|
|
76
|
+
)
|
|
77
|
+
return { scanDetail, scanResultsInstances: scanResultsInstances.body }
|
|
78
|
+
}
|
|
72
79
|
}
|
|
73
80
|
}
|
|
74
81
|
|
package/src/scan/scanResults.js
CHANGED
|
@@ -3,6 +3,7 @@ const requestUtils = require('../../src/utils/requestUtils')
|
|
|
3
3
|
const oraFunctions = require('../utils/oraWrapper')
|
|
4
4
|
const _ = require('lodash')
|
|
5
5
|
const i18n = require('i18n')
|
|
6
|
+
const oraWrapper = require('../utils/oraWrapper')
|
|
6
7
|
|
|
7
8
|
const getScanId = async (config, codeArtifactId, client) => {
|
|
8
9
|
return client
|
|
@@ -47,23 +48,27 @@ const returnScanResults = async (
|
|
|
47
48
|
}
|
|
48
49
|
if (result.body.status === 'FAILED') {
|
|
49
50
|
complete = true
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
if (config.debug) {
|
|
52
|
+
oraFunctions.failSpinner(
|
|
53
|
+
startScanSpinner,
|
|
54
|
+
i18n.__(
|
|
55
|
+
'scanNotCompleted',
|
|
56
|
+
'https://docs.contrastsecurity.com/en/binary-package-preparation.html'
|
|
57
|
+
)
|
|
55
58
|
)
|
|
56
|
-
|
|
57
|
-
result.body.errorMessage ? console.log(result.body.errorMessage) : ''
|
|
59
|
+
}
|
|
58
60
|
if (
|
|
59
|
-
result
|
|
61
|
+
result?.body?.errorMessage ===
|
|
60
62
|
'Unable to determine language for code artifact'
|
|
61
63
|
) {
|
|
64
|
+
console.log(result.body.errorMessage)
|
|
62
65
|
console.log(
|
|
63
66
|
'Try scanning again using --language param. ',
|
|
64
67
|
i18n.__('scanOptionsLanguageSummary')
|
|
65
68
|
)
|
|
66
69
|
}
|
|
70
|
+
oraWrapper.stopSpinner(startScanSpinner)
|
|
71
|
+
console.log('Contrast Scan Finished')
|
|
67
72
|
process.exit(1)
|
|
68
73
|
}
|
|
69
74
|
}
|
|
@@ -86,10 +91,16 @@ const returnScanResultsInstances = async (config, scanId) => {
|
|
|
86
91
|
try {
|
|
87
92
|
result = await client.getScanResultsInstances(config, scanId)
|
|
88
93
|
if (JSON.stringify(result.statusCode) == 200) {
|
|
89
|
-
return result.body
|
|
94
|
+
return { body: result.body, statusCode: result.statusCode }
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (JSON.stringify(result.statusCode) == 503) {
|
|
98
|
+
return { statusCode: result.statusCode }
|
|
90
99
|
}
|
|
91
100
|
} catch (e) {
|
|
92
|
-
|
|
101
|
+
if (config.debug) {
|
|
102
|
+
console.log(e.message.toString())
|
|
103
|
+
}
|
|
93
104
|
}
|
|
94
105
|
}
|
|
95
106
|
|
package/src/utils/oraWrapper.js
CHANGED
|
@@ -8,6 +8,10 @@ const startSpinner = spinner => {
|
|
|
8
8
|
spinner.start()
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
const stopSpinner = spinner => {
|
|
12
|
+
spinner.stop()
|
|
13
|
+
}
|
|
14
|
+
|
|
11
15
|
const succeedSpinner = (spinner, text) => {
|
|
12
16
|
spinner.succeed(text)
|
|
13
17
|
}
|
|
@@ -20,5 +24,6 @@ module.exports = {
|
|
|
20
24
|
returnOra,
|
|
21
25
|
startSpinner,
|
|
22
26
|
succeedSpinner,
|
|
23
|
-
failSpinner
|
|
27
|
+
failSpinner,
|
|
28
|
+
stopSpinner
|
|
24
29
|
}
|