@contrast/contrast 2.0.2-beta.1 → 2.0.2-beta.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.
Files changed (395) hide show
  1. package/README.md +2 -1
  2. package/dist/assess/assessConfig.js +9 -0
  3. package/dist/assess/assessConfig.js.map +1 -0
  4. package/dist/assess/help.js +37 -0
  5. package/dist/assess/help.js.map +1 -0
  6. package/dist/assess/http/index.js +39 -0
  7. package/dist/assess/http/index.js.map +1 -0
  8. package/dist/assess/index.js +69 -0
  9. package/dist/assess/index.js.map +1 -0
  10. package/dist/assess/metadata/findYamlFile.js +59 -0
  11. package/dist/assess/metadata/findYamlFile.js.map +1 -0
  12. package/dist/assess/metadata/index.js +37 -0
  13. package/dist/assess/metadata/index.js.map +1 -0
  14. package/dist/assess/metadata/utils.js +159 -0
  15. package/dist/assess/metadata/utils.js.map +1 -0
  16. package/dist/assess/printing/index.js +11 -0
  17. package/dist/assess/printing/index.js.map +1 -0
  18. package/dist/assess/printing/utils.js +119 -0
  19. package/dist/assess/printing/utils.js.map +1 -0
  20. package/dist/audit/auditConfig.js +9 -0
  21. package/dist/audit/auditConfig.js.map +1 -0
  22. package/dist/{commands/audit → audit}/auditController.js +9 -13
  23. package/dist/audit/auditController.js.map +1 -0
  24. package/dist/audit/auditRequests.js +193 -0
  25. package/dist/audit/auditRequests.js.map +1 -0
  26. package/dist/audit/auditRequestsLegacy.js +63 -0
  27. package/dist/audit/auditRequestsLegacy.js.map +1 -0
  28. package/dist/audit/catalogueApplication/catalogueApplication.js +16 -29
  29. package/dist/audit/catalogueApplication/catalogueApplication.js.map +1 -0
  30. package/dist/audit/help.js +68 -0
  31. package/dist/audit/help.js.map +1 -0
  32. package/dist/audit/languageAnalysisEngine/commonApi.js +12 -14
  33. package/dist/audit/languageAnalysisEngine/commonApi.js.map +1 -0
  34. package/dist/audit/languageAnalysisEngine/filterProjectPath.js +2 -1
  35. package/dist/audit/languageAnalysisEngine/filterProjectPath.js.map +1 -0
  36. package/dist/audit/languageAnalysisEngine/getProjectRootFilenames.js +9 -12
  37. package/dist/audit/languageAnalysisEngine/getProjectRootFilenames.js.map +1 -0
  38. package/dist/audit/languageAnalysisEngine/sendSnapshot.js +18 -30
  39. package/dist/audit/languageAnalysisEngine/sendSnapshot.js.map +1 -0
  40. package/dist/audit/nodeAnalysisEngine/parseYarn2LockFileContents.js +9 -9
  41. package/dist/audit/nodeAnalysisEngine/parseYarn2LockFileContents.js.map +1 -0
  42. package/dist/audit/processAudit.js +21 -0
  43. package/dist/audit/processAudit.js.map +1 -0
  44. package/dist/audit/report/commonReportingFunctions.js +33 -61
  45. package/dist/audit/report/commonReportingFunctions.js.map +1 -0
  46. package/dist/audit/report/models/reportGuidanceModel.js +2 -5
  47. package/dist/audit/report/models/reportGuidanceModel.js.map +1 -0
  48. package/dist/audit/report/models/reportLibraryModel.js +3 -7
  49. package/dist/audit/report/models/reportLibraryModel.js.map +1 -0
  50. package/dist/audit/report/models/reportListModel.js +4 -9
  51. package/dist/audit/report/models/reportListModel.js.map +1 -0
  52. package/dist/audit/report/models/reportOutputModel.js +4 -9
  53. package/dist/audit/report/models/reportOutputModel.js.map +1 -0
  54. package/dist/audit/report/models/reportSeverityModel.js +2 -5
  55. package/dist/audit/report/models/reportSeverityModel.js.map +1 -0
  56. package/dist/audit/report/models/severityCountModel.js +3 -5
  57. package/dist/audit/report/models/severityCountModel.js.map +1 -0
  58. package/dist/audit/report/reportingFeature.js +27 -55
  59. package/dist/audit/report/reportingFeature.js.map +1 -0
  60. package/dist/audit/report/utils/reportUtils.js +28 -59
  61. package/dist/audit/report/utils/reportUtils.js.map +1 -0
  62. package/dist/audit/save.js +14 -16
  63. package/dist/audit/save.js.map +1 -0
  64. package/dist/{commands/audit → audit}/saveFile.js +3 -6
  65. package/dist/audit/saveFile.js.map +1 -0
  66. package/dist/auth/auth.js +103 -0
  67. package/dist/auth/auth.js.map +1 -0
  68. package/dist/auth/authRequests.js +18 -0
  69. package/dist/auth/authRequests.js.map +1 -0
  70. package/dist/cliConstants.js +48 -18
  71. package/dist/cliConstants.js.map +1 -0
  72. package/dist/commands/config/config.js +12 -13
  73. package/dist/commands/config/config.js.map +1 -0
  74. package/dist/commands/learn/learn.js +3 -6
  75. package/dist/commands/learn/learn.js.map +1 -0
  76. package/dist/commands/learn/processLearn.js +3 -6
  77. package/dist/commands/learn/processLearn.js.map +1 -0
  78. package/dist/common/HTTPClient.js +193 -94
  79. package/dist/common/HTTPClient.js.map +1 -0
  80. package/dist/{scan → common}/autoDetection.js +53 -36
  81. package/dist/common/autoDetection.js.map +1 -0
  82. package/dist/common/baseRequest.js +59 -23
  83. package/dist/common/baseRequest.js.map +1 -0
  84. package/dist/common/commonHelp.js +13 -13
  85. package/dist/common/commonHelp.js.map +1 -0
  86. package/dist/common/errorHandling.js +49 -63
  87. package/dist/common/errorHandling.js.map +1 -0
  88. package/dist/common/fail.js +6 -12
  89. package/dist/common/fail.js.map +1 -0
  90. package/dist/common/stringManipulations.js +8 -0
  91. package/dist/common/stringManipulations.js.map +1 -0
  92. package/dist/common/versionChecker.js +16 -19
  93. package/dist/common/versionChecker.js.map +1 -0
  94. package/dist/constants/constants.js +46 -65
  95. package/dist/constants/constants.js.map +1 -0
  96. package/dist/constants/lambda.js +8 -5
  97. package/dist/constants/lambda.js.map +1 -0
  98. package/dist/constants/locales.js +14 -10
  99. package/dist/constants/locales.js.map +1 -0
  100. package/dist/github/fingerprintConfig.js +10 -0
  101. package/dist/github/fingerprintConfig.js.map +1 -0
  102. package/dist/github/processFingerprint.js +25 -0
  103. package/dist/github/processFingerprint.js.map +1 -0
  104. package/dist/github/projectGroup.js +225 -0
  105. package/dist/github/projectGroup.js.map +1 -0
  106. package/dist/github/repoServices.js +91 -0
  107. package/dist/github/repoServices.js.map +1 -0
  108. package/dist/index.js +42 -39
  109. package/dist/index.js.map +1 -0
  110. package/dist/lambda/analytics.js +6 -9
  111. package/dist/lambda/analytics.js.map +1 -0
  112. package/dist/lambda/arn.js +6 -9
  113. package/dist/lambda/arn.js.map +1 -0
  114. package/dist/lambda/aws.js +29 -34
  115. package/dist/lambda/aws.js.map +1 -0
  116. package/dist/lambda/cliError.js +13 -41
  117. package/dist/lambda/cliError.js.map +1 -0
  118. package/dist/lambda/constants.js +3 -4
  119. package/dist/lambda/constants.js.map +1 -0
  120. package/dist/lambda/help.js +39 -44
  121. package/dist/lambda/help.js.map +1 -0
  122. package/dist/lambda/lambda.js +61 -65
  123. package/dist/lambda/lambda.js.map +1 -0
  124. package/dist/lambda/lambdaUtils.js +38 -32
  125. package/dist/lambda/lambdaUtils.js.map +1 -0
  126. package/dist/lambda/logUtils.js +21 -17
  127. package/dist/lambda/logUtils.js.map +1 -0
  128. package/dist/lambda/scanDetailCompletion.js +19 -25
  129. package/dist/lambda/scanDetailCompletion.js.map +1 -0
  130. package/dist/lambda/scanRequest.js +34 -41
  131. package/dist/lambda/scanRequest.js.map +1 -0
  132. package/dist/lambda/scanResults.js +8 -10
  133. package/dist/lambda/scanResults.js.map +1 -0
  134. package/dist/lambda/types.js +5 -7
  135. package/dist/lambda/types.js.map +1 -0
  136. package/dist/lambda/utils.js +33 -35
  137. package/dist/lambda/utils.js.map +1 -0
  138. package/dist/sbom/generateSbom.js +6 -10
  139. package/dist/sbom/generateSbom.js.map +1 -0
  140. package/dist/scaAnalysis/common/auditReport.js +8 -12
  141. package/dist/scaAnalysis/common/auditReport.js.map +1 -0
  142. package/dist/scaAnalysis/common/commonReportingFunctionsSca.js +26 -32
  143. package/dist/scaAnalysis/common/commonReportingFunctionsSca.js.map +1 -0
  144. package/dist/scaAnalysis/common/formatMessage.js +8 -17
  145. package/dist/scaAnalysis/common/formatMessage.js.map +1 -0
  146. package/dist/scaAnalysis/common/models/ScaReportModel.js +4 -9
  147. package/dist/scaAnalysis/common/models/ScaReportModel.js.map +1 -0
  148. package/dist/scaAnalysis/common/scaParserForGoAndJava.js +10 -9
  149. package/dist/scaAnalysis/common/scaParserForGoAndJava.js.map +1 -0
  150. package/dist/scaAnalysis/common/scaServicesUpload.js +59 -90
  151. package/dist/scaAnalysis/common/scaServicesUpload.js.map +1 -0
  152. package/dist/scaAnalysis/common/treeUpload.js +15 -25
  153. package/dist/scaAnalysis/common/treeUpload.js.map +1 -0
  154. package/dist/scaAnalysis/common/utils/reportUtilsSca.js +21 -29
  155. package/dist/scaAnalysis/common/utils/reportUtilsSca.js.map +1 -0
  156. package/dist/scaAnalysis/dotnet/analysis.js +12 -18
  157. package/dist/scaAnalysis/dotnet/analysis.js.map +1 -0
  158. package/dist/scaAnalysis/dotnet/index.js +4 -7
  159. package/dist/scaAnalysis/dotnet/index.js.map +1 -0
  160. package/dist/scaAnalysis/go/goAnalysis.js +8 -11
  161. package/dist/scaAnalysis/go/goAnalysis.js.map +1 -0
  162. package/dist/scaAnalysis/go/goParseDeps.js +9 -7
  163. package/dist/scaAnalysis/go/goParseDeps.js.map +1 -0
  164. package/dist/scaAnalysis/go/goReadDepFile.js +10 -8
  165. package/dist/scaAnalysis/go/goReadDepFile.js.map +1 -0
  166. package/dist/scaAnalysis/java/analysis.js +23 -20
  167. package/dist/scaAnalysis/java/analysis.js.map +1 -0
  168. package/dist/scaAnalysis/java/index.js +7 -10
  169. package/dist/scaAnalysis/java/index.js.map +1 -0
  170. package/dist/scaAnalysis/java/javaBuildDepsParser.js +43 -43
  171. package/dist/scaAnalysis/java/javaBuildDepsParser.js.map +1 -0
  172. package/dist/scaAnalysis/javascript/analysis.js +16 -20
  173. package/dist/scaAnalysis/javascript/analysis.js.map +1 -0
  174. package/dist/scaAnalysis/javascript/index.js +17 -19
  175. package/dist/scaAnalysis/javascript/index.js.map +1 -0
  176. package/dist/scaAnalysis/javascript/scaServiceParser.js +8 -15
  177. package/dist/scaAnalysis/javascript/scaServiceParser.js.map +1 -0
  178. package/dist/scaAnalysis/legacy/legacyFlow.js +13 -15
  179. package/dist/scaAnalysis/legacy/legacyFlow.js.map +1 -0
  180. package/dist/scaAnalysis/php/analysis.js +15 -16
  181. package/dist/scaAnalysis/php/analysis.js.map +1 -0
  182. package/dist/scaAnalysis/php/index.js +5 -8
  183. package/dist/scaAnalysis/php/index.js.map +1 -0
  184. package/dist/scaAnalysis/php/phpNewServicesMapper.js +9 -12
  185. package/dist/scaAnalysis/php/phpNewServicesMapper.js.map +1 -0
  186. package/dist/scaAnalysis/processServicesFlow.js +86 -32
  187. package/dist/scaAnalysis/processServicesFlow.js.map +1 -0
  188. package/dist/scaAnalysis/python/analysis.js +16 -23
  189. package/dist/scaAnalysis/python/analysis.js.map +1 -0
  190. package/dist/scaAnalysis/python/index.js +4 -7
  191. package/dist/scaAnalysis/python/index.js.map +1 -0
  192. package/dist/scaAnalysis/repoMode/gradleParser.js +7 -13
  193. package/dist/scaAnalysis/repoMode/gradleParser.js.map +1 -0
  194. package/dist/scaAnalysis/repoMode/index.js +9 -12
  195. package/dist/scaAnalysis/repoMode/index.js.map +1 -0
  196. package/dist/scaAnalysis/repoMode/mavenParser.js +26 -14
  197. package/dist/scaAnalysis/repoMode/mavenParser.js.map +1 -0
  198. package/dist/scaAnalysis/ruby/analysis.js +32 -46
  199. package/dist/scaAnalysis/ruby/analysis.js.map +1 -0
  200. package/dist/scaAnalysis/ruby/index.js +5 -8
  201. package/dist/scaAnalysis/ruby/index.js.map +1 -0
  202. package/dist/scaAnalysis/scaAnalysis.js +49 -51
  203. package/dist/scaAnalysis/scaAnalysis.js.map +1 -0
  204. package/dist/scan/fileUtils.js +36 -40
  205. package/dist/scan/fileUtils.js.map +1 -0
  206. package/dist/scan/formatScanOutput.js +47 -61
  207. package/dist/scan/formatScanOutput.js.map +1 -0
  208. package/dist/scan/help.js +8 -11
  209. package/dist/scan/help.js.map +1 -0
  210. package/dist/scan/models/groupedResultsModel.js +2 -5
  211. package/dist/scan/models/groupedResultsModel.js.map +1 -0
  212. package/dist/scan/models/resultContentModel.js +2 -2
  213. package/dist/scan/models/resultContentModel.js.map +1 -0
  214. package/dist/scan/models/scanResultsModel.js +2 -5
  215. package/dist/scan/models/scanResultsModel.js.map +1 -0
  216. package/dist/scan/populateProjectIdAndProjectName.js +22 -60
  217. package/dist/scan/populateProjectIdAndProjectName.js.map +1 -0
  218. package/dist/scan/processScan.js +28 -0
  219. package/dist/scan/processScan.js.map +1 -0
  220. package/dist/scan/saveResults.js +3 -6
  221. package/dist/scan/saveResults.js.map +1 -0
  222. package/dist/scan/scan.js +33 -53
  223. package/dist/scan/scan.js.map +1 -0
  224. package/dist/scan/scanConfig.js +14 -12
  225. package/dist/scan/scanConfig.js.map +1 -0
  226. package/dist/scan/scanController.js +19 -21
  227. package/dist/scan/scanController.js.map +1 -0
  228. package/dist/scan/scanRequests.js +86 -0
  229. package/dist/scan/scanRequests.js.map +1 -0
  230. package/dist/scan/scanResults.js +26 -72
  231. package/dist/scan/scanResults.js.map +1 -0
  232. package/dist/telemetry/telemetry.js +29 -59
  233. package/dist/telemetry/telemetry.js.map +1 -0
  234. package/dist/utils/capabilities.js +2 -1
  235. package/dist/utils/capabilities.js.map +1 -0
  236. package/dist/utils/commonApi.js +58 -50
  237. package/dist/utils/commonApi.js.map +1 -0
  238. package/dist/utils/filterProjectPath.js +2 -1
  239. package/dist/utils/filterProjectPath.js.map +1 -0
  240. package/dist/utils/generalAPI.js +11 -33
  241. package/dist/utils/generalAPI.js.map +1 -0
  242. package/dist/utils/getConfig.js +8 -13
  243. package/dist/utils/getConfig.js.map +1 -0
  244. package/dist/utils/oraWrapper.js +7 -14
  245. package/dist/utils/oraWrapper.js.map +1 -0
  246. package/dist/utils/paramsUtil/commandlineParams.js +2 -5
  247. package/dist/utils/paramsUtil/commandlineParams.js.map +1 -0
  248. package/dist/utils/paramsUtil/configStoreParams.js +9 -10
  249. package/dist/utils/paramsUtil/configStoreParams.js.map +1 -0
  250. package/dist/utils/paramsUtil/envVariableParams.js +2 -3
  251. package/dist/utils/paramsUtil/envVariableParams.js.map +1 -0
  252. package/dist/utils/paramsUtil/paramHandler.js +12 -13
  253. package/dist/utils/paramsUtil/paramHandler.js.map +1 -0
  254. package/dist/utils/parsedCLIOptions.js +4 -7
  255. package/dist/utils/parsedCLIOptions.js.map +1 -0
  256. package/dist/utils/requestUtils.js +7 -13
  257. package/dist/utils/requestUtils.js.map +1 -0
  258. package/dist/utils/saveFile.js +8 -11
  259. package/dist/utils/saveFile.js.map +1 -0
  260. package/dist/utils/validationCheck.js +5 -11
  261. package/dist/utils/validationCheck.js.map +1 -0
  262. package/package.json +39 -48
  263. package/.prettierignore +0 -1
  264. package/bin/contrast.js +0 -2
  265. package/dist/audit/languageAnalysisEngine/util/requestUtils.js +0 -14
  266. package/dist/commands/audit/auditConfig.js +0 -12
  267. package/dist/commands/audit/help.js +0 -70
  268. package/dist/commands/audit/processAudit.js +0 -24
  269. package/dist/commands/auth/auth.js +0 -120
  270. package/dist/commands/github/fingerprintConfig.js +0 -13
  271. package/dist/commands/github/processFingerprint.js +0 -28
  272. package/dist/commands/github/projectGroup.js +0 -254
  273. package/dist/commands/github/repoServices.js +0 -108
  274. package/dist/commands/scan/processScan.js +0 -31
  275. package/dist/lambda/__mocks__/aws.js +0 -21
  276. package/dist/lambda/__mocks__/lambdaConfig.json +0 -42
  277. package/src/audit/catalogueApplication/catalogueApplication.js +0 -51
  278. package/src/audit/languageAnalysisEngine/commonApi.js +0 -20
  279. package/src/audit/languageAnalysisEngine/filterProjectPath.js +0 -21
  280. package/src/audit/languageAnalysisEngine/getProjectRootFilenames.js +0 -36
  281. package/src/audit/languageAnalysisEngine/sendSnapshot.js +0 -57
  282. package/src/audit/languageAnalysisEngine/util/requestUtils.js +0 -17
  283. package/src/audit/nodeAnalysisEngine/parseYarn2LockFileContents.js +0 -63
  284. package/src/audit/report/commonReportingFunctions.js +0 -412
  285. package/src/audit/report/models/reportGuidanceModel.ts +0 -5
  286. package/src/audit/report/models/reportLibraryModel.ts +0 -30
  287. package/src/audit/report/models/reportListModel.ts +0 -49
  288. package/src/audit/report/models/reportOutputModel.ts +0 -29
  289. package/src/audit/report/models/reportSeverityModel.ts +0 -18
  290. package/src/audit/report/models/severityCountModel.ts +0 -22
  291. package/src/audit/report/reportingFeature.ts +0 -110
  292. package/src/audit/report/utils/reportUtils.ts +0 -165
  293. package/src/audit/save.js +0 -67
  294. package/src/cliConstants.js +0 -522
  295. package/src/commands/audit/auditConfig.js +0 -18
  296. package/src/commands/audit/auditController.js +0 -50
  297. package/src/commands/audit/help.js +0 -72
  298. package/src/commands/audit/processAudit.js +0 -34
  299. package/src/commands/audit/saveFile.js +0 -15
  300. package/src/commands/auth/auth.js +0 -146
  301. package/src/commands/config/config.js +0 -41
  302. package/src/commands/github/fingerprintConfig.js +0 -19
  303. package/src/commands/github/processFingerprint.js +0 -37
  304. package/src/commands/github/projectGroup.js +0 -294
  305. package/src/commands/github/repoServices.js +0 -122
  306. package/src/commands/learn/learn.js +0 -10
  307. package/src/commands/learn/processLearn.js +0 -13
  308. package/src/commands/scan/processScan.js +0 -42
  309. package/src/common/HTTPClient.js +0 -775
  310. package/src/common/baseRequest.ts +0 -83
  311. package/src/common/commonHelp.js +0 -53
  312. package/src/common/errorHandling.js +0 -157
  313. package/src/common/fail.js +0 -79
  314. package/src/common/versionChecker.js +0 -75
  315. package/src/constants/constants.js +0 -71
  316. package/src/constants/lambda.js +0 -85
  317. package/src/constants/locales.js +0 -365
  318. package/src/index.ts +0 -142
  319. package/src/lambda/__mocks__/aws.ts +0 -32
  320. package/src/lambda/__mocks__/lambdaConfig.json +0 -42
  321. package/src/lambda/analytics.ts +0 -9
  322. package/src/lambda/arn.ts +0 -33
  323. package/src/lambda/aws.ts +0 -248
  324. package/src/lambda/cliError.ts +0 -72
  325. package/src/lambda/constants.ts +0 -11
  326. package/src/lambda/help.ts +0 -92
  327. package/src/lambda/lambda.ts +0 -230
  328. package/src/lambda/lambdaUtils.ts +0 -111
  329. package/src/lambda/logUtils.ts +0 -64
  330. package/src/lambda/scanDetailCompletion.ts +0 -78
  331. package/src/lambda/scanRequest.ts +0 -169
  332. package/src/lambda/scanResults.ts +0 -29
  333. package/src/lambda/types.ts +0 -36
  334. package/src/lambda/utils.ts +0 -188
  335. package/src/sbom/generateSbom.ts +0 -45
  336. package/src/scaAnalysis/common/auditReport.js +0 -59
  337. package/src/scaAnalysis/common/commonReportingFunctionsSca.js +0 -276
  338. package/src/scaAnalysis/common/formatMessage.js +0 -67
  339. package/src/scaAnalysis/common/models/ScaReportModel.ts +0 -81
  340. package/src/scaAnalysis/common/scaParserForGoAndJava.js +0 -41
  341. package/src/scaAnalysis/common/scaServicesUpload.js +0 -155
  342. package/src/scaAnalysis/common/treeUpload.js +0 -51
  343. package/src/scaAnalysis/common/utils/reportUtilsSca.ts +0 -123
  344. package/src/scaAnalysis/dotnet/analysis.js +0 -72
  345. package/src/scaAnalysis/dotnet/index.js +0 -11
  346. package/src/scaAnalysis/go/goAnalysis.js +0 -26
  347. package/src/scaAnalysis/go/goParseDeps.js +0 -203
  348. package/src/scaAnalysis/go/goReadDepFile.js +0 -34
  349. package/src/scaAnalysis/java/analysis.js +0 -148
  350. package/src/scaAnalysis/java/index.js +0 -29
  351. package/src/scaAnalysis/java/javaBuildDepsParser.js +0 -439
  352. package/src/scaAnalysis/javascript/analysis.js +0 -111
  353. package/src/scaAnalysis/javascript/index.js +0 -104
  354. package/src/scaAnalysis/javascript/scaServiceParser.js +0 -151
  355. package/src/scaAnalysis/legacy/legacyFlow.js +0 -43
  356. package/src/scaAnalysis/php/analysis.js +0 -78
  357. package/src/scaAnalysis/php/index.js +0 -28
  358. package/src/scaAnalysis/php/phpNewServicesMapper.js +0 -77
  359. package/src/scaAnalysis/processServicesFlow.js +0 -119
  360. package/src/scaAnalysis/python/analysis.js +0 -93
  361. package/src/scaAnalysis/python/index.js +0 -16
  362. package/src/scaAnalysis/repoMode/gradleParser.js +0 -88
  363. package/src/scaAnalysis/repoMode/index.js +0 -21
  364. package/src/scaAnalysis/repoMode/mavenParser.js +0 -139
  365. package/src/scaAnalysis/ruby/analysis.js +0 -413
  366. package/src/scaAnalysis/ruby/index.js +0 -16
  367. package/src/scaAnalysis/scaAnalysis.js +0 -171
  368. package/src/scan/autoDetection.js +0 -175
  369. package/src/scan/fileUtils.js +0 -206
  370. package/src/scan/formatScanOutput.ts +0 -225
  371. package/src/scan/help.js +0 -56
  372. package/src/scan/models/groupedResultsModel.ts +0 -20
  373. package/src/scan/models/resultContentModel.ts +0 -86
  374. package/src/scan/models/scanResultsModel.ts +0 -55
  375. package/src/scan/populateProjectIdAndProjectName.js +0 -73
  376. package/src/scan/saveResults.js +0 -14
  377. package/src/scan/scan.ts +0 -68
  378. package/src/scan/scanConfig.js +0 -58
  379. package/src/scan/scanController.js +0 -98
  380. package/src/scan/scanResults.js +0 -171
  381. package/src/telemetry/telemetry.ts +0 -154
  382. package/src/utils/capabilities.js +0 -12
  383. package/src/utils/commonApi.js +0 -103
  384. package/src/utils/filterProjectPath.js +0 -25
  385. package/src/utils/generalAPI.js +0 -52
  386. package/src/utils/getConfig.ts +0 -34
  387. package/src/utils/oraWrapper.js +0 -29
  388. package/src/utils/paramsUtil/commandlineParams.js +0 -12
  389. package/src/utils/paramsUtil/configStoreParams.js +0 -19
  390. package/src/utils/paramsUtil/envVariableParams.js +0 -10
  391. package/src/utils/paramsUtil/paramHandler.js +0 -38
  392. package/src/utils/parsedCLIOptions.js +0 -32
  393. package/src/utils/requestUtils.js +0 -29
  394. package/src/utils/saveFile.js +0 -20
  395. package/src/utils/validationCheck.js +0 -39
