@contrast/contrast 1.0.15 → 1.0.16

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 (47) hide show
  1. package/dist/audit/languageAnalysisEngine/sendSnapshot.js +2 -2
  2. package/dist/audit/report/commonReportingFunctions.js +1 -19
  3. package/dist/{constants.js → cliConstants.js} +41 -31
  4. package/dist/commands/audit/auditConfig.js +2 -2
  5. package/dist/commands/audit/help.js +2 -2
  6. package/dist/commands/auth/auth.js +1 -1
  7. package/dist/commands/config/config.js +1 -1
  8. package/dist/commands/scan/sca/scaAnalysis.js +33 -20
  9. package/dist/common/HTTPClient.js +4 -2
  10. package/dist/constants/constants.js +1 -1
  11. package/dist/constants/locales.js +5 -30
  12. package/dist/index.js +5 -5
  13. package/dist/scaAnalysis/common/auditReport.js +3 -2
  14. package/dist/scaAnalysis/common/scaParserForGoAndJava.js +1 -1
  15. package/dist/scaAnalysis/javascript/scaServiceParser.js +2 -2
  16. package/dist/scaAnalysis/php/phpNewServicesMapper.js +3 -3
  17. package/dist/scaAnalysis/python/analysis.js +1 -1
  18. package/dist/scaAnalysis/repoMode/gradleParser.js +75 -0
  19. package/dist/scaAnalysis/repoMode/index.js +21 -0
  20. package/dist/scaAnalysis/repoMode/mavenParser.js +76 -0
  21. package/dist/scaAnalysis/ruby/analysis.js +4 -4
  22. package/dist/scan/help.js +1 -1
  23. package/dist/scan/scanConfig.js +1 -1
  24. package/package.json +2 -1
  25. package/src/audit/languageAnalysisEngine/sendSnapshot.js +2 -6
  26. package/src/audit/report/commonReportingFunctions.js +1 -23
  27. package/src/{constants.js → cliConstants.js} +47 -35
  28. package/src/commands/audit/auditConfig.ts +1 -1
  29. package/src/commands/audit/help.ts +1 -1
  30. package/src/commands/auth/auth.js +1 -1
  31. package/src/commands/config/config.js +1 -1
  32. package/src/commands/scan/sca/scaAnalysis.js +35 -25
  33. package/src/common/HTTPClient.js +4 -2
  34. package/src/constants/constants.js +1 -1
  35. package/src/constants/locales.js +6 -44
  36. package/src/index.ts +1 -1
  37. package/src/scaAnalysis/common/auditReport.js +3 -4
  38. package/src/scaAnalysis/common/scaParserForGoAndJava.js +1 -1
  39. package/src/scaAnalysis/javascript/scaServiceParser.js +8 -2
  40. package/src/scaAnalysis/php/phpNewServicesMapper.js +3 -3
  41. package/src/scaAnalysis/python/analysis.js +1 -1
  42. package/src/scaAnalysis/repoMode/gradleParser.js +88 -0
  43. package/src/scaAnalysis/repoMode/index.js +21 -0
  44. package/src/scaAnalysis/repoMode/mavenParser.js +89 -0
  45. package/src/scaAnalysis/ruby/analysis.js +4 -4
  46. package/src/scan/help.js +1 -1
  47. package/src/scan/scanConfig.js +1 -1
@@ -38,7 +38,10 @@ const npmCreateDepTree = (
38
38
  name: key,
39
39
  version: getResolvedVersion(key, packageLock),
40
40
  group: null,
41
- isProduction: checkIfInPackageJSON(rawNode.packageJSON.dependencies, key),
41
+ productionDependency: checkIfInPackageJSON(
42
+ rawNode.packageJSON.dependencies,
43
+ key
44
+ ),
42
45
  directDependency: checkIfInPackageJSON(combinedPackageJSONDep, key),
43
46
  dependencies: createNPMChildDependencies(packageLock, key)
44
47
  }
