conviso-cli 2.2.12.dev0__tar.gz → 2.2.13rc0__tar.gz

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 (134) hide show
  1. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/PKG-INFO +1 -1
  2. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/conviso_cli.egg-info/PKG-INFO +1 -1
  3. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/conviso_cli.egg-info/SOURCES.txt +3 -0
  4. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/models/issues/sast.py +3 -0
  5. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/models/issues/sca.py +25 -7
  6. conviso-cli-2.2.13rc0/convisoappsec/flowcli/container/__init__.py +3 -0
  7. conviso-cli-2.2.13rc0/convisoappsec/flowcli/container/entrypoint.py +17 -0
  8. conviso-cli-2.2.13rc0/convisoappsec/flowcli/container/run.py +179 -0
  9. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/entrypoint.py +2 -0
  10. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/iac/run.py +6 -0
  11. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sast/run.py +5 -0
  12. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sca/run.py +1 -0
  13. conviso-cli-2.2.13rc0/convisoappsec/version.py +1 -0
  14. conviso-cli-2.2.12.dev0/convisoappsec/version.py +0 -1
  15. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/README.md +0 -0
  16. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/conviso_cli.egg-info/dependency_links.txt +0 -0
  17. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/conviso_cli.egg-info/entry_points.txt +0 -0
  18. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/conviso_cli.egg-info/requires.txt +0 -0
  19. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/conviso_cli.egg-info/top_level.txt +0 -0
  20. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/__init__.py +0 -0
  21. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/__init__.py +0 -0
  22. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/box.py +0 -0
  23. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/docker.py +0 -0
  24. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/exceptions.py +0 -0
  25. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/git_data_parser.py +0 -0
  26. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/graphql/__init__.py +0 -0
  27. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/graphql/error_handlers.py +0 -0
  28. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/graphql/errors.py +0 -0
  29. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/graphql/low_client.py +0 -0
  30. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/retry_handler.py +0 -0
  31. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/strings.py +0 -0
  32. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/__init__.py +0 -0
  33. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/api.py +0 -0
  34. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/__init__.py +0 -0
  35. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/__init__.py +0 -0
  36. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/client.py +0 -0
  37. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/models/__init__.py +0 -0
  38. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/models/issues/__init__.py +0 -0
  39. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/models/issues/iac.py +0 -0
  40. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/models/issues/normalize.py +0 -0
  41. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/resources_api.py +0 -0
  42. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/schemas/__init__.py +0 -0
  43. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/schemas/mutations/__init__.py +0 -0
  44. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/schemas/resolvers/__init__.py +0 -0
  45. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/__init__.py +0 -0
  46. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/client.py +0 -0
  47. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/models/__init__.py +0 -0
  48. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/models/asset.py +0 -0
  49. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/models/issues.py +0 -0
  50. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/models/project.py +0 -0
  51. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/resources_api.py +0 -0
  52. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/schemas/__init__.py +0 -0
  53. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/schemas/mutations/__init__.py +0 -0
  54. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/schemas/resolvers/__init__.py +0 -0
  55. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/source_code_scanner/__init__.py +0 -0
  56. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/source_code_scanner/exceptions.py +0 -0
  57. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/source_code_scanner/scc.py +0 -0
  58. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/source_code_scanner/source_code_scanner.py +0 -0
  59. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/util/__init__.py +0 -0
  60. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/util/ci_provider.py +0 -0
  61. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/util/metrics.py +0 -0
  62. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/util/source_code_compressor.py +0 -0
  63. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/version_control_system_adapter.py +0 -0
  64. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/version_searchers/__init__.py +0 -0
  65. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/version_searchers/sorted_by_versioning_style.py +0 -0
  66. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/version_searchers/timebased_version_seacher.py +0 -0
  67. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/version_searchers/version_searcher_result.py +0 -0
  68. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/versioning_style/__init__.py +0 -0
  69. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/versioning_style/semantic_versioning.py +0 -0
  70. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/__init__.py +0 -0
  71. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/__main__.py +0 -0
  72. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/assets/__init__.py +0 -0
  73. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/assets/create.py +0 -0
  74. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/assets/entrypoint.py +0 -0
  75. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/assets/ls.py +0 -0
  76. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/ast/__init__.py +0 -0
  77. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/ast/entrypoint.py +0 -0
  78. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/common.py +0 -0
  79. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/companies/__init__.py +0 -0
  80. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/companies/ls.py +0 -0
  81. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/context.py +0 -0
  82. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/__init__.py +0 -0
  83. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/__init__.py +0 -0
  84. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/context.py +0 -0
  85. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/entrypoint.py +0 -0
  86. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/__init__.py +0 -0
  87. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/entrypoint.py +0 -0
  88. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/__init__.py +0 -0
  89. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/context.py +0 -0
  90. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/entrypoint.py +0 -0
  91. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/__init__.py +0 -0
  92. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/entrypoint.py +0 -0
  93. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/time_.py +0 -0
  94. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/versioning_style.py +0 -0
  95. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/values.py +0 -0
  96. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/entrypoint.py +0 -0
  97. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/ls.py +0 -0
  98. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/show.py +0 -0
  99. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/__init__.py +0 -0
  100. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/create/__init__.py +0 -0
  101. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/create/entrypoint.py +0 -0
  102. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/create/with_/__init__.py +0 -0
  103. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/create/with_/entrypoint.py +0 -0
  104. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/create/with_/version_tracker.py +0 -0
  105. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/entrypoint.py +0 -0
  106. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/import_sarif/__init__.py +0 -0
  107. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/import_sarif/entrypoint.py +0 -0
  108. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/help_option.py +0 -0
  109. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/iac/__init__.py +0 -0
  110. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/iac/entrypoint.py +0 -0
  111. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/projects/__init__.py +0 -0
  112. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/projects/ls.py +0 -0
  113. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/requirements_verifier.py +0 -0
  114. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sast/__init__.py +0 -0
  115. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sast/entrypoint.py +0 -0
  116. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sbom/__init__.py +0 -0
  117. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sbom/entrypoint.py +0 -0
  118. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sbom/generate.py +0 -0
  119. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sca/__init__.py +0 -0
  120. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sca/entrypoint.py +0 -0
  121. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/vulnerability/__init__.py +0 -0
  122. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/vulnerability/assert_security_rules.py +0 -0
  123. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/vulnerability/entrypoint.py +0 -0
  124. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/vulnerability/rules_schema.json +0 -0
  125. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/vulnerability/run.py +0 -0
  126. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/logger.py +0 -0
  127. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/sast/__init__.py +0 -0
  128. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/sast/decision.py +0 -0
  129. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/sast/sastbox.py +0 -0
  130. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/scripts/shell_completer/flow_bash_completer.sh +0 -0
  131. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/scripts/shell_completer/flow_fish_completer.fish +0 -0
  132. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/scripts/shell_completer/flow_zsh_completer.sh +0 -0
  133. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/setup.cfg +0 -0
  134. {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: conviso-cli
3
- Version: 2.2.12.dev0
3
+ Version: 2.2.13rc0
4
4
  Summary: UNKNOWN
5
5
  Maintainer: Conviso
6
6
  Maintainer-email: development@convisoappsec.com
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: conviso-cli
3
- Version: 2.2.12.dev0
3
+ Version: 2.2.13rc0
4
4
  Summary: UNKNOWN
5
5
  Maintainer: Conviso
6
6
  Maintainer-email: development@convisoappsec.com
@@ -75,6 +75,9 @@ convisoappsec/flowcli/ast/__init__.py
75
75
  convisoappsec/flowcli/ast/entrypoint.py
76
76
  convisoappsec/flowcli/companies/__init__.py
77
77
  convisoappsec/flowcli/companies/ls.py
78
+ convisoappsec/flowcli/container/__init__.py
79
+ convisoappsec/flowcli/container/entrypoint.py
80
+ convisoappsec/flowcli/container/run.py
78
81
  convisoappsec/flowcli/deploy/__init__.py
79
82
  convisoappsec/flowcli/deploy/entrypoint.py
80
83
  convisoappsec/flowcli/deploy/ls.py
@@ -14,6 +14,7 @@ class CreateSastFindingInput:
14
14
  commit_ref,
15
15
  deploy_id,
16
16
  reference,
17
+ category,
17
18
  original_issue_id_from_tool,
18
19
  ):