package/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Contrast CLI
2
2
 
3
- Use the ‘contrast’ command for fast and accurate security analysis of your applications, APIs, serverless functions, and libraries.
3
+ Use the ‘contrast’ command for fast and accurate security analysis of your applications, APIs,
4
+ serverless functions, and libraries.
4
5
 
5
6
  ## Supported
6
7
 
@@ -0,0 +1,9 @@
1
+ import { getCommandLineArgsCustom } from '../utils/parsedCLIOptions.js';
2
+ import { commandLineDefinitions } from '../cliConstants.js';
3
+ import { getAuth } from '../utils/paramsUtil/paramHandler.js';
4
+ export const getAssessConfig = async (contrastConf, command, argv) => {
5
+ const auditParameters = await getCommandLineArgsCustom(contrastConf, command, argv, commandLineDefinitions.assessOptionDefinitions);
6
+ const paramsAuth = getAuth(auditParameters);
7
+ return { ...paramsAuth, ...auditParameters };
8
+ };
9
+ //# sourceMappingURL=assessConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assessConfig.js","sourceRoot":"","sources":["../../src/assess/assessConfig.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAA;AAE7D,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IACnE,MAAM,eAAe,GAAG,MAAM,wBAAwB,CACpD,YAAY,EACZ,OAAO,EACP,IAAI,EACJ,sBAAsB,CAAC,uBAAuB,CAC/C,CAAA;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC3C,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,eAAe,EAAE,CAAA;AAC9C,CAAC,CAAA"}
@@ -0,0 +1,37 @@
1
+ import commandLineUsage from 'command-line-usage';
2
+ import i18n from 'i18n';
3
+ import { commandLineDefinitions } from '../cliConstants.js';
4
+ import { commonHelpLinks } from '../common/commonHelp.js';
5
+ export const assessUsageGuide = commandLineUsage([
6
+ {
7
+ header: i18n.__('constantsHeader')
8
+ },
9
+ {
10
+ header: i18n.__('assessHeader')
11
+ },
12
+ {
13
+ header: i18n.__('constantsAssessOptions'),
14
+ optionList: commandLineDefinitions.assessOptionDefinitions,
15
+ hide: [
16
+ 'project-id',
17
+ 'organization-id',
18
+ 'api-key',
19
+ 'authorization',
20
+ 'host',
21
+ 'proxy',
22
+ 'help',
23
+ 'ff',
24
+ 'cert-self-signed',
25
+ 'key',
26
+ 'cacert',
27
+ 'cert',
28
+ 'verbose',
29
+ 'debug',
30
+ 'experimental'
31
+ ]
32
+ },
33
+ commonHelpLinks()[0],
34
+ commonHelpLinks()[1],
35
+ commonHelpLinks()[2]
36
+ ]);
37
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/assess/help.js"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,oBAAoB,CAAA;AACjD,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;IAC/C;QACE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC;KACnC;IACD;QACE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC;KAChC;IACD;QACE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,wBAAwB,CAAC;QACzC,UAAU,EAAE,sBAAsB,CAAC,uBAAuB;QAC1D,IAAI,EAAE;YACJ,YAAY;YACZ,iBAAiB;YACjB,SAAS;YACT,eAAe;YACf,MAAM;YACN,OAAO;YACP,MAAM;YACN,IAAI;YACJ,kBAAkB;YAClB,KAAK;YACL,QAAQ;YACR,MAAM;YACN,SAAS;YACT,OAAO;YACP,cAAc;SACf;KACF;IACD,eAAe,EAAE,CAAC,CAAC,CAAC;IACpB,eAAe,EAAE,CAAC,CAAC,CAAC;IACpB,eAAe,EAAE,CAAC,CAAC,CAAC;CACrB,CAAC,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { getHttpClient } from '../../utils/commonApi.js';
2
+ import { returnOra, startSpinner, succeedSpinner } from '../../utils/oraWrapper.js';
3
+ import { sleep } from '../../utils/requestUtils.js';
4
+ const TEAM_SERVER_REQUEST_DELAY = 3000; // add a 3 second delay
5
+ export const createClient = config => getHttpClient(config);
6
+ export const getInstanceFromMetadataFilter = async (httpClient, buildNumber, applicationId, hasLoggedMessage = false, oraMessage) => {
7
+ const instanceGuid = await httpClient.getInstanceFromMetadataFilter(buildNumber, applicationId);
8
+ const sessionRegistration = oraMessage || returnOra('Waiting for the session to be created.');
9
+ if (!instanceGuid.body.agentSessions[0]?.agentSessionId) {
10
+ if (!hasLoggedMessage) {
11
+ startSpinner(sessionRegistration);
12
+ hasLoggedMessage = true;
13
+ }
14
+ await sleep(TEAM_SERVER_REQUEST_DELAY);
15
+ return getInstanceFromMetadataFilter(httpClient, buildNumber, applicationId, hasLoggedMessage, sessionRegistration);
16
+ }
17
+ succeedSpinner(sessionRegistration, 'Session created.');
18
+ return instanceGuid.body.agentSessions[0].agentSessionId;
19
+ };
20
+ export const getAppId = async (httpClient, config, hasLoggedMessage = false, oraMessage) => {
21
+ const res = await httpClient.getAppId(config);
22
+ const applicationRegistration = oraMessage ||
23
+ returnOra('Contrast Assess started, waiting for the application to be registered.');
24
+ if (res.body) {
25
+ let obj = res.body.applications;
26
+ if (obj.length > 0) {
27
+ succeedSpinner(applicationRegistration, 'Application registered.');
28
+ return obj[0].app_id;
29
+ }
30
+ if (!hasLoggedMessage) {
31
+ startSpinner(applicationRegistration);
32
+ hasLoggedMessage = true;
33
+ }
34
+ await sleep(TEAM_SERVER_REQUEST_DELAY);
35
+ return getAppId(httpClient, config, hasLoggedMessage, applicationRegistration);
36
+ }
37
+ return null;
38
+ };
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/assess/http/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EACL,SAAS,EACT,YAAY,EACZ,cAAc,EACf,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAA;AAEnD,MAAM,yBAAyB,GAAG,IAAI,CAAA,CAAC,uBAAuB;AAE9D,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;AAE3D,MAAM,CAAC,MAAM,6BAA6B,GAAG,KAAK,EAChD,UAAU,EACV,WAAW,EACX,aAAa,EACb,gBAAgB,GAAG,KAAK,EACxB,UAAU,EACV,EAAE;IACF,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,6BAA6B,CACjE,WAAW,EACX,aAAa,CACd,CAAA;IACD,MAAM,mBAAmB,GACvB,UAAU,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAA;IAEnE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE;QACvD,IAAI,CAAC,gBAAgB,EAAE;YACrB,YAAY,CAAC,mBAAmB,CAAC,CAAA;YACjC,gBAAgB,GAAG,IAAI,CAAA;SACxB;QAED,MAAM,KAAK,CAAC,yBAAyB,CAAC,CAAA;QACtC,OAAO,6BAA6B,CAClC,UAAU,EACV,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,mBAAmB,CACpB,CAAA;KACF;IAED,cAAc,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAA;IACvD,OAAO,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,cAAc,CAAA;AAC1D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,UAAU,EACV,MAAM,EACN,gBAAgB,GAAG,KAAK,EACxB,UAAU,EACV,EAAE;IACF,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,uBAAuB,GAC3B,UAAU;QACV,SAAS,CACP,wEAAwE,CACzE,CAAA;IAEH,IAAI,GAAG,CAAC,IAAI,EAAE;QACZ,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAA;QAC/B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YAClB,cAAc,CAAC,uBAAuB,EAAE,yBAAyB,CAAC,CAAA;YAClE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;SACrB;QAED,IAAI,CAAC,gBAAgB,EAAE;YACrB,YAAY,CAAC,uBAAuB,CAAC,CAAA;YACrC,gBAAgB,GAAG,IAAI,CAAA;SACxB;QAED,MAAM,KAAK,CAAC,yBAAyB,CAAC,CAAA;QACtC,OAAO,QAAQ,CACb,UAAU,EACV,MAAM,EACN,gBAAgB,EAChB,uBAAuB,CACxB,CAAA;KACF;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
@@ -0,0 +1,69 @@
1
+ import { createClient, getInstanceFromMetadataFilter, getAppId } from './http/index.js';
2
+ import { getAssessConfig } from './assessConfig.js';
3
+ import { printVulnerability } from './printing/index.js';
4
+ import { emptyListSpinner } from './printing/utils.js';
5
+ import { retrieveAndSetAgentCredentials } from './metadata/index.js';
6
+ import { getBuildNumber } from './metadata/utils.js';
7
+ import { assessUsageGuide } from './help.js';
8
+ const printedVulnerabilities = new Map();
9
+ const { start: displayEmptyListMessage, stop: removeEmptyListMessage } = emptyListSpinner();
10
+ export const processAssess = async (contrastConf, argvMain) => {
11
+ if (argvMain.indexOf('--help') !== -1) {
12
+ console.log(assessUsageGuide);
13
+ return process.exit(0);
14
+ }
15
+ /* Probably needs a little refactoring */
16
+ const config = await getAssessConfig(contrastConf, 'assess', argvMain);
17
+ const reportNotes = config.reportNotes;
18
+ const yamlData = await retrieveAndSetAgentCredentials(config);
19
+ const buildNumber = getBuildNumber(yamlData.application.session_metadata);
20
+ const applicationName = yamlData.application.name;
21
+ config.applicationName = applicationName;
22
+ const httpClient = createClient(config);
23
+ const applicationId = await getAppId(httpClient, config);
24
+ if (!applicationId) {
25
+ throw new Error('Something went wrong!');
26
+ }
27
+ const retrievedInstanceGuid = await getInstanceFromMetadataFilter(httpClient, buildNumber, applicationId);
28
+ return setAssessListener(httpClient, applicationId, retrievedInstanceGuid, reportNotes);
29
+ };
30
+ async function getVulnerabilitiesDetails(tailData, httpClient) {
31
+ return Promise.all(tailData.body.items.map(({ vulnerability }) => httpClient.getVulnerabilityDetails(vulnerability.uuid).then(details => {
32
+ vulnerability.details = details.body;
33
+ return vulnerability;
34
+ })));
35
+ }
36
+ async function printVulnerabilities(vulnerabilities, reportNotes) {
37
+ if (vulnerabilities.length === 0) {
38
+ displayEmptyListMessage();
39
+ }
40
+ vulnerabilities.forEach(vulnerability => {
41
+ if (printedVulnerabilities.has(vulnerability.uuid) ||
42
+ (vulnerability.severity === 'NOTE' && !reportNotes)) {
43
+ return;
44
+ }
45
+ removeEmptyListMessage();
46
+ printVulnerability(vulnerability, console.log);
47
+ printedVulnerabilities.set(vulnerability.uuid, true);
48
+ });
49
+ }
50
+ async function setAssessListener(httpClient, applicationId, retrievedInstanceGuid, reportNotes) {
51
+ return httpClient
52
+ .getAssessData(applicationId, retrievedInstanceGuid)
53
+ .then(tailData => {
54
+ if (tailData.statusCode !== 200) {
55
+ throw new Error('Something went wrong!');
56
+ }
57
+ return getVulnerabilitiesDetails(tailData, httpClient);
58
+ })
59
+ .then(vulnerabilities => printVulnerabilities(vulnerabilities, reportNotes))
60
+ .then(() => {
61
+ // Request data again
62
+ setTimeout(() => {
63
+ setAssessListener(httpClient, applicationId, retrievedInstanceGuid, reportNotes).catch(err => {
64
+ throw new Error(err);
65
+ });
66
+ }, 3000);
67
+ });
68
+ }
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/assess/index.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { CONTRAST_FILE_NAME } from './utils.js';
4
+ export function findContrastSecurityYaml(process) {
5
+ // Check for a contrast_security.yaml file in the current working directory
6
+ const currentDir = process.cwd();
7
+ const currentFile = path.join(currentDir, CONTRAST_FILE_NAME);
8
+ if (fs.existsSync(currentFile)) {
9
+ return currentFile;
10
+ }
11
+ // Check for a contrast_security.yaml file - Ruby on Rails
12
+ const rubyFilePath = path.join(currentDir, `./config/${CONTRAST_FILE_NAME}`);
13
+ if (fs.existsSync(rubyFilePath)) {
14
+ return rubyFilePath;
15
+ }
16
+ // Check for a contrast_security.yaml file - Django
17
+ const djangoFilePath = path.join(currentDir, `./settings/${CONTRAST_FILE_NAME}`);
18
+ if (fs.existsSync(djangoFilePath)) {
19
+ return djangoFilePath;
20
+ }
21
+ // Check for a contrast_security.yaml file in an agent-specific configuration directory
22
+ const agentName = getAgentName(process);
23
+ const agentConfigDir = getAgentConfigDir(agentName, process);
24
+ if (fs.existsSync(agentConfigDir)) {
25
+ return agentConfigDir;
26
+ }
27
+ // Check for a contrast_security.yaml file within the server's /etc/contrast directory
28
+ const serverFile = getServerConfigFile(process);
29
+ if (fs.existsSync(serverFile)) {
30
+ return serverFile;
31
+ }
32
+ return null;
33
+ }
34
+ function getAgentConfigDir(agentName, process) {
35
+ // Get the agent-specific configuration directory based on the current platform
36
+ if (process.platform === 'win32') {
37
+ return path.join(process.env.ProgramData, 'Contrast', agentName, CONTRAST_FILE_NAME);
38
+ }
39
+ else {
40
+ return path.join('/etc', 'contrast', agentName, CONTRAST_FILE_NAME);
41
+ }
42
+ }
43
+ function getServerConfigFile(process) {
44
+ // Get the server's configuration file based on the current platform
45
+ if (process.platform === 'win32') {
46
+ return path.join(process.env.ProgramData, 'Contrast', CONTRAST_FILE_NAME);
47
+ }
48
+ else {
49
+ return path.join('/etc/contrast/', CONTRAST_FILE_NAME);
50
+ }
51
+ }
52
+ function getAgentName(process) {
53
+ // You can use the agent's environment variable to get the agent name
54
+ // For example, for Node.js agent, you can use the CONTRAST__NAME environment variable
55
+ // For Java agent, you can use the CONTRAST__APPLICATION__NAME environment variable
56
+ // Here's an example of how you can get the agent name for the Node.js agent:
57
+ return process.env.CONTRAST__NAME || 'node';
58
+ }
59
+ //# sourceMappingURL=findYamlFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findYamlFile.js","sourceRoot":"","sources":["../../../src/assess/metadata/findYamlFile.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C,MAAM,UAAU,wBAAwB,CAAC,OAAO;IAC9C,2EAA2E;IAC3E,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IAChC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAA;IAC7D,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;QAC9B,OAAO,WAAW,CAAA;KACnB;IAED,0DAA0D;IAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,kBAAkB,EAAE,CAAC,CAAA;IAC5E,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;QAC/B,OAAO,YAAY,CAAA;KACpB;IAED,mDAAmD;IACnD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAC9B,UAAU,EACV,cAAc,kBAAkB,EAAE,CACnC,CAAA;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;QACjC,OAAO,cAAc,CAAA;KACtB;IAED,uFAAuF;IACvF,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IACvC,MAAM,cAAc,GAAG,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAC5D,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;QACjC,OAAO,cAAc,CAAA;KACtB;IAED,sFAAsF;IACtF,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAA;IAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAC7B,OAAO,UAAU,CAAA;KAClB;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAS,EAAE,OAAO;IAC3C,+EAA+E;IAC/E,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;QAChC,OAAO,IAAI,CAAC,IAAI,CACd,OAAO,CAAC,GAAG,CAAC,WAAW,EACvB,UAAU,EACV,SAAS,EACT,kBAAkB,CACnB,CAAA;KACF;SAAM;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAA;KACpE;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAO;IAClC,oEAAoE;IACpE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAA;KAC1E;SAAM;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAA;KACvD;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAO;IAC3B,qEAAqE;IACrE,sFAAsF;IACtF,mFAAmF;IACnF,6EAA6E;IAC7E,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,MAAM,CAAA;AAC7C,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { createClient } from '../http/index.js';
2
+ import fs from 'fs';
3
+ import yaml from 'js-yaml';
4
+ import { findContrastSecurityYaml } from './findYamlFile.js';
5
+ import { saveYamlData, createYamlFile, isYamlFileCreated, normalizeYamlPath } from './utils.js';
6
+ export const retrieveAndSetAgentCredentials = async (config) => {
7
+ const httpClient = createClient(config);
8
+ const agentCredentials = await httpClient.getAgentCredentials(config);
9
+ if (agentCredentials.body != null) {
10
+ const { configPath } = config;
11
+ let filePath;
12
+ if (configPath) {
13
+ if (isYamlFileCreated(configPath)) {
14
+ filePath = normalizeYamlPath(configPath);
15
+ }
16
+ else {
17
+ filePath = createYamlFile(configPath);
18
+ }
19
+ }
20
+ if (!filePath) {
21
+ filePath = await findContrastSecurityYaml(process);
22
+ }
23
+ if (!filePath) {
24
+ filePath = createYamlFile();
25
+ }
26
+ const yamlData = yaml.load(fs.readFileSync(filePath, 'utf8'));
27
+ saveYamlData(config.host, agentCredentials, yamlData, filePath);
28
+ // todo research on env vars below
29
+ // setting env vars is a nono, can only apply to the process within the app that sets them
30
+ // needs to be done in the shells config e.g. zshrc etc, not to be done by an app, can possible mess it up (netskope does it)
31
+ // order of export can matter as well depending on the apps in use by a user
32
+ // stick to yaml and keep it in directory cli is ran in or store it to a agent default location per system
33
+ return yamlData;
34
+ }
35
+ throw new Error('unable to retrieve agent credentials');
36
+ };
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/assess/metadata/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,SAAS,CAAA;AAC1B,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EACL,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,YAAY,CAAA;AAEnB,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,EAAC,MAAM,EAAC,EAAE;IAC3D,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;IACvC,MAAM,gBAAgB,GAAG,MAAM,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAErE,IAAI,gBAAgB,CAAC,IAAI,IAAI,IAAI,EAAE;QACjC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;QAC7B,IAAI,QAAQ,CAAA;QAEZ,IAAI,UAAU,EAAE;YACd,IAAI,iBAAiB,CAAC,UAAU,CAAC,EAAE;gBACjC,QAAQ,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;aACzC;iBAAM;gBACL,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;aACtC;SACF;QAED,IAAI,CAAC,QAAQ,EAAE;YACb,QAAQ,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAA;SACnD;QAED,IAAI,CAAC,QAAQ,EAAE;YACb,QAAQ,GAAG,cAAc,EAAE,CAAA;SAC5B;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;QAC7D,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAE/D,kCAAkC;QAClC,0FAA0F;QAC1F,6HAA6H;QAC7H,4EAA4E;QAC5E,0GAA0G;QAE1G,OAAO,QAAQ,CAAA;KAChB;IAED,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;AACzD,CAAC,CAAA"}
@@ -0,0 +1,159 @@
1
+ import fs from 'fs';
2
+ import os from 'os';
3
+ import path from 'path';
4
+ import yaml from 'js-yaml';
5
+ import { v4 as uuidv4 } from 'uuid';
6
+ const API_URL_PATH = '/Contrast/';
7
+ export const CONTRAST_FILE_NAME = 'contrast_security.yaml';
8
+ export const winDirectory = () => path.join(process.env.ProgramData, 'Contrast');
9
+ export const defaultDirectory = '/etc/contrast';
10
+ export function getBuildNumber(str) {
11
+ return str
12
+ .split(',')
13
+ .find(kv => kv.startsWith('buildNumber='))
14
+ ?.split('=')[1];
15
+ }
16
+ function replaceBuildNumber(str, newBuildNumber) {
17
+ const pairs = str.split(',');
18
+ const buildNumberIndex = pairs.findIndex(pair => pair.startsWith('buildNumber='));
19
+ if (buildNumberIndex !== -1) {
20
+ pairs[buildNumberIndex] = `buildNumber=${newBuildNumber}`;
21
+ }
22
+ else {
23
+ pairs.push(`buildNumber=${newBuildNumber}`);
24
+ }
25
+ return pairs.filter(pair => pair !== '').join(',');
26
+ }
27
+ export function isDirectoryWriteable(directory) {
28
+ try {
29
+ fs.accessSync(directory, fs.constants.W_OK);
30
+ }
31
+ catch (err) {
32
+ return false;
33
+ }
34
+ return true;
35
+ }
36
+ function getDirname(pathStr) {
37
+ const parsedPath = path.parse(pathStr);
38
+ return parsedPath.ext ? parsedPath.dir : pathStr;
39
+ }
40
+ function getDirectory(configPath) {
41
+ const platform = os.platform();
42
+ const isWindows = platform === 'win32';
43
+ if (configPath) {
44
+ const directory = getDirname(configPath);
45
+ return {
46
+ directory,
47
+ isDefaultDirectory: isWindows
48
+ ? directory === winDirectory()
49
+ : directory === defaultDirectory
50
+ };
51
+ }
52
+ // Check the current platform and determine the directory to save the YAML file
53
+ if (isWindows) {
54
+ return {
55
+ directory: winDirectory(),
56
+ isDefaultDirectory: true
57
+ };
58
+ }
59
+ return {
60
+ directory: defaultDirectory,
61
+ isDefaultDirectory: true
62
+ };
63
+ }
64
+ export function isYamlFileCreated(configPath) {
65
+ const normalizedPath = normalizeYamlPath(configPath);
66
+ if (fs.existsSync(normalizedPath)) {
67
+ return true;
68
+ }
69
+ return false;
70
+ }
71
+ export function normalizeYamlPath(configPath) {
72
+ const { directory } = getDirectory(configPath);
73
+ return path.join(directory, CONTRAST_FILE_NAME);
74
+ }
75
+ export const createYamlFile = configPath => {
76
+ const { directory, isDefaultDirectory } = getDirectory(configPath);
77
+ if (!fs.existsSync(directory)) {
78
+ if (configPath && !isDefaultDirectory) {
79
+ throw new Error('The provided path does not exist!');
80
+ }
81
+ // The default directory doesn't exist, so we need to create it
82
+ try {
83
+ fs.mkdirSync(directory, { recursive: true });
84
+ }
85
+ catch (err) {
86
+ if (err.code === 'EACCES') {
87
+ throw new Error(`Permission denied: cannot write to ${directory}`);
88
+ }
89
+ throw new Error(err);
90
+ }
91
+ }
92
+ // Check if the directory is writable
93
+ if (!isDirectoryWriteable(directory)) {
94
+ throw new Error(`Permission denied: cannot write to ${directory}`);
95
+ }
96
+ const yamlData = yaml.dump({});
97
+ const filePath = path.join(directory, CONTRAST_FILE_NAME);
98
+ // Write the YAML data to a file
99
+ try {
100
+ fs.writeFileSync(filePath, yamlData, { flag: 'w+' });
101
+ }
102
+ catch (err) {
103
+ throw new Error(`Cannot write to file ${filePath}`);
104
+ }
105
+ return filePath;
106
+ };
107
+ export const saveYamlData = (host, agentCredentials, yamlData = {}, fileName) => {
108
+ yamlData.api = {
109
+ ...yamlData.api,
110
+ url: `${host}${API_URL_PATH}`,
111
+ api_key: agentCredentials.body.api_key,
112
+ service_key: agentCredentials.body.service_key,
113
+ user_name: agentCredentials.body.user_uid
114
+ };
115
+ yamlData.application = {
116
+ ...yamlData.application,
117
+ session_metadata: replaceBuildNumber(yamlData.application?.session_metadata || '', uuidv4())
118
+ };
119
+ yamlData.inventory = {
120
+ ...yamlData.inventory,
121
+ analyze_libraries: false
122
+ };
123
+ yamlData.agent = {
124
+ ...yamlData.agent,
125
+ diagnostics: {
126
+ ...yamlData.agent?.diagnostics,
127
+ enable: false
128
+ }
129
+ };
130
+ if (!yamlData.application.name) {
131
+ yamlData.application.name = 'ContrastAssessApplication';
132
+ }
133
+ yamlData.assess = {
134
+ ...yamlData.assess,
135
+ enable: true
136
+ };
137
+ yamlData.protect = {
138
+ ...yamlData.protect,
139
+ enable: false
140
+ };
141
+ try {
142
+ const filePath = path.resolve(fileName);
143
+ const dirPath = getDirname(filePath);
144
+ // Ensure the directory exists
145
+ fs.mkdirSync(dirPath, { recursive: true });
146
+ // Write the file
147
+ fs.writeFileSync(filePath, yaml.dump(yamlData), 'utf-8');
148
+ }
149
+ catch (err) {
150
+ if (err.code === 'EACCES') {
151
+ throw new Error(`Permission denied: cannot write to ${fileName}`);
152
+ }
153
+ else {
154
+ throw new Error(`Error saving YAML data to file ${fileName}: ${err}`);
155
+ }
156
+ }
157
+ return yamlData;
158
+ };
159
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/assess/metadata/utils.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { buildHeader, buildDetails } from './utils.js';
2
+ export const printVulnerability = (vulnerability, logger) => {
3
+ const header = buildHeader(vulnerability);
4
+ const keyValues = buildDetails(vulnerability);
5
+ logger(header);
6
+ Object.values(keyValues).forEach(({ key, value }) => {
7
+ logger(key + value);
8
+ });
9
+ logger('\n');
10
+ };
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/assess/printing/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE;IAC1D,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,CAAA;IACzC,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,CAAC,CAAA;IAE7C,MAAM,CAAC,MAAM,CAAC,CAAA;IAEd,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;QAClD,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,CAAA;IACrB,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,IAAI,CAAC,CAAA;AACd,CAAC,CAAA"}
@@ -0,0 +1,119 @@
1
+ import { CRITICAL_COLOUR, HIGH_COLOUR, MEDIUM_COLOUR, LOW_COLOUR, NOTE_COLOUR, BLUE_TEXT_COLOUR } from '../../constants/constants.js';
2
+ import { returnOra, startSpinner, stopSpinner } from '../../utils/oraWrapper.js';
3
+ import { wrapText, setOffsetForNewLine } from '../../common/stringManipulations.js';
4
+ import chalk from 'chalk';
5
+ const severityToColor = severity => {
6
+ switch (severity) {
7
+ case 'CRITICAL':
8
+ return CRITICAL_COLOUR;
9
+ case 'HIGH':
10
+ return HIGH_COLOUR;
11
+ case 'MEDIUM':
12
+ return MEDIUM_COLOUR;
13
+ case 'LOW':
14
+ return LOW_COLOUR;
15
+ case 'NOTE':
16
+ return NOTE_COLOUR;
17
+ default:
18
+ return NOTE_COLOUR;
19
+ }
20
+ };
21
+ export const buildHeader = vulnerability => {
22
+ const color = severityToColor(vulnerability.severity);
23
+ const title = vulnerability.title.split(' from ');
24
+ let header = '';
25
+ if (title.length >= 1) {
26
+ header =
27
+ chalk.hex(color)(`${vulnerability.application.name} - [${vulnerability.severity}]`) +
28
+ chalk.hex(color).bold(` ${title[0]}`) +
29
+ ' from ' +
30
+ title.slice(1).join(' ') +
31
+ `${vulnerability.title}`;
32
+ }
33
+ else {
34
+ header =
35
+ chalk.hex(color)(`${vulnerability.application.name} - [${vulnerability.severity}]`) + ` ${vulnerability.title}`;
36
+ }
37
+ header = wrapText(header, 160);
38
+ return header;
39
+ };
40
+ const buildDetailsKey = (key, keyWidth) => {
41
+ return chalk.bold(key.padStart(keyWidth) + ': ');
42
+ };
43
+ const buildSource = (chapter, keyWidth, wrapNumber) => {
44
+ const key = buildDetailsKey('Source', keyWidth);
45
+ const value = setOffsetForNewLine(wrapText(chapter.body, wrapNumber), keyWidth + 2).trimStart();
46
+ return { key, value };
47
+ };
48
+ const buildLocation = (chapter, keyWidth, wrapNumber) => {
49
+ const key = buildDetailsKey('Location', keyWidth);
50
+ const value = setOffsetForNewLine(chalk.hex(BLUE_TEXT_COLOUR)(wrapText(chapter.body, wrapNumber)), keyWidth + 2).trimStart();
51
+ return { key, value };
52
+ };
53
+ const buildDataFlow = (chapter, keyWidth, wrapNumber) => {
54
+ const key = buildDetailsKey('Dataflow', keyWidth);
55
+ const value = chalk.hex('#e63025')(wrapText(chapter.body, wrapNumber));
56
+ return { key, value };
57
+ };
58
+ const buildConfiguration = (chapter, keyWidth, wrapNumber) => {
59
+ const key = buildDetailsKey('Configuration', keyWidth);
60
+ const value = setOffsetForNewLine(wrapText(chapter.body, wrapNumber), keyWidth + 2).trimStart();
61
+ return { key, value };
62
+ };
63
+ const buildProperties = (chapter, keyWidth, wrapNumber) => {
64
+ const key = buildDetailsKey('Properties', keyWidth);
65
+ const properties = Object.keys(chapter.properties)
66
+ .map(value => value)
67
+ .join(',');
68
+ const value = setOffsetForNewLine(wrapText(chapter.introText + ' ' + properties, wrapNumber), keyWidth + 2).trimStart();
69
+ return { key, value };
70
+ };
71
+ export const buildDetails = vulnerability => {
72
+ const wrapNumber = 90;
73
+ const keyWidth = 10;
74
+ const issue = buildDetailsKey('Issue', keyWidth);
75
+ const issueValue = setOffsetForNewLine(wrapText(vulnerability.details.story.risk.text, wrapNumber), keyWidth + 2).trimStart();
76
+ const keyValues = {};
77
+ vulnerability.details.story.chapters.forEach(chapter => {
78
+ switch (chapter.type) {
79
+ case 'source':
80
+ keyValues.source = buildSource(chapter, keyWidth, wrapNumber);
81
+ break;
82
+ case 'location':
83
+ keyValues.location = buildLocation(chapter, keyWidth, wrapNumber);
84
+ break;
85
+ case 'dataflow':
86
+ keyValues.dataflow = buildDataFlow(chapter, keyWidth, wrapNumber);
87
+ break;
88
+ case 'properties':
89
+ keyValues.properties = buildProperties(chapter, keyWidth, wrapNumber);
90
+ break;
91
+ case 'configuration':
92
+ keyValues.configuration = buildConfiguration(chapter, keyWidth, wrapNumber);
93
+ break;
94
+ }
95
+ });
96
+ keyValues.issue = { key: issue, value: issueValue.trimStart() };
97
+ return keyValues;
98
+ };
99
+ export const emptyListSpinner = () => {
100
+ const message = returnOra('Waiting for vulnerability to be reported.');
101
+ let emptyListMessageDisplayed = false;
102
+ const start = () => {
103
+ if (emptyListMessageDisplayed)
104
+ return;
105
+ startSpinner(message);
106
+ emptyListMessageDisplayed = true;
107
+ };
108
+ const stop = () => {
109
+ if (!emptyListMessageDisplayed)
110
+ return;
111
+ stopSpinner(message);
112
+ emptyListMessageDisplayed = false;
113
+ };
114
+ return {
115
+ start,
116
+ stop
117
+ };
118
+ };
119
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/assess/printing/utils.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { getCommandLineArgsCustom } from '../utils/parsedCLIOptions.js';
2
+ import { commandLineDefinitions } from '../cliConstants.js';
3
+ import { getAuth } from '../utils/paramsUtil/paramHandler.js';
4
+ export const getAuditConfig = async (contrastConf, command, argv) => {
5
+ const auditParameters = await getCommandLineArgsCustom(contrastConf, command, argv, commandLineDefinitions.auditOptionDefinitions);
6
+ const paramsAuth = getAuth(auditParameters);
7
+ return { ...paramsAuth, ...auditParameters };
8
+ };
9
+ //# sourceMappingURL=auditConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auditConfig.js","sourceRoot":"","sources":["../../src/audit/auditConfig.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAA;AAE7D,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAClE,MAAM,eAAe,GAAG,MAAM,wBAAwB,CACpD,YAAY,EACZ,OAAO,EACP,IAAI,EACJ,sBAAsB,CAAC,sBAAsB,CAC9C,CAAA;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC3C,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,eAAe,EAAE,CAAA;AAC9C,CAAC,CAAA"}