@@ -59,7 +62,10 @@ const yarnCreateDepTree = (
59
62
  name: gav,
60
63
  version: getResolvedVersion(key, packageLock),
61
64
  group: null,
62
- isProduction: checkIfInPackageJSON(rawNode.packageJSON.dependencies, nag),
65
+ productionDependency: checkIfInPackageJSON(
66
+ rawNode.packageJSON.dependencies,
67
+ nag
68
+ ),
63
69
  directDependency: checkIfInPackageJSON(combinedPackageJSONDep, nag),
64
70
  dependencies: createChildDependencies(packageLock, key)
65
71
  }
@@ -7,7 +7,7 @@ const parsePHPLockFileForScaServices = phpLockFile => {
7
7
  return merge(buildDepTree(packages, true), buildDepTree(packagesDev, false))
8
8
  }
9
9
 
10
- const buildDepTree = (packages, isProduction) => {
10
+ const buildDepTree = (packages, productionDependency) => {
11
11
  //builds deps into flat structure
12
12
  const dependencyTree = {}
13
13
 
@@ -21,7 +21,7 @@ const buildDepTree = (packages, isProduction) => {
21
21
  name: name,
22
22
  version: currentObj.version,
23
23
  directDependency: true,
24
- isProduction: isProduction,
24
+ productionDependency: productionDependency,
25
25
  dependencies: []
26
26
  }
27
27
 
@@ -53,7 +53,7 @@ const buildSubDepsIntoFlatStructure = childDeps => {
53
53
  name: name,
54
54
  version: version,
55
55
  directDependency: false,
56
- isProduction: false,
56
+ productionDependency: false,
57
57
  dependencies: []
58
58
  }
59
59
  }
@@ -41,7 +41,7 @@ const scaPythonParser = pythonDependencies => {
41
41
  )
42
42
  pythonParsedDeps[key].group = null
43
43
  pythonParsedDeps[key].name = key
44
- pythonParsedDeps[key].isProduction = true
44
+ pythonParsedDeps[key].productionDependency = true
45
45
  pythonParsedDeps[key].dependencies = []
46
46
  pythonParsedDeps[key].directDependency = true
47
47
  }
