@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.
Files changed (213) hide show
  1. package/.prettierignore +3 -0
  2. package/README.md +115 -78
  3. package/dist/audit/AnalysisEngine.js +37 -0
  4. package/dist/audit/catalogueApplication/catalogueApplication.js +36 -0
  5. package/dist/audit/dotnetAnalysisEngine/index.js +25 -0
  6. package/dist/audit/dotnetAnalysisEngine/parseLockFileContents.js +35 -0
  7. package/dist/audit/dotnetAnalysisEngine/parseProjectFileContents.js +15 -0
  8. package/dist/audit/dotnetAnalysisEngine/readLockFileContents.js +18 -0
  9. package/dist/audit/dotnetAnalysisEngine/readProjectFileContents.js +14 -0
  10. package/dist/audit/dotnetAnalysisEngine/sanitizer.js +9 -0
  11. package/dist/audit/goAnalysisEngine/index.js +17 -0
  12. package/dist/audit/goAnalysisEngine/parseProjectFileContents.js +164 -0
  13. package/dist/audit/goAnalysisEngine/readProjectFileContents.js +21 -0
  14. package/dist/audit/goAnalysisEngine/sanitizer.js +5 -0
  15. package/dist/audit/javaAnalysisEngine/index.js +34 -0
  16. package/dist/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +153 -0
  17. package/dist/audit/javaAnalysisEngine/parseProjectFileContents.js +353 -0
  18. package/dist/audit/javaAnalysisEngine/readProjectFileContents.js +98 -0
  19. package/dist/audit/javaAnalysisEngine/sanitizer.js +5 -0
  20. package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +24 -0
  21. package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +24 -0
  22. package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +35 -0
  23. package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +23 -0
  24. package/dist/audit/languageAnalysisEngine/commonApi.js +18 -0
  25. package/dist/audit/languageAnalysisEngine/constants.js +20 -0
  26. package/dist/audit/languageAnalysisEngine/filterProjectPath.js +20 -0
  27. package/dist/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +25 -0
  28. package/dist/audit/languageAnalysisEngine/getProjectRootFilenames.js +39 -0
  29. package/dist/audit/languageAnalysisEngine/index.js +39 -0
  30. package/dist/audit/languageAnalysisEngine/langugageAnalysisFactory.js +95 -0
  31. package/dist/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +121 -0
  32. package/dist/audit/languageAnalysisEngine/report/checkIgnoreDevDep.js +17 -0
  33. package/dist/audit/languageAnalysisEngine/report/commonReportingFunctions.js +257 -0
  34. package/dist/audit/languageAnalysisEngine/report/newReportingFeature.js +81 -0
  35. package/dist/audit/languageAnalysisEngine/report/reportingFeature.js +133 -0
  36. package/dist/audit/languageAnalysisEngine/sendSnapshot.js +41 -0
  37. package/dist/audit/languageAnalysisEngine/util/capabilities.js +11 -0
  38. package/dist/audit/languageAnalysisEngine/util/generalAPI.js +39 -0
  39. package/dist/audit/languageAnalysisEngine/util/requestUtils.js +14 -0
  40. package/dist/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +40 -0
  41. package/dist/audit/nodeAnalysisEngine/index.js +31 -0
  42. package/dist/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +18 -0
  43. package/dist/audit/nodeAnalysisEngine/parseYarn2LockFileContents.js +51 -0
  44. package/dist/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +18 -0
  45. package/dist/audit/nodeAnalysisEngine/readNPMLockFileContents.js +17 -0
  46. package/dist/audit/nodeAnalysisEngine/readProjectFileContents.js +14 -0
  47. package/dist/audit/nodeAnalysisEngine/readYarnLockFileContents.js +24 -0
  48. package/dist/audit/nodeAnalysisEngine/sanitizer.js +9 -0
  49. package/dist/audit/phpAnalysisEngine/index.js +23 -0
  50. package/dist/audit/phpAnalysisEngine/parseLockFileContents.js +52 -0
  51. package/dist/audit/phpAnalysisEngine/readLockFileContents.js +13 -0
  52. package/dist/audit/phpAnalysisEngine/readProjectFileContents.js +16 -0
  53. package/dist/audit/phpAnalysisEngine/sanitizer.js +5 -0
  54. package/dist/audit/pythonAnalysisEngine/index.js +25 -0
  55. package/dist/audit/pythonAnalysisEngine/parsePipfileLockContents.js +17 -0
  56. package/dist/audit/pythonAnalysisEngine/parseProjectFileContents.js +21 -0
  57. package/dist/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +13 -0
  58. package/dist/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +14 -0
  59. package/dist/audit/pythonAnalysisEngine/sanitizer.js +7 -0
  60. package/dist/audit/rubyAnalysisEngine/index.js +25 -0
  61. package/dist/audit/rubyAnalysisEngine/parseGemfileLockContents.js +176 -0
  62. package/dist/audit/rubyAnalysisEngine/parsedGemfile.js +22 -0
  63. package/dist/audit/rubyAnalysisEngine/readGemfileContents.js +14 -0
  64. package/dist/audit/rubyAnalysisEngine/readGemfileLockContents.js +14 -0
  65. package/dist/audit/rubyAnalysisEngine/sanitizer.js +6 -0
  66. package/dist/commands/audit/auditConfig.js +25 -0
  67. package/dist/commands/audit/auditController.js +31 -0
  68. package/dist/commands/audit/help.js +52 -0
  69. package/dist/commands/audit/processAudit.js +18 -0
  70. package/dist/commands/audit/saveFile.js +11 -0
  71. package/dist/commands/auth/auth.js +20 -2
  72. package/dist/commands/config/config.js +19 -8
  73. package/dist/commands/scan/processScan.js +9 -13
  74. package/dist/common/HTTPClient.js +112 -13
  75. package/dist/common/errorHandling.js +65 -1
  76. package/dist/common/versionChecker.js +30 -0
  77. package/dist/constants/constants.js +4 -2
  78. package/dist/constants/lambda.js +32 -4
  79. package/dist/constants/locales.js +60 -21
  80. package/dist/constants.js +181 -21
  81. package/dist/index.js +50 -23
  82. package/dist/lambda/aws.js +14 -11
  83. package/dist/lambda/help.js +4 -0
  84. package/dist/lambda/lambda.js +50 -27
  85. package/dist/lambda/lambdaUtils.js +72 -0
  86. package/dist/lambda/logUtils.js +11 -1
  87. package/dist/lambda/scanDetailCompletion.js +4 -4
  88. package/dist/lambda/scanRequest.js +11 -5
  89. package/dist/lambda/utils.js +110 -53
  90. package/dist/sbom/generateSbom.js +20 -0
  91. package/dist/scan/autoDetection.js +0 -32
  92. package/dist/scan/fileUtils.js +1 -1
  93. package/dist/scan/help.js +14 -40
  94. package/dist/scan/populateProjectIdAndProjectName.js +5 -0
  95. package/dist/scan/saveResults.js +14 -0
  96. package/dist/scan/scan.js +105 -40
  97. package/dist/scan/scanConfig.js +39 -0
  98. package/dist/scan/scanController.js +19 -16
  99. package/dist/scan/scanResults.js +24 -16
  100. package/dist/utils/commonApi.js +3 -3
  101. package/dist/utils/paramsUtil/commandlineParams.js +1 -20
  102. package/dist/utils/paramsUtil/paramHandler.js +3 -6
  103. package/dist/utils/parsedCLIOptions.js +14 -8
  104. package/dist/utils/requestUtils.js +1 -1
  105. package/dist/utils/saveFile.js +19 -0
  106. package/package.json +26 -21
  107. package/src/audit/AnalysisEngine.js +103 -0
  108. package/src/audit/catalogueApplication/catalogueApplication.js +42 -0
  109. package/src/audit/dotnetAnalysisEngine/index.js +26 -0
  110. package/src/audit/dotnetAnalysisEngine/parseLockFileContents.js +47 -0
  111. package/src/audit/dotnetAnalysisEngine/parseProjectFileContents.js +29 -0
  112. package/src/audit/dotnetAnalysisEngine/readLockFileContents.js +30 -0
  113. package/src/audit/dotnetAnalysisEngine/readProjectFileContents.js +26 -0
  114. package/src/audit/dotnetAnalysisEngine/sanitizer.js +11 -0
  115. package/src/audit/goAnalysisEngine/index.js +18 -0
  116. package/src/audit/goAnalysisEngine/parseProjectFileContents.js +209 -0
  117. package/src/audit/goAnalysisEngine/readProjectFileContents.js +31 -0
  118. package/src/audit/goAnalysisEngine/sanitizer.js +7 -0
  119. package/src/audit/javaAnalysisEngine/index.js +41 -0
  120. package/src/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +222 -0
  121. package/src/audit/javaAnalysisEngine/parseProjectFileContents.js +420 -0
  122. package/src/audit/javaAnalysisEngine/readProjectFileContents.js +141 -0
  123. package/src/audit/javaAnalysisEngine/sanitizer.js +6 -0
  124. package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +35 -0
  125. package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +41 -0
  126. package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +54 -0
  127. package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +32 -0
  128. package/src/audit/languageAnalysisEngine/commonApi.js +20 -0
  129. package/src/audit/languageAnalysisEngine/constants.js +23 -0
  130. package/src/audit/languageAnalysisEngine/filterProjectPath.js +21 -0
  131. package/src/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +41 -0
  132. package/src/audit/languageAnalysisEngine/getProjectRootFilenames.js +72 -0
  133. package/src/audit/languageAnalysisEngine/index.js +45 -0
  134. package/src/audit/languageAnalysisEngine/langugageAnalysisFactory.js +126 -0
  135. package/src/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +177 -0
  136. package/src/audit/languageAnalysisEngine/report/checkIgnoreDevDep.js +27 -0
  137. package/src/audit/languageAnalysisEngine/report/commonReportingFunctions.js +303 -0
  138. package/src/audit/languageAnalysisEngine/report/newReportingFeature.js +124 -0
  139. package/src/audit/languageAnalysisEngine/report/reportingFeature.js +190 -0
  140. package/src/audit/languageAnalysisEngine/sendSnapshot.js +51 -0
  141. package/src/audit/languageAnalysisEngine/util/capabilities.js +12 -0
  142. package/src/audit/languageAnalysisEngine/util/generalAPI.js +43 -0
  143. package/src/audit/languageAnalysisEngine/util/requestUtils.js +17 -0
  144. package/src/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +49 -0
  145. package/src/audit/nodeAnalysisEngine/index.js +35 -0
  146. package/src/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +20 -0
  147. package/src/audit/nodeAnalysisEngine/parseYarn2LockFileContents.js +63 -0
  148. package/src/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +26 -0
  149. package/src/audit/nodeAnalysisEngine/readNPMLockFileContents.js +23 -0
  150. package/src/audit/nodeAnalysisEngine/readProjectFileContents.js +27 -0
  151. package/src/audit/nodeAnalysisEngine/readYarnLockFileContents.js +36 -0
  152. package/src/audit/nodeAnalysisEngine/sanitizer.js +11 -0
  153. package/src/audit/phpAnalysisEngine/index.js +27 -0
  154. package/src/audit/phpAnalysisEngine/parseLockFileContents.js +60 -0
  155. package/src/audit/phpAnalysisEngine/readLockFileContents.js +14 -0
  156. package/src/audit/phpAnalysisEngine/readProjectFileContents.js +25 -0
  157. package/src/audit/phpAnalysisEngine/sanitizer.js +4 -0
  158. package/src/audit/pythonAnalysisEngine/index.js +55 -0
  159. package/src/audit/pythonAnalysisEngine/parsePipfileLockContents.js +23 -0
  160. package/src/audit/pythonAnalysisEngine/parseProjectFileContents.js +33 -0
  161. package/src/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +16 -0
  162. package/src/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +22 -0
  163. package/src/audit/pythonAnalysisEngine/sanitizer.js +9 -0
  164. package/src/audit/rubyAnalysisEngine/index.js +30 -0
  165. package/src/audit/rubyAnalysisEngine/parseGemfileLockContents.js +215 -0
  166. package/src/audit/rubyAnalysisEngine/parsedGemfile.js +39 -0
  167. package/src/audit/rubyAnalysisEngine/readGemfileContents.js +18 -0
  168. package/src/audit/rubyAnalysisEngine/readGemfileLockContents.js +17 -0
  169. package/src/audit/rubyAnalysisEngine/sanitizer.js +8 -0
  170. package/src/commands/audit/auditConfig.ts +30 -0
  171. package/src/commands/audit/auditController.ts +31 -0
  172. package/src/commands/audit/help.ts +48 -0
  173. package/src/commands/audit/processAudit.ts +18 -0
  174. package/src/commands/audit/saveFile.ts +6 -0
  175. package/src/commands/auth/auth.js +26 -2
  176. package/src/commands/config/config.js +22 -8
  177. package/src/commands/scan/processScan.js +9 -13
  178. package/src/common/HTTPClient.js +149 -14
  179. package/src/common/errorHandling.ts +85 -2
  180. package/src/common/versionChecker.ts +39 -0
  181. package/src/constants/constants.js +5 -4
  182. package/src/constants/lambda.js +45 -4
  183. package/src/constants/locales.js +76 -26
  184. package/src/constants.js +204 -23
  185. package/src/index.ts +67 -27
  186. package/src/lambda/aws.ts +13 -12
  187. package/src/lambda/help.ts +4 -0
  188. package/src/lambda/lambda.ts +53 -34
  189. package/src/lambda/lambdaUtils.ts +111 -0
  190. package/src/lambda/logUtils.ts +19 -1
  191. package/src/lambda/scanDetailCompletion.ts +4 -4
  192. package/src/lambda/scanRequest.ts +13 -11
  193. package/src/lambda/utils.ts +149 -81
  194. package/src/sbom/generateSbom.ts +17 -0
  195. package/src/scan/autoDetection.js +0 -29
  196. package/src/scan/fileUtils.js +1 -1
  197. package/src/scan/help.js +14 -45
  198. package/src/scan/populateProjectIdAndProjectName.js +5 -0
  199. package/src/scan/saveResults.js +14 -0
  200. package/src/scan/scan.js +127 -58
  201. package/src/scan/scanConfig.js +54 -0
  202. package/src/scan/scanController.js +22 -15
  203. package/src/scan/scanResults.js +32 -19
  204. package/src/utils/commonApi.js +2 -3
  205. package/src/utils/getConfig.ts +2 -0
  206. package/src/utils/paramsUtil/commandlineParams.js +1 -26
  207. package/src/utils/paramsUtil/paramHandler.js +3 -7
  208. package/src/utils/parsedCLIOptions.js +11 -9
  209. package/src/utils/requestUtils.js +1 -1
  210. package/src/utils/saveFile.js +19 -0
  211. package/dist/lambda/scanDetail.js +0 -30
  212. package/dist/scan/fileFinder.js +0 -15
  213. 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 startScan = async () => {
26
- let paramsAuth = paramHandler.getAuth()
27
- let getScanSubCommands = paramHandler.getScanSubCommands()
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(0)
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
 
@@ -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
- while (!complete) {
40
- let result = await pollScanResults(config, scanId, client)
41
- if (JSON.stringify(result.statusCode) == 200) {
42
- if (result.body.status === 'COMPLETED') {
43
- complete = true
44
- return result.body
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
- if (result.body.status === 'FAILED') {
47
- complete = true
48
- oraFunctions.failSpinner(startScanSpinner, 'Contrast Scan Failed.')
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
 
@@ -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, hostPresent) => {
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
- hostPresent === false ? hostWarningError() : genericError()
20
+ genericError()
22
21
  }
23
22
  }
24
23
 
@@ -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 cliOptions = require('../parsedCLIOptions')
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
- const getScanSubCommands = () => {
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 getCommandLineArgs = () => {
5
- return commandLineArgs(
6
- constants.commandLineDefinitions.scanOptionDefinitions,
7
- {
8
- partial: true,
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
- getCommandLineArgs: getCommandLineArgs
18
+ getCommandLineArgsCustom
17
19
  }
@@ -8,7 +8,7 @@ function sendRequest({ options, method = 'put' }) {
8
8
  }
9
9
 
10
10
  const millisToSeconds = millis => {
11
- return ((millis % 60000) / 1000).toFixed(0)
11
+ return (millis / 1000).toFixed(0)
12
12
  }
13
13
 
14
14
  const sleep = ms => {
@@ -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
@@ -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
- }
@@ -1,6 +0,0 @@
1
- 'use strict'
2
- const fs = require('fs')
3
- const yaml = require('js-yaml')
4
- const getAuth = yamlPath => {
5
- const yamlParams = yaml.load(fs.readFileSync(yamlPath, 'utf8'))
6
- }