conviso-ast 3.0.1__tar.gz → 3.0.1rc0__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_ast-3.0.1 → conviso_ast-3.0.1rc0}/PKG-INFO +1 -1
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/conviso_ast.egg-info/PKG-INFO +1 -1
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/conviso_ast.egg-info/SOURCES.txt +0 -4
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/common/retry_handler.py +2 -2
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/ast/entrypoint.py +1 -2
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/iac/entrypoint.py +0 -2
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/iac/run.py +1 -4
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/sast/entrypoint.py +0 -2
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/sbom/generate.py +1 -1
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/sca/entrypoint.py +0 -2
- conviso_ast-3.0.1rc0/convisoappsec/version.py +1 -0
- conviso_ast-3.0.1/convisoappsec/flowcli/ast/dry_run.py +0 -99
- conviso_ast-3.0.1/convisoappsec/flowcli/iac/dry_run.py +0 -94
- conviso_ast-3.0.1/convisoappsec/flowcli/sast/dry_run.py +0 -159
- conviso_ast-3.0.1/convisoappsec/flowcli/sca/dry_run.py +0 -108
- conviso_ast-3.0.1/convisoappsec/version.py +0 -1
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/README.md +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/conviso_ast.egg-info/dependency_links.txt +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/conviso_ast.egg-info/entry_points.txt +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/conviso_ast.egg-info/requires.txt +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/conviso_ast.egg-info/top_level.txt +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/common/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/common/box.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/common/cleaner.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/common/docker.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/common/exceptions.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/common/git_data_parser.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/common/graphql/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/common/graphql/error_handlers.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/common/graphql/errors.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/common/graphql/low_client.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/common/strings.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/api.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/cleaner.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/client.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/models/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/models/issues/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/models/issues/container.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/models/issues/iac.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/models/issues/normalize.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/models/issues/sast.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/models/issues/sca.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/resources_api.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/schemas/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/schemas/mutations/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/schemas/resolvers/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/v1/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/v1/client.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/v1/models/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/v1/models/asset.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/v1/models/issues.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/v1/models/project.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/v1/resources_api.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/v1/schemas/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/v1/schemas/mutations/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/v1/schemas/resolvers/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/util/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/util/ci_provider.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/util/source_code_compressor.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/version_control_system_adapter.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/version_searchers/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/version_searchers/sorted_by_versioning_style.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/version_searchers/timebased_version_seacher.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/version_searchers/version_searcher_result.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/versioning_style/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/versioning_style/semantic_versioning.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/__main__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/assets/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/assets/create.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/assets/entrypoint.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/assets/ls.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/ast/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/common.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/companies/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/companies/ls.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/container/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/container/entrypoint.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/container/run.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/context.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/create/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/create/context.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/create/entrypoint.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/create/with_/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/create/with_/entrypoint.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/context.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/entrypoint.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/entrypoint.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/time_.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/versioning_style.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/create/with_/values.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/entrypoint.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/environment_checker.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/findings/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/findings/create/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/findings/create/entrypoint.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/findings/create/with_/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/findings/create/with_/entrypoint.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/findings/create/with_/version_tracker.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/findings/entrypoint.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/findings/import_sarif/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/findings/import_sarif/entrypoint.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/help_option.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/iac/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/requirements_verifier.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/sast/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/sast/run.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/sbom/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/sbom/entrypoint.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/sca/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/sca/run.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/vulnerability/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/vulnerability/assert_security_rules.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/vulnerability/container_vulnerability_manager.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/vulnerability/entrypoint.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/vulnerability/rules_schema.json +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/vulnerability/run.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/logger.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/sast/__init__.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/sast/decision.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/sast/sastbox.py +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/scripts/shell_completer/flow_bash_completer.sh +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/scripts/shell_completer/flow_fish_completer.fish +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/scripts/shell_completer/flow_zsh_completer.sh +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/setup.cfg +0 -0
- {conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/setup.py +0 -0
|
@@ -71,7 +71,6 @@ convisoappsec/flowcli/assets/create.py
|
|
|
71
71
|
convisoappsec/flowcli/assets/entrypoint.py
|
|
72
72
|
convisoappsec/flowcli/assets/ls.py
|
|
73
73
|
convisoappsec/flowcli/ast/__init__.py
|
|
74
|
-
convisoappsec/flowcli/ast/dry_run.py
|
|
75
74
|
convisoappsec/flowcli/ast/entrypoint.py
|
|
76
75
|
convisoappsec/flowcli/companies/__init__.py
|
|
77
76
|
convisoappsec/flowcli/companies/ls.py
|
|
@@ -102,18 +101,15 @@ convisoappsec/flowcli/findings/create/with_/version_tracker.py
|
|
|
102
101
|
convisoappsec/flowcli/findings/import_sarif/__init__.py
|
|
103
102
|
convisoappsec/flowcli/findings/import_sarif/entrypoint.py
|
|
104
103
|
convisoappsec/flowcli/iac/__init__.py
|
|
105
|
-
convisoappsec/flowcli/iac/dry_run.py
|
|
106
104
|
convisoappsec/flowcli/iac/entrypoint.py
|
|
107
105
|
convisoappsec/flowcli/iac/run.py
|
|
108
106
|
convisoappsec/flowcli/sast/__init__.py
|
|
109
|
-
convisoappsec/flowcli/sast/dry_run.py
|
|
110
107
|
convisoappsec/flowcli/sast/entrypoint.py
|
|
111
108
|
convisoappsec/flowcli/sast/run.py
|
|
112
109
|
convisoappsec/flowcli/sbom/__init__.py
|
|
113
110
|
convisoappsec/flowcli/sbom/entrypoint.py
|
|
114
111
|
convisoappsec/flowcli/sbom/generate.py
|
|
115
112
|
convisoappsec/flowcli/sca/__init__.py
|
|
116
|
-
convisoappsec/flowcli/sca/dry_run.py
|
|
117
113
|
convisoappsec/flowcli/sca/entrypoint.py
|
|
118
114
|
convisoappsec/flowcli/sca/run.py
|
|
119
115
|
convisoappsec/flowcli/vulnerability/__init__.py
|
|
@@ -20,7 +20,7 @@ class RetryHandler:
|
|
|
20
20
|
while retries < self.max_retries:
|
|
21
21
|
try:
|
|
22
22
|
return func(*args, **kwargs)
|
|
23
|
-
except Exception
|
|
23
|
+
except Exception:
|
|
24
24
|
retries += 1
|
|
25
25
|
time.sleep(delay)
|
|
26
26
|
delay *= self.backoff_factor
|
|
@@ -28,7 +28,7 @@ class RetryHandler:
|
|
|
28
28
|
if retries == self.max_retries:
|
|
29
29
|
full_trace = traceback.format_exc()
|
|
30
30
|
LOGGER.warning(
|
|
31
|
-
|
|
31
|
+
"⚠️ Maximum retries reached. Our technical team has been notified."
|
|
32
32
|
)
|
|
33
33
|
|
|
34
34
|
try:
|
|
@@ -15,7 +15,7 @@ from convisoappsec.flow import GitAdapter
|
|
|
15
15
|
from convisoappsec.flowcli.context import pass_flow_context
|
|
16
16
|
from convisoappsec.logger import LOGGER, log_and_notify_ast_event
|
|
17
17
|
from convisoappsec.common.cleaner import Cleaner
|
|
18
|
-
|
|
18
|
+
|
|
19
19
|
|
|
20
20
|
def get_default_params_values(cmd_params):
|
|
21
21
|
""" Further information in https://click.palletsprojects.com/en/8.1.x/api/?highlight=params#click.Command.params
|
|
@@ -425,4 +425,3 @@ def ast():
|
|
|
425
425
|
|
|
426
426
|
|
|
427
427
|
ast.add_command(run)
|
|
428
|
-
ast.add_command(dry_run)
|
|
@@ -2,7 +2,6 @@ import click
|
|
|
2
2
|
|
|
3
3
|
from convisoappsec.flowcli import help_option
|
|
4
4
|
from .run import run
|
|
5
|
-
from .dry_run import dry_run
|
|
6
5
|
|
|
7
6
|
|
|
8
7
|
@click.group()
|
|
@@ -12,7 +11,6 @@ def iac():
|
|
|
12
11
|
|
|
13
12
|
|
|
14
13
|
iac.add_command(run)
|
|
15
|
-
iac.add_command(dry_run)
|
|
16
14
|
|
|
17
15
|
iac.epilog = '''
|
|
18
16
|
Run flow iac COMMAND --help for more information on a command.
|
|
@@ -142,7 +142,6 @@ def run(context, flow_context, asset_id, company_id, repository_dir, send_to_flo
|
|
|
142
142
|
def deploy_results_to_conviso(
|
|
143
143
|
conviso_api, results_filepaths, asset_id, company_id, flow_context, deploy_id, commit_ref=None, control_sync_status_id=None
|
|
144
144
|
):
|
|
145
|
-
|
|
146
145
|
results_context = click.progressbar(results_filepaths, label="Sending results to the Conviso Platform...")
|
|
147
146
|
|
|
148
147
|
with results_context as reports:
|
|
@@ -151,7 +150,7 @@ def deploy_results_to_conviso(
|
|
|
151
150
|
with open(report_path) as report_file:
|
|
152
151
|
data = parse_data(json.load(report_file))
|
|
153
152
|
except Exception:
|
|
154
|
-
LOGGER.
|
|
153
|
+
LOGGER.warn(f"⚠️ Error processing report file. Our technical team has been notified.")
|
|
155
154
|
full_trace = traceback.format_exc()
|
|
156
155
|
log_and_notify_ast_event(
|
|
157
156
|
flow_context=flow_context, company_id=company_id, asset_id=asset_id,
|
|
@@ -182,8 +181,6 @@ def deploy_results_to_conviso(
|
|
|
182
181
|
except ResponseError as error:
|
|
183
182
|
if error.code == 'RECORD_NOT_UNIQUE':
|
|
184
183
|
continue
|
|
185
|
-
elif error.code == "Record not found" or "Record not found" in str(error):
|
|
186
|
-
continue
|
|
187
184
|
else:
|
|
188
185
|
retry_handler = RetryHandler(
|
|
189
186
|
flow_context=flow_context, company_id=company_id, asset_id=asset_id
|
|
@@ -2,7 +2,6 @@ import click
|
|
|
2
2
|
|
|
3
3
|
from convisoappsec.flowcli import help_option
|
|
4
4
|
from .run import run
|
|
5
|
-
from .dry_run import dry_run
|
|
6
5
|
|
|
7
6
|
|
|
8
7
|
@click.group()
|
|
@@ -12,7 +11,6 @@ def sast():
|
|
|
12
11
|
|
|
13
12
|
|
|
14
13
|
sast.add_command(run)
|
|
15
|
-
sast.add_command(dry_run)
|
|
16
14
|
|
|
17
15
|
sast.epilog = '''
|
|
18
16
|
Run flow sast COMMAND --help for more information on a command.
|
|
@@ -182,7 +182,7 @@ def generate(context, flow_context, asset_id, company_id, repository_dir, send_t
|
|
|
182
182
|
stderr=subprocess.DEVNULL
|
|
183
183
|
)
|
|
184
184
|
command = [f"./conviso/syft scan {repository_dir} -o cyclonedx-json={file_name} "
|
|
185
|
-
f"--select-catalogers '{','.join(catalogers)}'
|
|
185
|
+
f"--select-catalogers '{','.join(catalogers)}'"]
|
|
186
186
|
|
|
187
187
|
subprocess.run(command, shell=True, check=True, capture_output=True)
|
|
188
188
|
|
|
@@ -2,7 +2,6 @@ import click
|
|
|
2
2
|
|
|
3
3
|
from convisoappsec.flowcli import help_option
|
|
4
4
|
from .run import run
|
|
5
|
-
from .dry_run import dry_run
|
|
6
5
|
|
|
7
6
|
|
|
8
7
|
@click.group()
|
|
@@ -12,7 +11,6 @@ def sca():
|
|
|
12
11
|
|
|
13
12
|
|
|
14
13
|
sca.add_command(run)
|
|
15
|
-
sca.add_command(dry_run)
|
|
16
14
|
|
|
17
15
|
sca.epilog = '''
|
|
18
16
|
Run flow sca COMMAND --help for more information on a command.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '3.0.1-rc.0'
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import click
|
|
2
|
-
import json
|
|
3
|
-
import traceback
|
|
4
|
-
import sys
|
|
5
|
-
from convisoappsec.flowcli import help_option
|
|
6
|
-
from convisoappsec.flowcli.context import pass_flow_context
|
|
7
|
-
from convisoappsec.logger import LOGGER
|
|
8
|
-
from convisoappsec.flowcli.common import on_http_error
|
|
9
|
-
from convisoappsec.common.cleaner import Cleaner
|
|
10
|
-
from convisoappsec.sast.sastbox import SASTBox
|
|
11
|
-
from convisoappsec.flowcli.sast.dry_run import execute_dry_run as execute_sast_dry_run
|
|
12
|
-
from convisoappsec.flowcli.sca.dry_run import execute_dry_run as execute_sca_dry_run
|
|
13
|
-
from convisoappsec.flowcli.iac.dry_run import execute_dry_run as execute_iac_dry_run
|
|
14
|
-
|
|
15
|
-
@click.command(name='dry-run')
|
|
16
|
-
@click.option(
|
|
17
|
-
"-s", "--start-commit", required=False,
|
|
18
|
-
help="If no value is set so the empty tree hash commit is used."
|
|
19
|
-
)
|
|
20
|
-
@click.option(
|
|
21
|
-
"-e", "--end-commit", required=False,
|
|
22
|
-
help="If no value is set so the HEAD commit from the current branch is used"
|
|
23
|
-
)
|
|
24
|
-
@click.option(
|
|
25
|
-
"-r", "--repository-dir", default=".", show_default=True,
|
|
26
|
-
type=click.Path(exists=True, resolve_path=True), required=False,
|
|
27
|
-
help="The source code repository directory."
|
|
28
|
-
)
|
|
29
|
-
@click.option(
|
|
30
|
-
"--sastbox-registry", default="", required=False, hidden=True,
|
|
31
|
-
envvar=("CONVISO_SASTBOX_REGISTRY", "FLOW_SASTBOX_REGISTRY"),
|
|
32
|
-
)
|
|
33
|
-
@click.option(
|
|
34
|
-
"--sastbox-repository-name", default="", required=False, hidden=True,
|
|
35
|
-
envvar=("CONVISO_SASTBOX_REPOSITORY_NAME", "FLOW_SASTBOX_REPOSITORY_NAME"),
|
|
36
|
-
)
|
|
37
|
-
@click.option(
|
|
38
|
-
"--sastbox-tag", default=SASTBox.DEFAULT_TAG, required=False, hidden=True,
|
|
39
|
-
envvar=("CONVISO_SASTBOX_TAG", "FLOW_SASTBOX_TAG"),
|
|
40
|
-
)
|
|
41
|
-
@click.option(
|
|
42
|
-
"--sastbox-skip-login/--sastbox-no-skip-login", default=False, required=False, hidden=True,
|
|
43
|
-
envvar=("CONVISO_SASTBOX_SKIP_LOGIN", "FLOW_SASTBOX_SKIP_LOGIN"),
|
|
44
|
-
)
|
|
45
|
-
@click.option(
|
|
46
|
-
"--custom-sca-tags", hidden=True, required=False, multiple=True, type=(str, str),
|
|
47
|
-
help="It should be passed as <repository_name> <image_tag>."
|
|
48
|
-
)
|
|
49
|
-
@click.option(
|
|
50
|
-
"--scanner-timeout", hidden=True, required=False, default=7200, type=int,
|
|
51
|
-
help="Set timeout for each scanner"
|
|
52
|
-
)
|
|
53
|
-
@click.option(
|
|
54
|
-
'--cleanup', default=False, is_flag=True, show_default=True,
|
|
55
|
-
help="Clean up system resources."
|
|
56
|
-
)
|
|
57
|
-
@help_option
|
|
58
|
-
@pass_flow_context
|
|
59
|
-
def dry_run(flow_context, end_commit, start_commit, repository_dir,
|
|
60
|
-
sastbox_registry, sastbox_repository_name, sastbox_tag, sastbox_skip_login,
|
|
61
|
-
custom_sca_tags, scanner_timeout, cleanup):
|
|
62
|
-
"""
|
|
63
|
-
Perform a dry-run AST analysis (SAST, SCA, IaC).
|
|
64
|
-
Checks API Key, runs the scans, and outputs the results in JSON format to stdout.
|
|
65
|
-
Does NOT create assets or deploys on Conviso Platform.
|
|
66
|
-
"""
|
|
67
|
-
try:
|
|
68
|
-
results = {}
|
|
69
|
-
|
|
70
|
-
# Run SAST
|
|
71
|
-
sast_results = execute_sast_dry_run(
|
|
72
|
-
flow_context, end_commit, start_commit, repository_dir,
|
|
73
|
-
sastbox_registry, sastbox_repository_name, sastbox_tag, sastbox_skip_login
|
|
74
|
-
)
|
|
75
|
-
results['sast'] = sast_results
|
|
76
|
-
|
|
77
|
-
# Run SCA
|
|
78
|
-
sca_results = execute_sca_dry_run(
|
|
79
|
-
flow_context, repository_dir, custom_sca_tags, scanner_timeout
|
|
80
|
-
)
|
|
81
|
-
results['sca'] = sca_results
|
|
82
|
-
|
|
83
|
-
# Run IaC
|
|
84
|
-
iac_results = execute_iac_dry_run(
|
|
85
|
-
flow_context, repository_dir, scanner_timeout
|
|
86
|
-
)
|
|
87
|
-
results['iac'] = iac_results
|
|
88
|
-
|
|
89
|
-
print(json.dumps(results, indent=2))
|
|
90
|
-
|
|
91
|
-
if cleanup:
|
|
92
|
-
LOGGER.info("🧹 Cleaning up ...")
|
|
93
|
-
cleaner = Cleaner()
|
|
94
|
-
cleaner.cleanup()
|
|
95
|
-
|
|
96
|
-
except Exception as e:
|
|
97
|
-
traceback.print_exc(file=sys.stderr)
|
|
98
|
-
on_http_error(e)
|
|
99
|
-
sys.exit(1)
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import click
|
|
2
|
-
import click_log
|
|
3
|
-
import json
|
|
4
|
-
import traceback
|
|
5
|
-
import sys
|
|
6
|
-
from convisoappsec.common.box import ContainerWrapper
|
|
7
|
-
from convisoappsec.flowcli import help_option
|
|
8
|
-
from convisoappsec.flowcli.context import pass_flow_context
|
|
9
|
-
from convisoappsec.logger import LOGGER
|
|
10
|
-
from convisoappsec.flowcli.common import on_http_error
|
|
11
|
-
from convisoappsec.common.cleaner import Cleaner
|
|
12
|
-
|
|
13
|
-
def execute_dry_run(flow_context, repository_dir, scanner_timeout):
|
|
14
|
-
REQUIRED_CODEBASE_PATH = '/code'
|
|
15
|
-
IAC_IMAGE_NAME = 'iac_scanner_checkov'
|
|
16
|
-
IAC_SCAN_FILENAME = '/{}.json'.format(IAC_IMAGE_NAME)
|
|
17
|
-
containers_map = {
|
|
18
|
-
IAC_IMAGE_NAME: {
|
|
19
|
-
'repository_dir': repository_dir,
|
|
20
|
-
'repository_name': IAC_IMAGE_NAME,
|
|
21
|
-
'tag': 'unstable',
|
|
22
|
-
'command': [
|
|
23
|
-
'-c', REQUIRED_CODEBASE_PATH,
|
|
24
|
-
'-o', IAC_SCAN_FILENAME,
|
|
25
|
-
],
|
|
26
|
-
},
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
conviso_rest_api = flow_context.create_conviso_rest_api_client()
|
|
30
|
-
token = conviso_rest_api.docker_registry.get_sast_token()
|
|
31
|
-
|
|
32
|
-
LOGGER.info('💬 Preparing Environment...')
|
|
33
|
-
scanners_wrapper = ContainerWrapper(
|
|
34
|
-
token=token,
|
|
35
|
-
containers_map=containers_map,
|
|
36
|
-
logger=LOGGER,
|
|
37
|
-
timeout=scanner_timeout
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
LOGGER.info('💬 Starting IaC...')
|
|
41
|
-
scanners_wrapper.run()
|
|
42
|
-
|
|
43
|
-
results_list = []
|
|
44
|
-
for r in scanners_wrapper.scanners:
|
|
45
|
-
report_filepath = r.results
|
|
46
|
-
if report_filepath:
|
|
47
|
-
try:
|
|
48
|
-
with open(report_filepath, 'r') as f:
|
|
49
|
-
results_list.append(json.load(f))
|
|
50
|
-
except Exception as e:
|
|
51
|
-
click.echo(f"Error reading result file {report_filepath}: {e}", file=sys.stderr)
|
|
52
|
-
|
|
53
|
-
if len(results_list) == 1:
|
|
54
|
-
return results_list[0]
|
|
55
|
-
return results_list
|
|
56
|
-
|
|
57
|
-
@click.command(name='dry-run')
|
|
58
|
-
@click.option(
|
|
59
|
-
'-r', '--repository-dir', default=".", show_default=True,
|
|
60
|
-
type=click.Path(exists=True, resolve_path=True), required=False,
|
|
61
|
-
help="The source code repository directory."
|
|
62
|
-
)
|
|
63
|
-
@click.option(
|
|
64
|
-
"--scanner-timeout", hidden=True, required=False, default=7200, type=int,
|
|
65
|
-
help="Set timeout for each scanner"
|
|
66
|
-
)
|
|
67
|
-
@click.option(
|
|
68
|
-
'--cleanup', default=False, is_flag=True, show_default=True,
|
|
69
|
-
help="Clean up system resources."
|
|
70
|
-
)
|
|
71
|
-
@help_option
|
|
72
|
-
@pass_flow_context
|
|
73
|
-
def dry_run(flow_context, repository_dir, scanner_timeout, cleanup):
|
|
74
|
-
"""
|
|
75
|
-
Perform a dry-run IAC analysis.
|
|
76
|
-
Checks API Key, runs the scan, and outputs the results in JSON format to stdout.
|
|
77
|
-
Does NOT create assets or deploys on Conviso Platform.
|
|
78
|
-
"""
|
|
79
|
-
try:
|
|
80
|
-
results = execute_dry_run(flow_context, repository_dir, scanner_timeout)
|
|
81
|
-
|
|
82
|
-
if results:
|
|
83
|
-
print(json.dumps(results, indent=2))
|
|
84
|
-
else:
|
|
85
|
-
print(json.dumps({}, indent=2))
|
|
86
|
-
|
|
87
|
-
if cleanup:
|
|
88
|
-
LOGGER.info("🧹 Cleaning up ...")
|
|
89
|
-
cleaner = Cleaner()
|
|
90
|
-
cleaner.cleanup()
|
|
91
|
-
|
|
92
|
-
except Exception as e:
|
|
93
|
-
on_http_error(e)
|
|
94
|
-
sys.exit(1)
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import sys
|
|
2
|
-
import click
|
|
3
|
-
import traceback
|
|
4
|
-
import json
|
|
5
|
-
from convisoappsec.sast.sastbox import SASTBox
|
|
6
|
-
from docker.errors import APIError
|
|
7
|
-
import time
|
|
8
|
-
from convisoappsec.flow import GitAdapter
|
|
9
|
-
from convisoappsec.flowcli import help_option
|
|
10
|
-
from convisoappsec.flowcli.context import pass_flow_context
|
|
11
|
-
from convisoappsec.logger import LOGGER
|
|
12
|
-
from convisoappsec.common.cleaner import Cleaner
|
|
13
|
-
from convisoappsec.flowcli.common import on_http_error
|
|
14
|
-
|
|
15
|
-
class DryRunSASTBox(SASTBox):
|
|
16
|
-
def recovery_technologies_file(self):
|
|
17
|
-
# Skip technology recovery and update for dry-run
|
|
18
|
-
pass
|
|
19
|
-
|
|
20
|
-
def perform_dry_run_sastbox_scan(
|
|
21
|
-
conviso_rest_api, sastbox_registry, sastbox_repository_name, sastbox_tag, sastbox_skip_login, repository_dir, end_commit, start_commit, logger
|
|
22
|
-
):
|
|
23
|
-
max_retries = 5
|
|
24
|
-
retries = 0
|
|
25
|
-
sastbox = DryRunSASTBox(registry=sastbox_registry, repository_name=sastbox_repository_name, tag=sastbox_tag)
|
|
26
|
-
pull_progress_bar = click.progressbar(length=sastbox.size, label="Performing SAST download...")
|
|
27
|
-
|
|
28
|
-
while retries < max_retries:
|
|
29
|
-
try:
|
|
30
|
-
if not sastbox_skip_login:
|
|
31
|
-
logger("Checking SASTBox authorization...")
|
|
32
|
-
token = conviso_rest_api.docker_registry.get_sast_token()
|
|
33
|
-
sastbox.login(token)
|
|
34
|
-
|
|
35
|
-
with pull_progress_bar as progressbar:
|
|
36
|
-
for downloaded_chunk in sastbox.pull():
|
|
37
|
-
progressbar.update(downloaded_chunk)
|
|
38
|
-
break
|
|
39
|
-
except APIError as e:
|
|
40
|
-
retries += 1
|
|
41
|
-
logger(f"Retrying {retries}/{max_retries}...")
|
|
42
|
-
time.sleep(1)
|
|
43
|
-
|
|
44
|
-
if retries == max_retries:
|
|
45
|
-
logger("Max retries reached. Failed to perform SAST download.")
|
|
46
|
-
raise Exception(f"Max retries reached. Could not complete the SAST download. Error: {str(e)}")
|
|
47
|
-
|
|
48
|
-
logger("Starting SAST scan diff...")
|
|
49
|
-
|
|
50
|
-
reports = sastbox.run_scan_diff(repository_dir, end_commit, start_commit, log=logger)
|
|
51
|
-
|
|
52
|
-
logger("SAST scan diff done.")
|
|
53
|
-
|
|
54
|
-
results_filepaths = []
|
|
55
|
-
for r in reports:
|
|
56
|
-
try:
|
|
57
|
-
file_path = str(r)
|
|
58
|
-
results_filepaths.append(file_path)
|
|
59
|
-
except Exception as e:
|
|
60
|
-
click.echo(f"Error decoding file path: {r} with error {e}.", file=sys.stderr)
|
|
61
|
-
|
|
62
|
-
return results_filepaths
|
|
63
|
-
|
|
64
|
-
def log_func(msg, new_line=True):
|
|
65
|
-
click.echo(msg, nl=new_line, err=True)
|
|
66
|
-
|
|
67
|
-
def execute_dry_run(flow_context, end_commit, start_commit, repository_dir,
|
|
68
|
-
sastbox_registry, sastbox_repository_name, sastbox_tag, sastbox_skip_login):
|
|
69
|
-
git_adapter = GitAdapter(repository_dir)
|
|
70
|
-
end_commit = end_commit or git_adapter.head_commit
|
|
71
|
-
start_commit = start_commit or git_adapter.empty_repository_tree_commit
|
|
72
|
-
|
|
73
|
-
if start_commit == end_commit:
|
|
74
|
-
return {}
|
|
75
|
-
|
|
76
|
-
conviso_rest_api = flow_context.create_conviso_rest_api_client()
|
|
77
|
-
|
|
78
|
-
results_filepaths = perform_dry_run_sastbox_scan(
|
|
79
|
-
conviso_rest_api, sastbox_registry, sastbox_repository_name, sastbox_tag,
|
|
80
|
-
sastbox_skip_login, repository_dir, end_commit, start_commit, log_func
|
|
81
|
-
)
|
|
82
|
-
|
|
83
|
-
results_list = []
|
|
84
|
-
for path in results_filepaths:
|
|
85
|
-
try:
|
|
86
|
-
with open(path, 'r') as f:
|
|
87
|
-
results_list.append(json.load(f))
|
|
88
|
-
except Exception as e:
|
|
89
|
-
click.echo(f"Error reading result file {path}: {e}", file=sys.stderr)
|
|
90
|
-
|
|
91
|
-
if len(results_list) == 1:
|
|
92
|
-
return results_list[0]
|
|
93
|
-
return results_list
|
|
94
|
-
|
|
95
|
-
@click.command(name='dry-run')
|
|
96
|
-
@click.option(
|
|
97
|
-
"-s", "--start-commit", required=False,
|
|
98
|
-
help="If no value is set so the empty tree hash commit is used."
|
|
99
|
-
)
|
|
100
|
-
@click.option(
|
|
101
|
-
"-e", "--end-commit", required=False,
|
|
102
|
-
help="If no value is set so the HEAD commit from the current branch is used"
|
|
103
|
-
)
|
|
104
|
-
@click.option(
|
|
105
|
-
"-r", "--repository-dir", default=".", show_default=True,
|
|
106
|
-
type=click.Path(exists=True, resolve_path=True), required=False,
|
|
107
|
-
help="The source code repository directory."
|
|
108
|
-
)
|
|
109
|
-
@click.option(
|
|
110
|
-
"--sastbox-registry", default="", required=False, hidden=True,
|
|
111
|
-
envvar=("CONVISO_SASTBOX_REGISTRY", "FLOW_SASTBOX_REGISTRY"),
|
|
112
|
-
)
|
|
113
|
-
@click.option(
|
|
114
|
-
"--sastbox-repository-name", default="", required=False, hidden=True,
|
|
115
|
-
envvar=("CONVISO_SASTBOX_REPOSITORY_NAME", "FLOW_SASTBOX_REPOSITORY_NAME"),
|
|
116
|
-
)
|
|
117
|
-
@click.option(
|
|
118
|
-
"--sastbox-tag", default=SASTBox.DEFAULT_TAG, required=False, hidden=True,
|
|
119
|
-
envvar=("CONVISO_SASTBOX_TAG", "FLOW_SASTBOX_TAG"),
|
|
120
|
-
)
|
|
121
|
-
@click.option(
|
|
122
|
-
"--sastbox-skip-login/--sastbox-no-skip-login", default=False, required=False, hidden=True,
|
|
123
|
-
envvar=("CONVISO_SASTBOX_SKIP_LOGIN", "FLOW_SASTBOX_SKIP_LOGIN"),
|
|
124
|
-
)
|
|
125
|
-
@click.option(
|
|
126
|
-
'--cleanup', default=False, is_flag=True, show_default=True,
|
|
127
|
-
help="Clean up system resources."
|
|
128
|
-
)
|
|
129
|
-
@click.option(
|
|
130
|
-
"-o", "--output", required=False, help="Output the results to a JSON file."
|
|
131
|
-
)
|
|
132
|
-
@help_option
|
|
133
|
-
@pass_flow_context
|
|
134
|
-
def dry_run(flow_context, end_commit, start_commit, repository_dir,
|
|
135
|
-
sastbox_registry, sastbox_repository_name, sastbox_tag, sastbox_skip_login, cleanup, output):
|
|
136
|
-
try:
|
|
137
|
-
results = execute_dry_run(
|
|
138
|
-
flow_context, end_commit, start_commit, repository_dir,
|
|
139
|
-
sastbox_registry, sastbox_repository_name, sastbox_tag, sastbox_skip_login
|
|
140
|
-
)
|
|
141
|
-
|
|
142
|
-
if output:
|
|
143
|
-
with open(output, "w") as f:
|
|
144
|
-
json.dump(results if results else {}, f, indent=2)
|
|
145
|
-
LOGGER.info(f"Results saved to {output}")
|
|
146
|
-
elif results:
|
|
147
|
-
print(json.dumps(results, indent=2))
|
|
148
|
-
else:
|
|
149
|
-
print(json.dumps({}, indent=2))
|
|
150
|
-
|
|
151
|
-
if cleanup:
|
|
152
|
-
LOGGER.info("🧹 Cleaning up ...")
|
|
153
|
-
cleaner = Cleaner()
|
|
154
|
-
cleaner.cleanup()
|
|
155
|
-
|
|
156
|
-
except Exception as e:
|
|
157
|
-
traceback.print_exc(file=sys.stderr)
|
|
158
|
-
on_http_error(e)
|
|
159
|
-
sys.exit(1)
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import click
|
|
2
|
-
import click_log
|
|
3
|
-
import traceback
|
|
4
|
-
import json
|
|
5
|
-
import sys
|
|
6
|
-
from convisoappsec.common.box import ContainerWrapper
|
|
7
|
-
from convisoappsec.flowcli import help_option
|
|
8
|
-
from convisoappsec.flowcli.context import pass_flow_context
|
|
9
|
-
from convisoappsec.logger import LOGGER
|
|
10
|
-
from convisoappsec.flowcli.common import on_http_error
|
|
11
|
-
from convisoappsec.common.cleaner import Cleaner
|
|
12
|
-
|
|
13
|
-
def log_func(msg, new_line=True):
|
|
14
|
-
click.echo(msg, nl=new_line, err=True)
|
|
15
|
-
|
|
16
|
-
def execute_dry_run(flow_context, repository_dir, custom_sca_tags, scanner_timeout):
|
|
17
|
-
REQUIRED_CODEBASE_PATH = '/code'
|
|
18
|
-
OSV_SCANNER_IMAGE_NAME = 'osv_scanner'
|
|
19
|
-
|
|
20
|
-
scanners = {
|
|
21
|
-
OSV_SCANNER_IMAGE_NAME: {
|
|
22
|
-
'repository_name': OSV_SCANNER_IMAGE_NAME,
|
|
23
|
-
'tag': 'latest',
|
|
24
|
-
'command': [
|
|
25
|
-
'-c', REQUIRED_CODEBASE_PATH,
|
|
26
|
-
'-f', 'json',
|
|
27
|
-
'-o', '/{}.json'.format(OSV_SCANNER_IMAGE_NAME)
|
|
28
|
-
],
|
|
29
|
-
'repository_dir': repository_dir
|
|
30
|
-
},
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
if custom_sca_tags:
|
|
34
|
-
for custom_tag in custom_sca_tags:
|
|
35
|
-
scan_name, tag = custom_tag
|
|
36
|
-
if scan_name in scanners.keys():
|
|
37
|
-
scanners[scan_name]['tag'] = tag
|
|
38
|
-
|
|
39
|
-
conviso_rest_api = flow_context.create_conviso_rest_api_client()
|
|
40
|
-
token = conviso_rest_api.docker_registry.get_sast_token()
|
|
41
|
-
|
|
42
|
-
LOGGER.info('💬 Preparing Environment...')
|
|
43
|
-
scabox = ContainerWrapper(
|
|
44
|
-
token=token,
|
|
45
|
-
containers_map=scanners,
|
|
46
|
-
logger=LOGGER,
|
|
47
|
-
timeout=scanner_timeout
|
|
48
|
-
)
|
|
49
|
-
LOGGER.info('💬 Starting SCA...')
|
|
50
|
-
scabox.run()
|
|
51
|
-
|
|
52
|
-
results_list = []
|
|
53
|
-
for unit in scabox.scanners:
|
|
54
|
-
file_path = unit.results
|
|
55
|
-
if file_path:
|
|
56
|
-
try:
|
|
57
|
-
with open(file_path, 'r') as f:
|
|
58
|
-
results_list.append(json.load(f))
|
|
59
|
-
except Exception as e:
|
|
60
|
-
click.echo(f"Error reading result file {file_path}: {e}", file=sys.stderr)
|
|
61
|
-
|
|
62
|
-
if len(results_list) == 1:
|
|
63
|
-
return results_list[0]
|
|
64
|
-
return results_list
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
@click.command(name='dry-run')
|
|
68
|
-
@click.option(
|
|
69
|
-
'-r', '--repository-dir', default=".", show_default=True,
|
|
70
|
-
type=click.Path(exists=True, resolve_path=True), required=False,
|
|
71
|
-
help="The source code repository directory."
|
|
72
|
-
)
|
|
73
|
-
@click.option(
|
|
74
|
-
"--custom-sca-tags", hidden=True, required=False, multiple=True, type=(str, str),
|
|
75
|
-
help="It should be passed as <repository_name> <image_tag>."
|
|
76
|
-
)
|
|
77
|
-
@click.option(
|
|
78
|
-
"--scanner-timeout", hidden=True, required=False, default=7200, type=int,
|
|
79
|
-
help="Set timeout for each scanner"
|
|
80
|
-
)
|
|
81
|
-
@click.option(
|
|
82
|
-
'--cleanup', default=False, is_flag=True, show_default=True,
|
|
83
|
-
help="Clean up system resources."
|
|
84
|
-
)
|
|
85
|
-
@help_option
|
|
86
|
-
@pass_flow_context
|
|
87
|
-
def dry_run(flow_context, repository_dir, custom_sca_tags, scanner_timeout, cleanup):
|
|
88
|
-
"""
|
|
89
|
-
Perform a dry-run SCA analysis.
|
|
90
|
-
Checks API Key, runs the scan, and outputs the results in JSON format to stdout.
|
|
91
|
-
Does NOT create assets or deploys on Conviso Platform.
|
|
92
|
-
"""
|
|
93
|
-
try:
|
|
94
|
-
results = execute_dry_run(flow_context, repository_dir, custom_sca_tags, scanner_timeout)
|
|
95
|
-
|
|
96
|
-
if results:
|
|
97
|
-
print(json.dumps(results, indent=2))
|
|
98
|
-
else:
|
|
99
|
-
print(json.dumps({}, indent=2))
|
|
100
|
-
|
|
101
|
-
if cleanup:
|
|
102
|
-
LOGGER.info("🧹 Cleaning up ...")
|
|
103
|
-
cleaner = Cleaner()
|
|
104
|
-
cleaner.cleanup()
|
|
105
|
-
|
|
106
|
-
except Exception as e:
|
|
107
|
-
on_http_error(e)
|
|
108
|
-
sys.exit(1)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '3.0.1'
|
|
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
|
|
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_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/models/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/models/issues/iac.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/models/issues/sast.py
RENAMED
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/models/issues/sca.py
RENAMED
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/resources_api.py
RENAMED
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/beta/schemas/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/v1/models/__init__.py
RENAMED
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/v1/models/asset.py
RENAMED
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/v1/models/issues.py
RENAMED
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/v1/models/project.py
RENAMED
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/v1/resources_api.py
RENAMED
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/graphql_api/v1/schemas/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/util/source_code_compressor.py
RENAMED
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flow/version_control_system_adapter.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
|
|
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
|
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/create/entrypoint.py
RENAMED
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/create/with_/__init__.py
RENAMED
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/create/with_/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
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/deploy/create/with_/values.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/findings/create/__init__.py
RENAMED
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/findings/create/entrypoint.py
RENAMED
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/findings/create/with_/__init__.py
RENAMED
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/findings/create/with_/entrypoint.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/findings/import_sarif/__init__.py
RENAMED
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/findings/import_sarif/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
|
|
File without changes
|
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/vulnerability/entrypoint.py
RENAMED
|
File without changes
|
{conviso_ast-3.0.1 → conviso_ast-3.0.1rc0}/convisoappsec/flowcli/vulnerability/rules_schema.json
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
|