19
20
  self.asset_id = asset_id
@@ -25,6 +26,7 @@ class CreateSastFindingInput:
25
26
  self.vulnerable_line = int(vulnerable_line)
26
27
  self.first_line = int(first_line)
27
28
  self.reference = reference
29
+ self.category = category
28
30
  self.original_issue_id_from_tool = original_issue_id_from_tool
29
31
 
30
32
  self.commit_ref = commit_ref
@@ -47,5 +49,6 @@ class CreateSastFindingInput:
47
49
  "reference": self.reference,
48
50
  "commitRef": self.commit_ref,
49
51
  "deployId": str(self.deploy_id),
52
+ "category": str(self.category),
50
53
  "originalIssueIdFromTool": str(self.original_issue_id_from_tool)
51
54
  }
@@ -15,6 +15,7 @@ class CreateScaFindingInput:
15
15
  package,
16
16
  cve,
17
17
  patched_version,
18
+ category,
18
19
  original_issue_id_from_tool
19
20
  ):
20
21
  self.asset_id = asset_id
@@ -28,13 +29,8 @@ class CreateScaFindingInput:
28
29
  self.package = package
29
30
  self.patched_version = patched_version
30
31
  self.original_issue_id_from_tool = original_issue_id_from_tool
31
-
32
- if type(cve) is list:
33
- self.cve = ' , '.join(cve)
34
- elif type(cve) is str:
35
- self.cve = cve
36
- else:
37
- self.cve = ""
32
+ self.category = self.process_field(category)
33
+ self.cve = self.process_field(cve)
38
34
 
