conviso-cli 2.3.0.dev3__tar.gz → 2.3.0.dev5__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.3.0.dev3 → conviso-cli-2.3.0.dev5}/PKG-INFO +2 -2
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/conviso_cli.egg-info/PKG-INFO +2 -2
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/conviso_cli.egg-info/SOURCES.txt +1 -0
- conviso-cli-2.3.0.dev5/conviso_cli.egg-info/requires.txt +13 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/resources_api.py +83 -71
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/schemas/mutations/__init__.py +24 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/ast/entrypoint.py +4 -4
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/container/run.py +2 -2
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/entrypoint.py +0 -10
- conviso-cli-2.3.0.dev5/convisoappsec/flowcli/environment_checker.py +45 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/iac/run.py +1 -3
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/requirements_verifier.py +2 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sast/run.py +31 -148
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sbom/generate.py +4 -9
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sca/run.py +3 -20
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/vulnerability/run.py +4 -10
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/sast/sastbox.py +1 -1
- conviso-cli-2.3.0.dev5/convisoappsec/version.py +1 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/setup.py +13 -13
- conviso-cli-2.3.0.dev3/conviso_cli.egg-info/requires.txt +0 -13
- conviso-cli-2.3.0.dev3/convisoappsec/version.py +0 -1
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/README.md +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/conviso_cli.egg-info/dependency_links.txt +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/conviso_cli.egg-info/entry_points.txt +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/conviso_cli.egg-info/top_level.txt +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/box.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/docker.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/exceptions.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/git_data_parser.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/graphql/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/graphql/error_handlers.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/graphql/errors.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/graphql/low_client.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/retry_handler.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/strings.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/api.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/client.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/models/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/models/issues/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/models/issues/container.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/models/issues/iac.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/models/issues/normalize.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/models/issues/sast.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/models/issues/sca.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/resources_api.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/schemas/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/schemas/mutations/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/schemas/resolvers/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/client.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/models/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/models/asset.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/models/issues.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/models/project.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/schemas/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/schemas/resolvers/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/source_code_scanner/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/source_code_scanner/exceptions.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/source_code_scanner/scc.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/source_code_scanner/source_code_scanner.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/util/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/util/ci_provider.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/util/metrics.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/util/source_code_compressor.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/version_control_system_adapter.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/version_searchers/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/version_searchers/sorted_by_versioning_style.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/version_searchers/timebased_version_seacher.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/version_searchers/version_searcher_result.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/versioning_style/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/versioning_style/semantic_versioning.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/__main__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/assets/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/assets/create.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/assets/entrypoint.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/assets/ls.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/ast/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/common.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/companies/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/companies/ls.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/container/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/container/entrypoint.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/context.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/context.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/entrypoint.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/entrypoint.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/context.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/entrypoint.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/entrypoint.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/time_.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/versioning_style.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/values.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/entrypoint.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/ls.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/show.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/create/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/create/entrypoint.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/create/with_/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/create/with_/entrypoint.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/create/with_/version_tracker.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/entrypoint.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/import_sarif/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/import_sarif/entrypoint.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/help_option.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/iac/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/iac/entrypoint.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/projects/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/projects/ls.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sast/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sast/entrypoint.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sbom/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sbom/entrypoint.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sca/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sca/entrypoint.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/vulnerability/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/vulnerability/assert_security_rules.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/vulnerability/entrypoint.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/vulnerability/rules_schema.json +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/logger.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/sast/__init__.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/sast/decision.py +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/scripts/shell_completer/flow_bash_completer.sh +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/scripts/shell_completer/flow_fish_completer.fish +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/scripts/shell_completer/flow_zsh_completer.sh +0 -0
- {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/setup.cfg +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: conviso-cli
|
|
3
|
-
Version: 2.3.0.
|
|
3
|
+
Version: 2.3.0.dev5
|
|
4
4
|
Summary: UNKNOWN
|
|
5
5
|
Maintainer: Conviso
|
|
6
6
|
Maintainer-email: development@convisoappsec.com
|
|
7
7
|
License: UNKNOWN
|
|
8
8
|
Project-URL: Source, https://github.com/convisoappsec/convisocli/
|
|
9
9
|
Platform: UNKNOWN
|
|
10
|
-
Requires-Python: >=3.
|
|
10
|
+
Requires-Python: >=3.9
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
12
|
|
|
13
13
|
# CLI
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: conviso-cli
|
|
3
|
-
Version: 2.3.0.
|
|
3
|
+
Version: 2.3.0.dev5
|
|
4
4
|
Summary: UNKNOWN
|
|
5
5
|
Maintainer: Conviso
|
|
6
6
|
Maintainer-email: development@convisoappsec.com
|
|
7
7
|
License: UNKNOWN
|
|
8
8
|
Project-URL: Source, https://github.com/convisoappsec/convisocli/
|
|
9
9
|
Platform: UNKNOWN
|
|
10
|
-
Requires-Python: >=3.
|
|
10
|
+
Requires-Python: >=3.9
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
12
|
|
|
13
13
|
# CLI
|
|
@@ -66,6 +66,7 @@ convisoappsec/flowcli/__main__.py
|
|
|
66
66
|
convisoappsec/flowcli/common.py
|
|
67
67
|
convisoappsec/flowcli/context.py
|
|
68
68
|
convisoappsec/flowcli/entrypoint.py
|
|
69
|
+
convisoappsec/flowcli/environment_checker.py
|
|
69
70
|
convisoappsec/flowcli/help_option.py
|
|
70
71
|
convisoappsec/flowcli/requirements_verifier.py
|
|
71
72
|
convisoappsec/flowcli/assets/__init__.py
|
{conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/resources_api.py
RENAMED
|
@@ -240,6 +240,64 @@ class IssuesApi(object):
|
|
|
240
240
|
|
|
241
241
|
return issues_stats
|
|
242
242
|
|
|
243
|
+
def send_issues_file(self, company_id, asset_id, file_path, api_key, vulnerability_type='SAST_FINDING',
|
|
244
|
+
deploy_id=None, commit_ref=None):
|
|
245
|
+
"""Send issues file to Conviso platform"""
|
|
246
|
+
|
|
247
|
+
url = self.__conviso_graphql_client.url
|
|
248
|
+
|
|
249
|
+
if not isinstance(vulnerability_type, list):
|
|
250
|
+
vulnerability_type = [vulnerability_type]
|
|
251
|
+
|
|
252
|
+
vulnerability_type = [v.upper() for v in vulnerability_type]
|
|
253
|
+
|
|
254
|
+
variables = {
|
|
255
|
+
"companyId": company_id,
|
|
256
|
+
"assetId": asset_id,
|
|
257
|
+
"vulnerabilityTypes": vulnerability_type,
|
|
258
|
+
"deployId": deploy_id,
|
|
259
|
+
"commitRef": commit_ref,
|
|
260
|
+
"file": None
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
operations = {
|
|
264
|
+
"query": mutations.IMPORT_FINDINGS,
|
|
265
|
+
"variables": variables
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
file_map = {"0": ["variables.file"]}
|
|
269
|
+
|
|
270
|
+
headers = {
|
|
271
|
+
'x-api-key': api_key,
|
|
272
|
+
"User-Agent": f"AST:{__version__}"
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
try:
|
|
276
|
+
with open(file_path, 'rb') as file:
|
|
277
|
+
files = {
|
|
278
|
+
'operations': (None, json.dumps(operations), 'application/json'),
|
|
279
|
+
'map': (None, json.dumps(file_map), 'application/json'),
|
|
280
|
+
'0': (file_path, file, 'application/octet-stream')
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
response = requests.post(url, files=files, headers=headers)
|
|
284
|
+
response.raise_for_status()
|
|
285
|
+
json_response = response.json()
|
|
286
|
+
|
|
287
|
+
self._handle_graphql_errors(json_response)
|
|
288
|
+
return json_response.get('data')
|
|
289
|
+
|
|
290
|
+
except requests.RequestException as e:
|
|
291
|
+
raise Exception(f"GraphQL request failed: {e}")
|
|
292
|
+
|
|
293
|
+
@staticmethod
|
|
294
|
+
def _handle_graphql_errors(json_response):
|
|
295
|
+
"""Handle GraphQL errors"""
|
|
296
|
+
errors = json_response.get('errors')
|
|
297
|
+
if errors:
|
|
298
|
+
error_messages = [error.get('message', 'Unknown error') for error in errors]
|
|
299
|
+
raise Exception(f"GraphQL request failed with errors: {', '.join(error_messages)}")
|
|
300
|
+
|
|
243
301
|
|
|
244
302
|
class DeploysApi(object):
|
|
245
303
|
""" Class for deploys resources """
|
|
@@ -320,19 +378,18 @@ class DeploysApi(object):
|
|
|
320
378
|
raise Exception("GraphQL request failed with errors.")
|
|
321
379
|
|
|
322
380
|
|
|
323
|
-
class
|
|
324
|
-
"""
|
|
381
|
+
class BaseApi:
|
|
382
|
+
""" Base class for handling file uploads to Conviso platform """
|
|
325
383
|
|
|
326
384
|
def __init__(self, conviso_graphql_client):
|
|
327
385
|
self._conviso_graphql_client = conviso_graphql_client
|
|
328
386
|
|
|
329
|
-
def
|
|
330
|
-
"""
|
|
331
|
-
|
|
387
|
+
def send_file(self, company_id, asset_id, file_path, api_key, mutation):
|
|
388
|
+
""" Generic method for sending a file """
|
|
332
389
|
url = self._conviso_graphql_client.url
|
|
333
390
|
|
|
334
391
|
operations = {
|
|
335
|
-
"query":
|
|
392
|
+
"query": mutation,
|
|
336
393
|
"variables": {
|
|
337
394
|
"companyId": company_id,
|
|
338
395
|
"assetId": asset_id,
|
|
@@ -340,41 +397,50 @@ class SbomApi(object):
|
|
|
340
397
|
}
|
|
341
398
|
}
|
|
342
399
|
|
|
343
|
-
file_map = {
|
|
344
|
-
"0": ["variables.file"]
|
|
345
|
-
}
|
|
400
|
+
file_map = {"0": ["variables.file"]}
|
|
346
401
|
|
|
347
|
-
with open(file_path, 'rb') as
|
|
402
|
+
with open(file_path, 'rb') as file:
|
|
348
403
|
files = {
|
|
349
404
|
'operations': (None, json.dumps(operations), 'application/json'),
|
|
350
405
|
'map': (None, json.dumps(file_map), 'application/json'),
|
|
351
|
-
'0': (file_path,
|
|
406
|
+
'0': (file_path, file, 'application/octet-stream')
|
|
352
407
|
}
|
|
353
408
|
|
|
354
409
|
headers = {
|
|
355
|
-
'x-api-key':
|
|
356
|
-
"User-Agent": "AST:{
|
|
410
|
+
'x-api-key': api_key,
|
|
411
|
+
"User-Agent": f"AST:{__version__}"
|
|
357
412
|
}
|
|
358
413
|
|
|
359
414
|
response = requests.post(url, files=files, headers=headers)
|
|
360
|
-
|
|
361
415
|
response.raise_for_status()
|
|
362
416
|
json_response = response.json()
|
|
363
417
|
|
|
364
418
|
self._handle_graphql_errors(json_response)
|
|
365
|
-
|
|
366
419
|
return json_response.get('data')
|
|
367
420
|
|
|
368
421
|
@staticmethod
|
|
369
422
|
def _handle_graphql_errors(json_response):
|
|
370
423
|
""" Handle GraphQL errors """
|
|
371
424
|
if 'errors' in json_response:
|
|
372
|
-
|
|
373
|
-
for error in errors:
|
|
425
|
+
for error in json_response['errors']:
|
|
374
426
|
print(f"GraphQL Error: {error.get('message')}")
|
|
375
427
|
raise Exception("GraphQL request failed with errors.")
|
|
376
428
|
|
|
377
429
|
|
|
430
|
+
class SbomApi(BaseApi):
|
|
431
|
+
""" Class for SBOM file resources """
|
|
432
|
+
|
|
433
|
+
def send_sbom_file(self, company_id, asset_id, file_path, api_key):
|
|
434
|
+
return self.send_file(company_id, asset_id, file_path, api_key, mutations.IMPORT_SBOM)
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
class ContainerApi(BaseApi):
|
|
438
|
+
""" Class for container finding file resources """
|
|
439
|
+
|
|
440
|
+
def send_container_file(self, company_id, asset_id, file_path, api_key):
|
|
441
|
+
return self.send_file(company_id, asset_id, file_path, api_key, mutations.IMPORT_CONTAINER)
|
|
442
|
+
|
|
443
|
+
|
|
378
444
|
class LogAstError(object):
|
|
379
445
|
""" Class to send AST errors to Conviso Platform """
|
|
380
446
|
def __init__(self, conviso_graphql_client):
|
|
@@ -402,57 +468,3 @@ class LogAstError(object):
|
|
|
402
468
|
)
|
|
403
469
|
|
|
404
470
|
return success
|
|
405
|
-
|
|
406
|
-
class ContainerApi(object):
|
|
407
|
-
""" Class for container finding file resources """
|
|
408
|
-
|
|
409
|
-
def __init__(self, conviso_graphql_client):
|
|
410
|
-
self._conviso_graphql_client = conviso_graphql_client
|
|
411
|
-
|
|
412
|
-
def send_container_file(self, company_id, asset_id, file_path, api_key):
|
|
413
|
-
""" Send Container file to Conviso platform """
|
|
414
|
-
|
|
415
|
-
url = self._conviso_graphql_client.url
|
|
416
|
-
|
|
417
|
-
operations = {
|
|
418
|
-
"query": mutations.IMPORT_CONTAINER,
|
|
419
|
-
"variables": {
|
|
420
|
-
"companyId": company_id,
|
|
421
|
-
"assetId": asset_id,
|
|
422
|
-
"file": None
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
file_map = {
|
|
427
|
-
"0": ["variables.file"]
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
with open(file_path, 'rb') as container_file:
|
|
431
|
-
files = {
|
|
432
|
-
'operations': (None, json.dumps(operations), 'application/json'),
|
|
433
|
-
'map': (None, json.dumps(file_map), 'application/json'),
|
|
434
|
-
'0': (file_path, container_file, 'application/octet-stream')
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
headers = {
|
|
438
|
-
'x-api-key': f'{api_key}',
|
|
439
|
-
"User-Agent": "AST:{version}".format(version=__version__)
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
response = requests.post(url, files=files, headers=headers)
|
|
443
|
-
|
|
444
|
-
response.raise_for_status()
|
|
445
|
-
json_response = response.json()
|
|
446
|
-
|
|
447
|
-
self._handle_graphql_errors(json_response)
|
|
448
|
-
|
|
449
|
-
return json_response.get('data')
|
|
450
|
-
|
|
451
|
-
@staticmethod
|
|
452
|
-
def _handle_graphql_errors(json_response):
|
|
453
|
-
""" Handle GraphQL errors """
|
|
454
|
-
if 'errors' in json_response:
|
|
455
|
-
errors = json_response['errors']
|
|
456
|
-
for error in errors:
|
|
457
|
-
print(f"GraphQL Error: {error.get('message')}")
|
|
458
|
-
raise Exception("GraphQL request failed with errors.")
|
|
@@ -171,3 +171,27 @@ mutation (
|
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
"""
|
|
174
|
+
|
|
175
|
+
IMPORT_FINDINGS = """
|
|
176
|
+
mutation (
|
|
177
|
+
$file: Upload!,
|
|
178
|
+
$assetId: ID!,
|
|
179
|
+
$companyId: ID!
|
|
180
|
+
$vulnerabilityTypes: [Issue!]!
|
|
181
|
+
$deployId: ID
|
|
182
|
+
$commitRef: String
|
|
183
|
+
) {
|
|
184
|
+
importAstFindingsFile(
|
|
185
|
+
input: {
|
|
186
|
+
file: $file,
|
|
187
|
+
assetId: $assetId,
|
|
188
|
+
companyId: $companyId,
|
|
189
|
+
vulnerabilityTypes: $vulnerabilityTypes,
|
|
190
|
+
deployId: $deployId,
|
|
191
|
+
commitRef: $commitRef
|
|
192
|
+
}
|
|
193
|
+
) {
|
|
194
|
+
success
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
"""
|
|
@@ -163,6 +163,9 @@ def perform_deploy(context, flow_context, prepared_context):
|
|
|
163
163
|
try:
|
|
164
164
|
LOGGER.info("Creating new deploy...")
|
|
165
165
|
created_deploy = values.invoke(context)
|
|
166
|
+
|
|
167
|
+
if created_deploy is None:
|
|
168
|
+
raise CreateDeployException("Deploy not created.")
|
|
166
169
|
try:
|
|
167
170
|
conviso_api = flow_context.create_conviso_graphql_client()
|
|
168
171
|
api_key = flow_context.key
|
|
@@ -227,10 +230,7 @@ def perform_deploy(context, flow_context, prepared_context):
|
|
|
227
230
|
ast_log=full_trace
|
|
228
231
|
)
|
|
229
232
|
|
|
230
|
-
|
|
231
|
-
return created_deploy
|
|
232
|
-
|
|
233
|
-
raise CreateDeployException("Deploy not created.")
|
|
233
|
+
return created_deploy
|
|
234
234
|
|
|
235
235
|
except CreateDeployException as err:
|
|
236
236
|
raise PerformDeployException(err)
|
|
@@ -91,8 +91,8 @@ def run(
|
|
|
91
91
|
debug_message(f"Context after being prepared: {prepared_context.params}")
|
|
92
92
|
|
|
93
93
|
params_to_copy = [
|
|
94
|
-
'asset_id', 'send_to_flow', 'asset_name', 'vulnerability_auto_close',
|
|
95
|
-
'company_id'
|
|
94
|
+
'asset_id', 'send_to_flow', 'asset_name', 'vulnerability_auto_close',
|
|
95
|
+
'project_code', 'repository_dir', 'company_id'
|
|
96
96
|
]
|
|
97
97
|
|
|
98
98
|
for param_name in params_to_copy:
|
|
@@ -23,15 +23,6 @@ from .container import container
|
|
|
23
23
|
|
|
24
24
|
click_log.basic_config(LOGGER)
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
def api_url_autocompletion(*args, **kargs):
|
|
28
|
-
return [
|
|
29
|
-
api.PRODUCTION_API_URL,
|
|
30
|
-
api.STAGING_API_URL,
|
|
31
|
-
api.DEVELOPMENT_API_URL,
|
|
32
|
-
]
|
|
33
|
-
|
|
34
|
-
|
|
35
26
|
@click.group()
|
|
36
27
|
@click_log.simple_verbosity_option(LOGGER, '-l', '--verbosity')
|
|
37
28
|
@click.option(
|
|
@@ -48,7 +39,6 @@ def api_url_autocompletion(*args, **kargs):
|
|
|
48
39
|
envvar=("CONVISO_API_URL", "FLOW_API_URL"),
|
|
49
40
|
default=api.DEFAULT_API_URL,
|
|
50
41
|
show_default=True,
|
|
51
|
-
autocompletion=api_url_autocompletion,
|
|
52
42
|
help='The api url to access Conviso Platform resources.',
|
|
53
43
|
)
|
|
54
44
|
@click.option(
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import platform
|
|
3
|
+
import subprocess
|
|
4
|
+
|
|
5
|
+
class EnvironmentChecker:
|
|
6
|
+
"""
|
|
7
|
+
A class to check the system environment for required software and services.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
def __init__(self):
|
|
11
|
+
self.checks = {}
|
|
12
|
+
|
|
13
|
+
def _run_command(self, command, check_running=False):
|
|
14
|
+
"""Helper function to run shell commands and capture output/errors."""
|
|
15
|
+
try:
|
|
16
|
+
process = subprocess.run(command, capture_output=True, text=True, check=not check_running)
|
|
17
|
+
if check_running:
|
|
18
|
+
return process.returncode == 0, "", ""
|
|
19
|
+
return process.returncode == 0, process.stdout.strip(), process.stderr.strip()
|
|
20
|
+
except FileNotFoundError:
|
|
21
|
+
return False, "", "Command not found"
|
|
22
|
+
except subprocess.CalledProcessError as e:
|
|
23
|
+
return False, "", e.stderr.strip()
|
|
24
|
+
|
|
25
|
+
def check_docker(self):
|
|
26
|
+
"""Checks if Docker is installed and the daemon is running."""
|
|
27
|
+
installed, _, _ = self._run_command(["docker", "--version"])
|
|
28
|
+
running, _, _ = self._run_command(["docker", "info"], check_running=True)
|
|
29
|
+
self.checks["docker_installed"] = installed
|
|
30
|
+
self.checks["docker_running"] = running
|
|
31
|
+
return installed and running
|
|
32
|
+
|
|
33
|
+
def run_all_checks(self):
|
|
34
|
+
"""Runs all checks and prints a summary."""
|
|
35
|
+
self.check_docker()
|
|
36
|
+
|
|
37
|
+
print("Environment Check Summary:")
|
|
38
|
+
for check, result in self.checks.items():
|
|
39
|
+
if "version" in check:
|
|
40
|
+
print(f"- {check.replace('_',' ').title()}: {result}")
|
|
41
|
+
else:
|
|
42
|
+
status = "OK" if result else "FAILED"
|
|
43
|
+
print(f"- {check.replace('_',' ').title()}: {status}")
|
|
44
|
+
|
|
45
|
+
return all(self.checks.values())
|
|
@@ -109,13 +109,11 @@ def run(context, flow_context, project_code, asset_id, company_id, repository_di
|
|
|
109
109
|
This command will perform IAC analysis at the source code. The analysis
|
|
110
110
|
results can be reported or not to flow application.
|
|
111
111
|
"""
|
|
112
|
-
context.params['company_id'] = company_id if company_id is not None else None
|
|
113
|
-
|
|
114
112
|
if not from_ast:
|
|
115
113
|
prepared_context = RequirementsVerifier.prepare_context(clone(context))
|
|
116
114
|
|
|
117
115
|
params_to_copy = [
|
|
118
|
-
'project_code', 'asset_id', 'repository_dir', 'send_to_flow',
|
|
116
|
+
'project_code', 'asset_id', 'company_id', 'repository_dir', 'send_to_flow',
|
|
119
117
|
'deploy_id', 'scanner_timeout', 'parallel_workers', 'experimental'
|
|
120
118
|
]
|
|
121
119
|
|
{conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/requirements_verifier.py
RENAMED
|
@@ -92,6 +92,8 @@ class RequirementsVerifier:
|
|
|
92
92
|
@staticmethod
|
|
93
93
|
def create_asset_with_custom_name(context, company_id, asset_name):
|
|
94
94
|
""" Create an asset with custom name pass with a custom name """
|
|
95
|
+
if not asset_name or not asset_name.strip(): # Check for None or blank string
|
|
96
|
+
raise ValueError("Asset name cannot be None or blank.")
|
|
95
97
|
|
|
96
98
|
# we need to verify if already has an asset with the name provided.
|
|
97
99
|
# because graphql will return an error if already has.
|