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.
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/PKG-INFO +1 -1
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/conviso_cli.egg-info/PKG-INFO +1 -1
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/conviso_cli.egg-info/SOURCES.txt +3 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/models/issues/sast.py +3 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/models/issues/sca.py +25 -7
- conviso-cli-2.2.13rc0/convisoappsec/flowcli/container/__init__.py +3 -0
- conviso-cli-2.2.13rc0/convisoappsec/flowcli/container/entrypoint.py +17 -0
- conviso-cli-2.2.13rc0/convisoappsec/flowcli/container/run.py +179 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/entrypoint.py +2 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/iac/run.py +6 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sast/run.py +5 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sca/run.py +1 -0
- conviso-cli-2.2.13rc0/convisoappsec/version.py +1 -0
- conviso-cli-2.2.12.dev0/convisoappsec/version.py +0 -1
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/README.md +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/conviso_cli.egg-info/dependency_links.txt +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/conviso_cli.egg-info/entry_points.txt +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/conviso_cli.egg-info/requires.txt +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/conviso_cli.egg-info/top_level.txt +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/box.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/docker.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/exceptions.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/git_data_parser.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/graphql/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/graphql/error_handlers.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/graphql/errors.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/graphql/low_client.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/retry_handler.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/strings.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/api.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/client.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/models/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/models/issues/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/models/issues/iac.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/models/issues/normalize.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/resources_api.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/schemas/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/schemas/mutations/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/schemas/resolvers/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/client.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/models/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/models/asset.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/models/issues.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/models/project.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/resources_api.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/schemas/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/schemas/mutations/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/schemas/resolvers/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/source_code_scanner/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/source_code_scanner/exceptions.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/source_code_scanner/scc.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/source_code_scanner/source_code_scanner.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/util/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/util/ci_provider.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/util/metrics.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/util/source_code_compressor.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/version_control_system_adapter.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/version_searchers/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/version_searchers/sorted_by_versioning_style.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/version_searchers/timebased_version_seacher.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/version_searchers/version_searcher_result.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/versioning_style/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/versioning_style/semantic_versioning.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/__main__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/assets/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/assets/create.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/assets/entrypoint.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/assets/ls.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/ast/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/ast/entrypoint.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/common.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/companies/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/companies/ls.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/context.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/context.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/entrypoint.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/entrypoint.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/context.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/entrypoint.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/entrypoint.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/time_.py +0 -0
- {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
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/with_/values.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/entrypoint.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/ls.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/show.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/create/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/create/entrypoint.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/create/with_/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/create/with_/entrypoint.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/create/with_/version_tracker.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/entrypoint.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/import_sarif/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/import_sarif/entrypoint.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/help_option.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/iac/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/iac/entrypoint.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/projects/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/projects/ls.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/requirements_verifier.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sast/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sast/entrypoint.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sbom/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sbom/entrypoint.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sbom/generate.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sca/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/sca/entrypoint.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/vulnerability/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/vulnerability/assert_security_rules.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/vulnerability/entrypoint.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/vulnerability/rules_schema.json +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/vulnerability/run.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/logger.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/sast/__init__.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/sast/decision.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/sast/sastbox.py +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/scripts/shell_completer/flow_bash_completer.sh +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/scripts/shell_completer/flow_fish_completer.fish +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/scripts/shell_completer/flow_zsh_completer.sh +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/setup.cfg +0 -0
- {conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/setup.py +0 -0
|
@@ -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
|
-
|
|
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,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'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/graphql/error_handlers.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/common/graphql/low_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/__init__.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/__init__.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/beta/client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/__init__.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/models/asset.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/models/issues.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/graphql_api/v1/resources_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/source_code_scanner/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/source_code_scanner/scc.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/util/source_code_compressor.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/version_searchers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flow/versioning_style/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/assets/entrypoint.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/companies/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/__init__.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/context.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/create/entrypoint.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/deploy/entrypoint.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/__init__.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/create/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/findings/entrypoint.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/projects/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/requirements_verifier.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/vulnerability/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/vulnerability/entrypoint.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/convisoappsec/flowcli/vulnerability/run.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/scripts/shell_completer/flow_bash_completer.sh
RENAMED
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/scripts/shell_completer/flow_fish_completer.fish
RENAMED
|
File without changes
|
{conviso-cli-2.2.12.dev0 → conviso-cli-2.2.13rc0}/scripts/shell_completer/flow_zsh_completer.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|