39
35
  def to_graphql_dict(self):
40
36
  """
@@ -53,5 +49,27 @@ class CreateScaFindingInput:
53
49
  "package": self.package,
54
50
  "cve": self.cve,
55
51
  "patchedVersion": self.patched_version,
52
+ "category": self.category,
56
53
  "originalIssueIdFromTool": self.original_issue_id_from_tool
57
54
  }
55
+
56
+ @staticmethod
57
+ def process_field(value):
58
+ """
59
+ Processes a field to ensure it is converted into a string.
60
+
61
+ - If the value is a list, it joins the items into a comma-separated string.
62
+ - If the value is a string, it returns the string as is.
63
+ - If the value is neither a list nor a string, it returns an empty string.
64
+
65
+ Args:
66
+ value (list | str | Any): The value to process.
67
+
68
+ Returns:
69
+ str: The processed string representation of the value.
70
+ """
71
+ if isinstance(value, list):
72
+ return ' , '.join(value)
73
+ elif isinstance(value, str):
74
+ return value
75
+ return ''
@@ -0,0 +1,3 @@
1
+ from .entrypoint import container
2
+
3
+ __all__ = ['container']
@@ -0,0 +1,17 @@
1
+ import click
2
+
3
+ from convisoappsec.flowcli import help_option
4
+ from .run import run
5
+
6
+
7
+ @click.group()
8
+ @help_option
9
+ def container():
10
+ pass
11
+
12
+
13
+ container.add_command(run)
14
+
15
+ container.epilog = '''
16
+ Run conviso container COMMAND --help for more information on a command.
17
+ '''
@@ -0,0 +1,179 @@
1
+ import traceback
2
+
3
+ import click
4
+ import json
5
+ import subprocess
6
+ from convisoappsec.flowcli import help_option
7
+ from convisoappsec.flowcli.context import pass_flow_context
8
+ from convisoappsec.flowcli.common import asset_id_option
9
+ from convisoappsec.flow.graphql_api.beta.models.issues.sca import CreateScaFindingInput
10
+ from convisoappsec.common.graphql.errors import ResponseError
11
+ from convisoappsec.common.retry_handler import RetryHandler
12
+ from convisoappsec.logger import LOGGER, log_and_notify_ast_event
13
+ from convisoappsec.flowcli.requirements_verifier import RequirementsVerifier
14
+ from copy import deepcopy as clone
15
+ from convisoappsec.flowcli.common import (
16
+ asset_id_option,
17
+ on_http_error,
18
+ project_code_option,
19
+ )
20
+
21
+
22
+ @click.command()
23
+ @project_code_option(
24
+ help="Not required when --no-send-to-flow option is set",
25
+ required=False
26
+ )
27
+ @asset_id_option(required=False)
28
+ @click.option(
29
+ '-r',
30
+ '--repository-dir',
31
+ default=".",
32
+ show_default=True,
33
+ type=click.Path(
34
+ exists=True,
35
+ resolve_path=True,
36
+ ),
37
+ required=False,
38
+ help="The source code repository directory.",
39
+ )
40
+ @click.option(
41
+ "--send-to-flow/--no-send-to-flow",
42
+ default=True,
43
+ show_default=True,
44
+ required=False,
45
+ hidden=True,
46
+ help="""Enable or disable the ability of send analysis result
47
+ reports to flow. When --send-to-flow option is set the --project-code
48
+ option is required""",
49
+ )
50
+ @click.option(
51
+ "--company-id",
52
+ required=False,
53
+ envvar=("CONVISO_COMPANY_ID", "FLOW_COMPANY_ID"),
54
+ help="Company ID on Conviso Platform",
55
+ )
56
+ @click.option(
57
+ '--asset-name',
58
+ required=False,
59
+ envvar=("CONVISO_ASSET_NAME", "FLOW_ASSET_NAME"),
60
+ help="Provides a asset name.",
61
+ )
62
+ @click.option(
63
+ '--vulnerability-auto-close',
64
+ default=False,
65
+ is_flag=True,
66
+ hidden=True,
67
+ help="Enable auto fixing vulnerabilities on cp.",
68
+ )
69
+ @click.argument('image_name')
70
+ @help_option
71
+ @pass_flow_context
72
+ @click.pass_context
73
+ def run(
74
+ context, flow_context, project_code, asset_id, company_id, repository_dir, send_to_flow, asset_name, vulnerability_auto_close, image_name,
75
+
76
+ ):
77
+ """ Run command for container vulnerability scan focused on OS vulnerabilities """
78
+ context.params['company_id'] = company_id if company_id is not None else None
79
+ prepared_context = RequirementsVerifier.prepare_context(clone(context))
80
+
81
+ params_to_copy = [
82
+ 'asset_id', 'send_to_flow', 'asset_name', 'vulnerability_auto_close', 'project_code', 'repository_dir'
83
+ ]
84
+
85
+ for param_name in params_to_copy:
86
+ context.params[param_name] = (
87
+ locals()[param_name] or prepared_context.params[param_name]
88
+ )
89
+
90
+ log_func("💬 Preparing to initiate container scanning...")
91
+
92
+ scan_command = f"trivy image --pkg-types os --format json --output result.json {image_name}"
93
+
94
+ asset_id = context.params['asset_id']
95
+ company_id = context.params['company_id']
96
+
97
+ try:
98
+ log_func(f"🔧 Scanning image {image_name} ...")
99
+ run_command(scan_command)
100
+ log_func("✅ Scan completed successfully.")
101
+ conviso_api = flow_context.create_conviso_api_client_beta()
102
+ process_result(conviso_api, flow_context, asset_id, company_id)
103
+ except Exception as error:
104
+ log_func(f"❌ Scan failed: {error}")
105
+
106
+
107
+ def run_command(command):
108
+ """
109
+ Runs a shell command and logs its execution.
110
+ """
111
+ result = subprocess.run(command, shell=True, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
112
+
113
+ return result
114
+
115
+ def process_result(conviso_api, flow_context, asset_id, company_id):
116
+ """
117
+ Process and send result to conviso platform.
118
+ """
119
+ log_func("🔧 Processing results ...")
120
+ result_file = "result.json"
121
+
122
+ try:
123
+ with open(result_file, 'r') as file:
124
+ scan_results = json.load(file)
125
+
126
+ log_func("✅ Results parsed successfully.")
127
+
128
+ results = scan_results.get("Results", [])
129
+ if results and isinstance(results, list) and len(results) > 0:
130
+ vulnerabilities = results[0].get("Vulnerabilities", [])
131
+ else:
132
+ vulnerabilities = []
133
+
134
+ if vulnerabilities:
135
+ log_func(f"🔍 Found {len(vulnerabilities)} vulnerabilities.")
136
+
137
+ for vulnerability in vulnerabilities:
138
+ issue_model = CreateScaFindingInput(
139
+ asset_id=asset_id,
140
+ title=vulnerability.get("Title", ""),
141
+ description=vulnerability.get("Description", ""),
142
+ severity=vulnerability.get("Severity", ""),
143
+ solution="Use latest image version",
144
+ reference=parse_conviso_references(vulnerability.get("References", [])),
145
+ file_name=vulnerability.get("SeveritySource", ""),
146
+ affected_version=vulnerability.get("InstalledVersion", ""),
147
+ package=vulnerability.get("PkgName", ""),
148
+ cve=vulnerability.get("VulnerabilityID", ""),
149
+ patched_version=None,
150
+ original_issue_id_from_tool=vulnerability.get("PkgIdentifier", "").get("UID", "")
151
+ )
152
+
153
+ try:
154
+ conviso_api.issues.create_sca(issue_model)
155
+ except ResponseError as error:
156
+ if error.code == 'RECORD_NOT_UNIQUE':
157
+ continue
158
+
159
+ continue
160
+ else:
161
+ log_func("✅ No vulnerabilities found.")
162
+
163
+ except FileNotFoundError:
164
+ log_func(f"❌ {result_file} not found. Ensure the scan was successful.")
165
+ except json.JSONDecodeError:
166
+ log_func(f"❌ Failed to parse {result_file}. Ensure it is valid JSON.")
167
+ except Exception as error:
168
+ full_trace = traceback.format_exc()
169
+ log_func(f"❌ An error occurred while processing results: {full_trace}")
170
+
171
+
172
+ def parse_conviso_references(references):
173
+ DIVIDER = "\n"
174
+
175
+ return DIVIDER.join(references)
176
+
177
+
178
+ def log_func(msg, new_line=True):
179
+ click.echo(click.style(msg), nl=new_line, err=True)
@@ -19,6 +19,7 @@ from .sca import sca
19
19
  from .vulnerability import vulnerability
20
20
  from .assets import assets
21
21
  from .sbom import sbom
22
+ from .container import container
22
23
 
23
24
  click_log.basic_config(LOGGER)
24
25
 
@@ -107,6 +108,7 @@ cli.add_command(ast)
107
108
  cli.add_command(iac)
108
109
  cli.add_command(assets)
109
110
  cli.add_command(sbom)
111
+ cli.add_command(container)
110
112
 
111
113
  cli.epilog = '''
112
114
  Run conviso COMMAND --help for more information on a command.
@@ -189,6 +189,7 @@ def deploy_results_to_conviso_beta(
189
189
  reference=parse_conviso_references(issue.get("reference", "")),
190
190
  first_line=parse_first_line_number(issue.get("code_snippet")),
191
191
  commit_ref=commit_ref,
192
+ category=issue.get("cwe"),
192
193
  original_issue_id_from_tool=hash_issue,
193
194
  )
194
195
 
@@ -340,6 +341,10 @@ def parse_sarif_data(sarif_result):
340
341
  snippet = region_info.get('snippet', {}).get('text', '')
341
342
  context_region = physical_location.get('contextRegion', {})
342
343
  context_snippet = context_region.get('snippet', {}).get('text', '')
344
+ cwe = result.get('properties', {}).get('cweId', '')
345
+
346
+ if cwe != '':
347
+ cwe = f'CWE-{cwe}'
343
348
 
344
349
  # Map severity levels
345
350
  severity_map = {
@@ -362,6 +367,7 @@ def parse_sarif_data(sarif_result):
362
367
  'hash_issue_v1': result.get('partialFingerprints', {}).get('hashIssueV1', ''),
363
368
  'hash_issue_v2': result.get('partialFingerprints', {}).get('hashIssueV2', ''),
364
369
  'context_snippet': context_snippet,
370
+ 'cwe': cwe,
365
371
  }
366
372
 
367
373
  parsed_issues.append(issue)
@@ -226,6 +226,10 @@ def deploy_results_to_conviso_beta(
226
226
 
227
227
  for issue in issues:
228
228
  total_issues += 1
229
+ issue_cwe = issue.get('cwe_id', '')
230
+
231
+ if issue_cwe != '':
232
+ issue_cwe = f'CWE-{issue_cwe}'
229
233
 
230
234
  issue_model = CreateSastFindingInput(
231
235
  asset_id=asset_id,
@@ -239,6 +243,7 @@ def deploy_results_to_conviso_beta(
239
243
  code_snippet=parse_code_snippet(issue.get("evidence")),
240
244
  reference=parse_conviso_references(issue.get("references")),
241
245
  first_line=parse_first_line_number(issue.get("evidence")),
246
+ category=issue_cwe,
242
247
  original_issue_id_from_tool=issue.get("hash_issue") or issue.get("hash_issue_v2"),
243
248
  )
244
249
 
@@ -238,6 +238,7 @@ def deploy_results_to_conviso_beta(flow_context, conviso_api, results_filepaths,
238
238
  package=issue.get("component", "Unknown"),
239
239
  cve=cves,
240
240
  patched_version=patched_version,
241
+ category=issue.get('cwe', ''),
241
242
  original_issue_id_from_tool=hash_issue
242
243
  )
243
244
 
@@ -0,0 +1 @@
1
+ __version__ = '2.2.13-rc.0'
@@ -1 +0,0 @@
1
- __version__ = '2.2.12-dev.0'