@@ -0,0 +1,88 @@
1
+ const g2js = require('gradle-to-js/lib/parser')
2
+
3
+ const readBuildGradleFile = async project => {
4
+ const gradleFilePath = project.cwd + '/build.gradle'
5
+ return await g2js.parseFile(gradleFilePath)
6
+ }
7
+
8
+ const filterGav = (groupId, artifactId, version, gradleJson) => {
9
+ if (groupId === '') {
10
+ if (artifactId.includes(':')) {
11
+ groupId = artifactId.split(':')[0].replace("'", '')
12
+ }
13
+ }
14
+
15
+ if (version === '') {
16
+ if (artifactId.includes(':')) {
17
+ artifactId.split(':').length > 2
18
+ ? (version = artifactId.split(':')[2].replace("'", ''))
19
+ : (version = null)
20
+ }
21
+ }
22
+
23
+ if (artifactId.split(':').length > 1) {
24
+ artifactId = artifactId.split(':')[1].replace("'", '')
25
+ }
26
+
27
+ if (version === null) {
28
+ version = getVersion(gradleJson, groupId)
29
+ }
30
+ return { groupId, artifactId, version }
31
+ }
32
+
33
+ const parseGradleJson = gradleJson => {
34
+ let deps = gradleJson.dependencies
35
+ let dependencyTree = {}
36
+
37
+ if (deps === undefined) {
38
+ console.log('Unable to find any dependencies in your project file.')
39
+ process.exit(0)
40
+ }
41
+
42
+ for (let a in deps) {
43
+ let dependencyType = deps[a].type
44
+
45
+ if (dependencyType === 'implementation') {
46
+ let groupId = deps[a].group
47
+ let artifactId = deps[a].name
48
+ let version = deps[a].version
49
+
50
+ let filteredGav = filterGav(groupId, artifactId, version, gradleJson)
51
+
52
+ let depName =
53
+ filteredGav.groupId +
54
+ '/' +
55
+ filteredGav.artifactId +
56
+ '@' +
57
+ filteredGav.version
58
+
59
+ let parsedDependency = {
60
+ name: filteredGav.artifactId,
61
+ group: filteredGav.groupId,
62
+ version: filteredGav.version,
63
+ directDependency: true,
64
+ isProduction: true,
65
+ dependencies: []
66
+ }
67
+ dependencyTree[depName] = parsedDependency
68
+ }
69
+ }
70
+ return dependencyTree
71
+ }
72
+
73
+ const getVersion = (gradleJson, dependencyWithoutVersion) => {
74
+ let parentVersion = gradleJson.plugins[0].version
75
+ let parentGroupName = gradleJson.plugins[0].id
76
+ if (parentGroupName === dependencyWithoutVersion) {
77
+ return parentVersion
78
+ } else {
79
+ return null
80
+ }
81
+ }
82
+
83
+ module.exports = {
84
+ readBuildGradleFile,
85
+ parseGradleJson,
86
+ getVersion,
87
+ filterGav
88
+ }
@@ -0,0 +1,21 @@
1
+ const mavenParser = require('./mavenParser')
2
+ const gradleParser = require('./gradleParser')
3
+ const { determineProjectTypeAndCwd } = require('../java/analysis')
4
+
5
+ const buildRepo = async (config, languageFiles) => {
6
+ const project = determineProjectTypeAndCwd(languageFiles.JAVA, config)
7
+
8
+ if (project.projectType === 'maven') {
9
+ let jsonPomFile = mavenParser.readPomFile(project)
10
+ mavenParser.parsePomFile(jsonPomFile)
11
+ } else if (project.projectType === 'gradle') {
12
+ const gradleJson = gradleParser.readBuildGradleFile(project)
13
+ gradleParser.parseGradleJson(await gradleJson)
14
+ } else {
15
+ console.log('Unable to read project files.')
16
+ }
17
+ }
18
+
19
+ module.exports = {
20
+ buildRepo
21
+ }
@@ -0,0 +1,89 @@
1
+ const fs = require('fs')
2
+ const xml2js = require('xml2js')
3
+
4
+ const readPomFile = project => {
5
+ const mavenFilePath = project.cwd + '/pom.xml'
6
+ const projectFile = fs.readFileSync(mavenFilePath)
7
+ let jsonPomFile
8
+ xml2js.parseString(projectFile, (err, result) => {
9
+ if (err) {
10
+ throw err
11
+ }
12
+ const json = JSON.stringify(result, null)
13
+ jsonPomFile = JSON.parse(json)
14
+ })
15
+ return jsonPomFile
16
+ }
17
+
18
+ const getFromVersionsTag = (dependencyName, versionIdentifier, jsonPomFile) => {
19
+ // reading:
20
+ // <!-- DEPENDENCY VERSIONS -->
21
+ // <versions.animal-sniffer>1.16</versions.animal-sniffer>
22
+ let formattedVersion = versionIdentifier.replace(/[{}]/g, '').replace('$', '')
23
+
24
+ if (jsonPomFile.project.properties[0].hasOwnProperty([formattedVersion])) {
25
+ return jsonPomFile.project.properties[0][formattedVersion][0]
26
+ } else {
27
+ return null
28
+ }
29
+ }
30
+
31
+ const parsePomFile = jsonPomFile => {
32
+ let dependencyTree = {}
33
+ let parsedVersion
34
+ let dependencies
35
+ jsonPomFile.project.hasOwnProperty('dependencies')
36
+ ? (dependencies = jsonPomFile.project.dependencies[0].dependency)
37
+ : (dependencies =
38
+ jsonPomFile.project.dependencyManagement[0].dependencies[0].dependency)
39
+
40
+ for (let x in dependencies) {
41
+ let dependencyObject = dependencies[x]
42
+ if (!dependencyObject.hasOwnProperty('version')) {
43
+ parsedVersion = getVersion(jsonPomFile, dependencyObject)
44
+ } else {
45
+ dependencyObject.version[0].includes('${versions.')
46
+ ? (parsedVersion = getFromVersionsTag(
47
+ dependencyObject.artifactId[0],
48
+ dependencyObject.version[0],
49
+ jsonPomFile
50
+ ))
51
+ : (parsedVersion = dependencyObject.version[0])
52
+ }
53
+
54
+ let depName =
55
+ dependencyObject.groupId +
56
+ '/' +
57
+ dependencyObject.artifactId +
58
+ '@' +
59
+ parsedVersion
60
+
61
+ let parsedDependency = {
62
+ name: dependencyObject.artifactId[0],
63
+ group: dependencyObject.groupId[0],
64
+ version: parsedVersion,
65
+ directDependency: true,
66
+ productionDependency: true,
67
+ dependencies: []
68
+ }
69
+ dependencyTree[depName] = parsedDependency
70
+ }
71
+ return dependencyTree
72
+ }
73
+
74
+ const getVersion = (pomFile, dependencyWithoutVersion) => {
75
+ let parentVersion = pomFile.project.parent[0].version[0]
76
+ let parentGroupName = pomFile.project.parent[0].groupId[0]
77
+ if (parentGroupName === dependencyWithoutVersion.groupId[0]) {
78
+ return parentVersion
79
+ } else {
80
+ return null
81
+ }
82
+ }
83
+
84
+ module.exports = {
85
+ readPomFile,
86
+ getVersion,
87
+ parsePomFile,
88
+ getFromVersionsTag
89
+ }
@@ -341,12 +341,12 @@ const removeRedundantAndPopulateDefinedElements = deps => {
341
341
  delete element.platform
342
342
 
343
343
  element.group = null
344
- element.isProduction = true
344
+ element.productionDependency = true
345
345
  }
