@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.
Files changed (50) hide show
  1. package/.prettierignore +1 -0
  2. package/dist/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +5 -1
  3. package/dist/audit/languageAnalysisEngine/report/commonReportingFunctions.js +66 -13
  4. package/dist/audit/languageAnalysisEngine/report/models/reportOutputModel.js +24 -0
  5. package/dist/audit/languageAnalysisEngine/report/models/reportSeverityModel.js +3 -1
  6. package/dist/audit/languageAnalysisEngine/report/models/severityCountModel.js +13 -0
  7. package/dist/audit/languageAnalysisEngine/report/reportingFeature.js +1 -1
  8. package/dist/audit/languageAnalysisEngine/report/utils/reportUtils.js +59 -45
  9. package/dist/commands/audit/auditController.js +1 -1
  10. package/dist/commands/scan/processScan.js +1 -1
  11. package/dist/commands/scan/sca/scaAnalysis.js +12 -7
  12. package/dist/constants/constants.js +13 -3
  13. package/dist/scaAnalysis/common/formatMessage.js +9 -1
  14. package/dist/scaAnalysis/common/treeUpload.js +2 -3
  15. package/dist/scaAnalysis/go/goAnalysis.js +17 -0
  16. package/dist/scaAnalysis/go/goParseDeps.js +158 -0
  17. package/dist/scaAnalysis/go/goReadDepFile.js +23 -0
  18. package/dist/scaAnalysis/java/analysis.js +6 -14
  19. package/dist/scaAnalysis/java/index.js +5 -5
  20. package/dist/scaAnalysis/java/javaBuildDepsParser.js +14 -1
  21. package/dist/scan/formatScanOutput.js +10 -7
  22. package/dist/scan/scan.js +4 -3
  23. package/dist/scan/scanController.js +11 -4
  24. package/dist/scan/scanResults.js +15 -5
  25. package/dist/utils/oraWrapper.js +5 -1
  26. package/package.json +1 -1
  27. package/src/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +6 -5
  28. package/src/audit/languageAnalysisEngine/report/commonReportingFunctions.ts +117 -18
  29. package/src/audit/languageAnalysisEngine/report/models/reportOutputModel.ts +29 -0
  30. package/src/audit/languageAnalysisEngine/report/models/reportSeverityModel.ts +7 -3
  31. package/src/audit/languageAnalysisEngine/report/models/severityCountModel.ts +16 -0
  32. package/src/audit/languageAnalysisEngine/report/reportingFeature.ts +2 -2
  33. package/src/audit/languageAnalysisEngine/report/utils/reportUtils.ts +74 -68
  34. package/src/commands/audit/auditController.ts +1 -2
  35. package/src/commands/scan/processScan.js +2 -1
  36. package/src/commands/scan/sca/scaAnalysis.js +12 -10
  37. package/src/constants/constants.js +13 -3
  38. package/src/scaAnalysis/common/formatMessage.js +11 -1
  39. package/src/scaAnalysis/common/treeUpload.js +2 -6
  40. package/src/scaAnalysis/go/goAnalysis.js +20 -0
  41. package/src/scaAnalysis/go/goParseDeps.js +203 -0
  42. package/src/scaAnalysis/go/goReadDepFile.js +32 -0
  43. package/src/scaAnalysis/java/analysis.js +8 -24
  44. package/src/scaAnalysis/java/index.js +5 -5
  45. package/src/scaAnalysis/java/javaBuildDepsParser.js +15 -2
  46. package/src/scan/formatScanOutput.ts +17 -8
  47. package/src/scan/scan.ts +7 -6
  48. package/src/scan/scanController.js +13 -6
  49. package/src/scan/scanResults.js +21 -10
  50. 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 { ProjectOverview, ScanResultsModel } from './models/scanResultsModel'
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.content)
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(content: ResultContent[]) {
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
- content.forEach((i: ResultContent) => {
131
- acc[i.severity.toLowerCase()] += 1
132
- acc.total += 1
133
- return acc
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
- console.log(i18n.__('genericServiceError', res.statusCode))
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
- succeedSpinner(startScanSpinner, 'Contrast Scan complete')
68
- console.log(
69
- `----- Scan completed in ${(scanDurationMs / 1000).toFixed(2)}s -----`
70
- )
71
- return { scanDetail, scanResultsInstances }
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
 
@@ -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
- oraFunctions.failSpinner(
51
- startScanSpinner,
52
- i18n.__(
53
- 'scanNotCompleted',
54
- 'https://docs.contrastsecurity.com/en/binary-package-preparation.html'
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.body.errorMessage ===
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
- console.log(e.message.toString())
101
+ if (config.debug) {
102
+ console.log(e.message.toString())
103
+ }
93
104
  }
94
105
  }
95
106
 
@@ -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
  }