conviso-cli 2.2.27rc0__tar.gz → 2.3.0.dev0__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.27rc0 → conviso-cli-2.3.0.dev0}/PKG-INFO +1 -1
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/conviso_cli.egg-info/PKG-INFO +1 -1
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/ast/entrypoint.py +20 -8
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/container/run.py +79 -20
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/sbom/generate.py +3 -3
- conviso-cli-2.3.0.dev0/convisoappsec/version.py +1 -0
- conviso-cli-2.2.27rc0/convisoappsec/version.py +0 -1
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/README.md +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/conviso_cli.egg-info/SOURCES.txt +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/conviso_cli.egg-info/dependency_links.txt +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/conviso_cli.egg-info/entry_points.txt +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/conviso_cli.egg-info/requires.txt +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/conviso_cli.egg-info/top_level.txt +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/common/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/common/box.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/common/docker.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/common/exceptions.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/common/git_data_parser.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/common/graphql/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/common/graphql/error_handlers.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/common/graphql/errors.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/common/graphql/low_client.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/common/retry_handler.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/common/strings.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/api.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/beta/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/beta/client.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/beta/models/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/beta/models/issues/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/beta/models/issues/container.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/beta/models/issues/iac.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/beta/models/issues/normalize.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/beta/models/issues/sast.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/beta/models/issues/sca.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/beta/resources_api.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/beta/schemas/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/beta/schemas/mutations/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/beta/schemas/resolvers/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/v1/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/v1/client.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/v1/models/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/v1/models/asset.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/v1/models/issues.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/v1/models/project.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/v1/resources_api.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/v1/schemas/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/v1/schemas/mutations/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/v1/schemas/resolvers/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/source_code_scanner/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/source_code_scanner/exceptions.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/source_code_scanner/scc.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/source_code_scanner/source_code_scanner.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/util/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/util/ci_provider.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/util/metrics.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/util/source_code_compressor.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/version_control_system_adapter.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/version_searchers/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/version_searchers/sorted_by_versioning_style.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/version_searchers/timebased_version_seacher.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/version_searchers/version_searcher_result.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/versioning_style/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/versioning_style/semantic_versioning.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/__main__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/assets/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/assets/create.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/assets/entrypoint.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/assets/ls.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/ast/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/common.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/companies/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/companies/ls.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/container/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/container/entrypoint.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/context.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/create/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/create/context.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/create/entrypoint.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/create/with_/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/create/with_/entrypoint.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/context.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/entrypoint.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/entrypoint.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/time_.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/versioning_style.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/create/with_/values.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/entrypoint.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/ls.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/show.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/entrypoint.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/findings/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/findings/create/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/findings/create/entrypoint.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/findings/create/with_/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/findings/create/with_/entrypoint.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/findings/create/with_/version_tracker.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/findings/entrypoint.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/findings/import_sarif/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/findings/import_sarif/entrypoint.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/help_option.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/iac/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/iac/entrypoint.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/iac/run.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/projects/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/projects/ls.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/requirements_verifier.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/sast/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/sast/entrypoint.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/sast/run.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/sbom/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/sbom/entrypoint.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/sca/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/sca/entrypoint.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/sca/run.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/vulnerability/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/vulnerability/assert_security_rules.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/vulnerability/entrypoint.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/vulnerability/rules_schema.json +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/vulnerability/run.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/logger.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/sast/__init__.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/sast/decision.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/sast/sastbox.py +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/scripts/shell_completer/flow_bash_completer.sh +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/scripts/shell_completer/flow_fish_completer.fish +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/scripts/shell_completer/flow_zsh_completer.sh +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/setup.cfg +0 -0
- {conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/setup.py +0 -0
|
@@ -172,26 +172,31 @@ def perform_deploy(context, flow_context, prepared_context):
|
|
|
172
172
|
try:
|
|
173
173
|
branch_name = git_adapter.get_branch_name()
|
|
174
174
|
except Exception:
|
|
175
|
-
LOGGER.warning("HEAD is detached. Checking for
|
|
175
|
+
LOGGER.warning("HEAD is detached. Checking for latest branch ...")
|
|
176
176
|
|
|
177
177
|
result = subprocess.run(
|
|
178
|
-
["git", "
|
|
178
|
+
["git", "for-each-ref", "--sort=-creatordate", "--format=%(refname:short)", "refs/heads/"],
|
|
179
179
|
cwd=repository_dir,
|
|
180
180
|
stdout=subprocess.PIPE,
|
|
181
181
|
stderr=subprocess.PIPE,
|
|
182
182
|
check=True
|
|
183
183
|
)
|
|
184
|
+
|
|
184
185
|
branches = result.stdout.decode().splitlines()
|
|
185
|
-
branches = [branch.strip() for branch in branches]
|
|
186
186
|
|
|
187
|
-
if
|
|
188
|
-
branch_name =
|
|
189
|
-
elif "master" in branches:
|
|
190
|
-
branch_name = "master"
|
|
187
|
+
if branches:
|
|
188
|
+
branch_name = branches[0]
|
|
191
189
|
else:
|
|
192
|
-
LOGGER.warning("Failed to find a branch
|
|
190
|
+
LOGGER.warning("Failed to find a branch.")
|
|
193
191
|
branch_name = "not_found"
|
|
194
192
|
|
|
193
|
+
log_and_notify_ast_event(
|
|
194
|
+
flow_context=flow_context,
|
|
195
|
+
company_id=prepared_context.params['company_id'],
|
|
196
|
+
asset_id=prepared_context.params['asset_id'],
|
|
197
|
+
ast_log=f"Branch: {branch_name}, git folder zipped: {zipped_file}",
|
|
198
|
+
)
|
|
199
|
+
|
|
195
200
|
response = conviso_api.deploys.create_deploy(
|
|
196
201
|
asset_id=prepared_context.params['asset_id'],
|
|
197
202
|
previous_commit=created_deploy['previous_commit'],
|
|
@@ -201,6 +206,13 @@ def perform_deploy(context, flow_context, prepared_context):
|
|
|
201
206
|
api_key=api_key
|
|
202
207
|
)
|
|
203
208
|
|
|
209
|
+
log_and_notify_ast_event(
|
|
210
|
+
flow_context=flow_context,
|
|
211
|
+
company_id=prepared_context.params['company_id'],
|
|
212
|
+
asset_id=prepared_context.params['asset_id'],
|
|
213
|
+
ast_log=f"Response: {response}",
|
|
214
|
+
)
|
|
215
|
+
|
|
204
216
|
response_deploy_id = response['createDeploy']['deploy']['id']
|
|
205
217
|
deploy_id = {"deploy_id": response_deploy_id}
|
|
206
218
|
created_deploy.update(deploy_id)
|
|
@@ -4,6 +4,7 @@ import json
|
|
|
4
4
|
import subprocess
|
|
5
5
|
import shutil
|
|
6
6
|
import os
|
|
7
|
+
import datetime
|
|
7
8
|
from convisoappsec.flowcli import help_option
|
|
8
9
|
from convisoappsec.flowcli.context import pass_flow_context
|
|
9
10
|
from convisoappsec.logger import log_and_notify_ast_event
|
|
@@ -14,6 +15,8 @@ from convisoappsec.flowcli.common import (
|
|
|
14
15
|
project_code_option,
|
|
15
16
|
)
|
|
16
17
|
|
|
18
|
+
DEBUG_MODE = False
|
|
19
|
+
|
|
17
20
|
|
|
18
21
|
@click.command()
|
|
19
22
|
@project_code_option(
|
|
@@ -21,6 +24,11 @@ from convisoappsec.flowcli.common import (
|
|
|
21
24
|
required=False
|
|
22
25
|
)
|
|
23
26
|
@asset_id_option(required=False)
|
|
27
|
+
@click.option(
|
|
28
|
+
'--debug',
|
|
29
|
+
is_flag=True,
|
|
30
|
+
help='Enable debug mode.'
|
|
31
|
+
)
|
|
24
32
|
@click.option(
|
|
25
33
|
'-r',
|
|
26
34
|
'--repository-dir',
|
|
@@ -67,13 +75,21 @@ from convisoappsec.flowcli.common import (
|
|
|
67
75
|
@pass_flow_context
|
|
68
76
|
@click.pass_context
|
|
69
77
|
def run(
|
|
70
|
-
context, flow_context, project_code, asset_id, company_id, repository_dir,
|
|
78
|
+
context, flow_context, project_code, asset_id, debug, company_id, repository_dir,
|
|
79
|
+
send_to_flow, asset_name, vulnerability_auto_close, image_name,
|
|
71
80
|
|
|
72
81
|
):
|
|
73
82
|
""" Run command for container vulnerability scan focused on OS vulnerabilities """
|
|
83
|
+
global DEBUG_MODE
|
|
84
|
+
DEBUG_MODE = debug
|
|
85
|
+
start_time = datetime.datetime.now()
|
|
86
|
+
|
|
74
87
|
if send_to_flow:
|
|
75
88
|
prepared_context = RequirementsVerifier.prepare_context(clone(context))
|
|
76
89
|
|
|
90
|
+
if debug:
|
|
91
|
+
debug_message(f"Context after being prepared: {prepared_context.params}")
|
|
92
|
+
|
|
77
93
|
params_to_copy = [
|
|
78
94
|
'asset_id', 'send_to_flow', 'asset_name', 'vulnerability_auto_close', 'project_code', 'repository_dir',
|
|
79
95
|
'company_id'
|
|
@@ -87,32 +103,59 @@ def run(
|
|
|
87
103
|
asset_id = context.params['asset_id']
|
|
88
104
|
company_id = context.params['company_id']
|
|
89
105
|
else:
|
|
106
|
+
# this just verify if the api key is valid.
|
|
90
107
|
RequirementsVerifier.list_assets(company_id=company_id, asset_name='example', scan_type='SAST')
|
|
91
108
|
|
|
109
|
+
if debug:
|
|
110
|
+
debug_message("User validated!")
|
|
111
|
+
|
|
92
112
|
if command_exists('trivy'):
|
|
113
|
+
if debug:
|
|
114
|
+
debug_message("Trivy already installed.")
|
|
115
|
+
|
|
93
116
|
scan_command = f"trivy image --pkg-types os --format json --output result.json {image_name}"
|
|
94
117
|
else:
|
|
118
|
+
if debug:
|
|
119
|
+
debug_message("Installing trivy ...")
|
|
120
|
+
|
|
95
121
|
subprocess.run(
|
|
96
|
-
"curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b
|
|
122
|
+
"curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b conviso/ v0.57.1",
|
|
97
123
|
shell=True,
|
|
98
124
|
stdout=subprocess.DEVNULL,
|
|
99
125
|
stderr=subprocess.DEVNULL
|
|
100
126
|
)
|
|
101
|
-
|
|
127
|
+
|
|
128
|
+
if debug:
|
|
129
|
+
debug_message("Trivy has been installed successfully!")
|
|
130
|
+
|
|
131
|
+
scan_command = [f"./conviso/trivy image --pkg-types os --format json --output result.json {image_name}"]
|
|
102
132
|
|
|
103
133
|
try:
|
|
104
134
|
log_func(f"🔧 Scanning image {image_name} ...")
|
|
135
|
+
|
|
136
|
+
if debug:
|
|
137
|
+
debug_message(f"Running the following command: {scan_command}")
|
|
138
|
+
|
|
105
139
|
run_command(scan_command)
|
|
106
140
|
log_func("✅ Scan completed successfully.")
|
|
107
141
|
|
|
108
|
-
directory = '
|
|
142
|
+
directory = 'conviso/'
|
|
109
143
|
if os.path.isdir(directory):
|
|
144
|
+
if debug:
|
|
145
|
+
debug_message(f"Removing the trivy installation dir, {directory}")
|
|
110
146
|
shutil.rmtree(directory)
|
|
111
147
|
|
|
112
148
|
if send_to_flow:
|
|
113
149
|
send_to_conviso_plataform(flow_context, asset_id, company_id)
|
|
114
150
|
else:
|
|
115
151
|
output_results()
|
|
152
|
+
|
|
153
|
+
end_time = datetime.datetime.now()
|
|
154
|
+
|
|
155
|
+
if debug:
|
|
156
|
+
execution_time = end_time - start_time
|
|
157
|
+
debug_message(f"Total execution time: {execution_time.total_seconds():.2f} seconds.")
|
|
158
|
+
|
|
116
159
|
except Exception as error:
|
|
117
160
|
log_func(f"❌ Scan failed: {error}")
|
|
118
161
|
|
|
@@ -151,14 +194,7 @@ def send_to_conviso_plataform(flow_context, asset_id, company_id):
|
|
|
151
194
|
result_file = "result.json"
|
|
152
195
|
|
|
153
196
|
try:
|
|
154
|
-
|
|
155
|
-
scan_results = json.load(file)
|
|
156
|
-
|
|
157
|
-
results = scan_results.get("Results", [])
|
|
158
|
-
if results and isinstance(results, list) and len(results) > 0:
|
|
159
|
-
vulnerabilities = results[0].get("Vulnerabilities", [])
|
|
160
|
-
else:
|
|
161
|
-
vulnerabilities = []
|
|
197
|
+
vulnerabilities = extract_vulnerabilities(result_file)
|
|
162
198
|
|
|
163
199
|
if vulnerabilities:
|
|
164
200
|
log_func("🔍 Sending vulnerabilities to conviso platform.")
|
|
@@ -198,14 +234,7 @@ def output_results():
|
|
|
198
234
|
result_file = "result.json"
|
|
199
235
|
|
|
200
236
|
try:
|
|
201
|
-
|
|
202
|
-
scan_results = json.load(file)
|
|
203
|
-
|
|
204
|
-
results = scan_results.get("Results", [])
|
|
205
|
-
if results and isinstance(results, list) and len(results) > 0:
|
|
206
|
-
vulnerabilities = results[0].get("Vulnerabilities", [])
|
|
207
|
-
else:
|
|
208
|
-
vulnerabilities = []
|
|
237
|
+
vulnerabilities = extract_vulnerabilities(result_file)
|
|
209
238
|
|
|
210
239
|
if vulnerabilities:
|
|
211
240
|
log_func(f"🔍 Found: {len(vulnerabilities)} vulnerabilities!")
|
|
@@ -227,6 +256,17 @@ def command_exists(command):
|
|
|
227
256
|
"""
|
|
228
257
|
return shutil.which(command) is not None
|
|
229
258
|
|
|
259
|
+
def extract_vulnerabilities(result_file):
|
|
260
|
+
"""Reads a JSON scan result file and extracts vulnerabilities."""
|
|
261
|
+
with open(result_file, 'r') as file:
|
|
262
|
+
scan_results = json.load(file)
|
|
263
|
+
|
|
264
|
+
results = scan_results.get("Results", [])
|
|
265
|
+
if results and isinstance(results, list) and len(results) > 0:
|
|
266
|
+
return results[0].get("Vulnerabilities", [])
|
|
267
|
+
|
|
268
|
+
return []
|
|
269
|
+
|
|
230
270
|
|
|
231
271
|
def log_func(msg, new_line=True):
|
|
232
272
|
"""
|
|
@@ -244,3 +284,22 @@ def log_func(msg, new_line=True):
|
|
|
244
284
|
str: The output of the message.
|
|
245
285
|
"""
|
|
246
286
|
click.echo(click.style(msg), nl=new_line, err=True)
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
def debug_message(msg, new_line=True):
|
|
290
|
+
"""
|
|
291
|
+
If debug mode is enabled, this function should be
|
|
292
|
+
used for all debug messages and the message will be styled in orange.
|
|
293
|
+
Otherwise, it uses the default styling.
|
|
294
|
+
|
|
295
|
+
Args:
|
|
296
|
+
msg (str): The message to log.
|
|
297
|
+
new_line (bool, optional): Whether to append a newline at the end of the message.
|
|
298
|
+
Defaults to True.
|
|
299
|
+
|
|
300
|
+
Returns:
|
|
301
|
+
str: The output of the message.
|
|
302
|
+
"""
|
|
303
|
+
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
304
|
+
style = {"fg": "bright_yellow"} if DEBUG_MODE else {}
|
|
305
|
+
click.echo(click.style(f"🪲 [{timestamp}] DEBUG: {msg}", **style), nl=new_line, err=True)
|
|
@@ -147,17 +147,17 @@ def generate(context, flow_context, project_code, asset_id, company_id, reposito
|
|
|
147
147
|
command = [f"syft scan {repository_dir} -o cyclonedx-json={file_name}"]
|
|
148
148
|
else:
|
|
149
149
|
subprocess.run(
|
|
150
|
-
"curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh",
|
|
150
|
+
"curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b conviso/",
|
|
151
151
|
shell=True,
|
|
152
152
|
stdout=subprocess.DEVNULL,
|
|
153
153
|
stderr=subprocess.DEVNULL
|
|
154
154
|
)
|
|
155
|
-
command = [f"./
|
|
155
|
+
command = [f"./conviso/syft scan {repository_dir} --exclude ./conviso/* -o cyclonedx-json={file_name}"]
|
|
156
156
|
|
|
157
157
|
# Run SBOM generation command
|
|
158
158
|
subprocess.run(command, shell=True, check=True, capture_output=True)
|
|
159
159
|
|
|
160
|
-
directory = '
|
|
160
|
+
directory = 'conviso/'
|
|
161
161
|
if os.path.isdir(directory):
|
|
162
162
|
shutil.rmtree(directory)
|
|
163
163
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '2.3.0-dev.0'
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '2.2.27-rc.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
|
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/common/graphql/error_handlers.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.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/beta/__init__.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/v1/__init__.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/v1/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/v1/models/asset.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/v1/models/issues.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/graphql_api/v1/models/project.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/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.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/source_code_scanner/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/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.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/util/source_code_compressor.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flow/version_searchers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/companies/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/container/__init__.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/container/entrypoint.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/create/__init__.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/create/context.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/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
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/deploy/create/with_/values.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/findings/create/__init__.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/findings/create/entrypoint.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/findings/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
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/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
|
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/vulnerability/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/convisoappsec/flowcli/vulnerability/entrypoint.py
RENAMED
|
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.27rc0 → conviso-cli-2.3.0.dev0}/scripts/shell_completer/flow_bash_completer.sh
RENAMED
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/scripts/shell_completer/flow_fish_completer.fish
RENAMED
|
File without changes
|
{conviso-cli-2.2.27rc0 → conviso-cli-2.3.0.dev0}/scripts/shell_completer/flow_zsh_completer.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|