346
346
 
347
347
  if (element.sourceType === 'GEM') {
348
348
  element.group = null
349
- element.isProduction = true
349
+ element.productionDependency = true
350
350
 
351
351
  delete element.sourceType
352
352
  delete element.remote
@@ -355,7 +355,7 @@ const removeRedundantAndPopulateDefinedElements = deps => {
355
355
 
356
356
  if (element.sourceType === 'PATH') {
357
357
  element.group = null
358
- element.isProduction = true
358
+ element.productionDependency = true
359
359
 
360
360
  delete element.platform
361
361
  delete element.sourceType
@@ -364,7 +364,7 @@ const removeRedundantAndPopulateDefinedElements = deps => {
364
364
 
365
365
  if (element.sourceType === 'BUNDLED WITH') {
366
366
  element.group = null
367
- element.isProduction = true
367
+ element.productionDependency = true
368
368
 
369
369
  delete element.sourceType
370
370
  delete element.remote
package/src/scan/help.js CHANGED
@@ -1,6 +1,6 @@
1
1
  const commandLineUsage = require('command-line-usage')
2
2
  const i18n = require('i18n')
3
- const constants = require('../constants')
3
+ const constants = require('../cliConstants')
4
4
  const { commonHelpLinks } = require('../common/commonHelp')
5
5
 
6
6
  const scanUsageGuide = commandLineUsage([
@@ -1,5 +1,5 @@
1
1
  const paramHandler = require('../utils/paramsUtil/paramHandler')
2
- const constants = require('../constants.js')
2
+ const constants = require('../cliConstants.js')
3
3
  const path = require('path')
4
4
  const { supportedLanguagesScan } = require('../constants/constants')
5
5
  const i18n = require('i18n')