conviso-cli 2.2.1__tar.gz → 2.2.2.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.1 → conviso-cli-2.2.2.dev0}/PKG-INFO +1 -1
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/conviso_cli.egg-info/PKG-INFO +1 -1
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/v1/client.py +5 -1
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/v1/resources_api.py +58 -1
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/v1/schemas/mutations/__init__.py +18 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/sbom/generate.py +47 -68
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/sca/run.py +8 -1
- conviso-cli-2.2.2.dev0/convisoappsec/version.py +1 -0
- conviso-cli-2.2.1/convisoappsec/version.py +0 -1
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/README.md +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/conviso_cli.egg-info/SOURCES.txt +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/conviso_cli.egg-info/dependency_links.txt +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/conviso_cli.egg-info/entry_points.txt +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/conviso_cli.egg-info/requires.txt +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/conviso_cli.egg-info/top_level.txt +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/common/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/common/box.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/common/docker.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/common/exceptions.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/common/git_data_parser.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/common/graphql/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/common/graphql/error_handlers.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/common/graphql/errors.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/common/graphql/low_client.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/common/strings.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/api.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/beta/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/beta/client.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/beta/models/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/beta/models/issues/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/beta/models/issues/iac.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/beta/models/issues/normalize.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/beta/models/issues/sast.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/beta/models/issues/sca.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/beta/resources_api.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/beta/schemas/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/beta/schemas/mutations/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/beta/schemas/resolvers/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/v1/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/v1/models/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/v1/models/asset.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/v1/models/issues.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/v1/models/project.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/v1/schemas/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/v1/schemas/resolvers/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/source_code_scanner/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/source_code_scanner/exceptions.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/source_code_scanner/scc.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/source_code_scanner/source_code_scanner.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/util/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/util/ci_provider.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/util/metrics.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/util/source_code_compressor.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/version_control_system_adapter.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/version_searchers/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/version_searchers/sorted_by_versioning_style.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/version_searchers/timebased_version_seacher.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/version_searchers/version_searcher_result.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/versioning_style/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/versioning_style/semantic_versioning.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/__main__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/assets/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/assets/create.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/assets/entrypoint.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/assets/ls.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/ast/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/ast/entrypoint.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/common.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/companies/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/companies/ls.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/context.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/create/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/create/context.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/create/entrypoint.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/create/with_/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/create/with_/entrypoint.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/context.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/entrypoint.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/entrypoint.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/time_.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/versioning_style.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/create/with_/values.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/entrypoint.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/ls.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/show.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/entrypoint.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/findings/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/findings/create/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/findings/create/entrypoint.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/findings/create/with_/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/findings/create/with_/entrypoint.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/findings/create/with_/version_tracker.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/findings/entrypoint.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/findings/import_sarif/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/findings/import_sarif/entrypoint.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/help_option.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/iac/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/iac/entrypoint.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/iac/run.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/projects/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/projects/ls.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/requirements_verifier.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/sast/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/sast/entrypoint.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/sast/run.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/sbom/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/sbom/entrypoint.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/sca/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/sca/entrypoint.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/vulnerability/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/vulnerability/assert_security_rules.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/vulnerability/entrypoint.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/vulnerability/rules_schema.json +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/vulnerability/run.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/logger.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/sast/__init__.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/sast/decision.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/sast/sastbox.py +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/scripts/shell_completer/flow_bash_completer.sh +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/scripts/shell_completer/flow_fish_completer.fish +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/scripts/shell_completer/flow_zsh_completer.sh +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/setup.cfg +0 -0
- {conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/setup.py +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from convisoappsec.common.graphql.low_client import GraphQLClient
|
|
2
|
-
from convisoappsec.flow.graphql_api.v1.resources_api import AssetsAPI, ProjectsApi, CompaniesApi, IssuesApi, DeploysApi
|
|
2
|
+
from convisoappsec.flow.graphql_api.v1.resources_api import AssetsAPI, ProjectsApi, CompaniesApi, IssuesApi, DeploysApi, SbomApi
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
class ConvisoGraphQLClient():
|
|
@@ -31,3 +31,7 @@ class ConvisoGraphQLClient():
|
|
|
31
31
|
@property
|
|
32
32
|
def deploys(self):
|
|
33
33
|
return DeploysApi(self.__low_client)
|
|
34
|
+
|
|
35
|
+
@property
|
|
36
|
+
def sbom(self):
|
|
37
|
+
return SbomApi(self.__low_client)
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/v1/resources_api.py
RENAMED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from urllib.parse import urlparse
|
|
2
2
|
|
|
3
3
|
import jmespath
|
|
4
|
-
|
|
4
|
+
import json
|
|
5
|
+
import requests
|
|
5
6
|
from convisoappsec.flow.graphql_api.v1.models.asset import AssetInput
|
|
6
7
|
from convisoappsec.flow.graphql_api.v1.models.project import CreateProjectInput, UpdateProjectInput
|
|
7
8
|
from convisoappsec.flow.graphql_api.v1.schemas import mutations, resolvers
|
|
@@ -266,3 +267,59 @@ class DeploysApi(object):
|
|
|
266
267
|
)
|
|
267
268
|
|
|
268
269
|
return deploys
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
class SbomApi(object):
|
|
273
|
+
""" Class for sbom file resources """
|
|
274
|
+
|
|
275
|
+
def __init__(self, conviso_graphql_client):
|
|
276
|
+
self._conviso_graphql_client = conviso_graphql_client
|
|
277
|
+
|
|
278
|
+
def send_sbom_file(self, company_id, asset_id, file_path, api_key):
|
|
279
|
+
""" Send SBOM file to Conviso platform """
|
|
280
|
+
|
|
281
|
+
url = self._conviso_graphql_client.url
|
|
282
|
+
|
|
283
|
+
operations = {
|
|
284
|
+
"query": mutations.IMPORT_SBOM,
|
|
285
|
+
"variables": {
|
|
286
|
+
"companyId": company_id,
|
|
287
|
+
"assetId": asset_id,
|
|
288
|
+
"file": None
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
file_map = {
|
|
293
|
+
"0": ["variables.file"]
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
with open(file_path, 'rb') as sbom_file:
|
|
297
|
+
files = {
|
|
298
|
+
'operations': (None, json.dumps(operations), 'application/json'),
|
|
299
|
+
'map': (None, json.dumps(file_map), 'application/json'),
|
|
300
|
+
'0': (file_path, sbom_file, 'application/octet-stream')
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
# TODO adding default headers and conviso ast version
|
|
304
|
+
headers = {
|
|
305
|
+
'x-api-key': f'{api_key}',
|
|
306
|
+
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
response = requests.post(url, files=files, headers=headers)
|
|
310
|
+
|
|
311
|
+
response.raise_for_status()
|
|
312
|
+
json_response = response.json()
|
|
313
|
+
|
|
314
|
+
self._handle_graphql_errors(json_response)
|
|
315
|
+
|
|
316
|
+
return json_response.get('data')
|
|
317
|
+
|
|
318
|
+
def _handle_graphql_errors(self, json_response):
|
|
319
|
+
""" Handle GraphQL errors """
|
|
320
|
+
if 'errors' in json_response:
|
|
321
|
+
errors = json_response['errors']
|
|
322
|
+
for error in errors:
|
|
323
|
+
print(f"GraphQL Error: {error.get('message')}")
|
|
324
|
+
raise Exception("GraphQL request failed with errors.")
|
|
325
|
+
|
|
@@ -93,3 +93,21 @@ mutation (
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
"""
|
|
96
|
+
|
|
97
|
+
IMPORT_SBOM = """
|
|
98
|
+
mutation (
|
|
99
|
+
$file: Upload!,
|
|
100
|
+
$assetId: ID!,
|
|
101
|
+
$companyId: ID!
|
|
102
|
+
) {
|
|
103
|
+
importSbom(
|
|
104
|
+
input: {
|
|
105
|
+
file: $file,
|
|
106
|
+
assetId: $assetId,
|
|
107
|
+
companyId: $companyId
|
|
108
|
+
}
|
|
109
|
+
) {
|
|
110
|
+
success
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
"""
|
|
@@ -1,35 +1,24 @@
|
|
|
1
1
|
import click
|
|
2
2
|
import subprocess
|
|
3
|
-
import json
|
|
4
3
|
import tempfile
|
|
5
4
|
import os
|
|
6
5
|
from convisoappsec.flowcli.context import pass_flow_context
|
|
7
6
|
from datetime import datetime
|
|
8
7
|
from convisoappsec.flowcli.requirements_verifier import RequirementsVerifier
|
|
9
8
|
from convisoappsec.flowcli import help_option
|
|
10
|
-
from convisoappsec.flowcli.common import (asset_id_option, project_code_option
|
|
11
|
-
from convisoappsec.sast.sastbox import SASTBox
|
|
9
|
+
from convisoappsec.flowcli.common import (asset_id_option, project_code_option)
|
|
12
10
|
|
|
13
11
|
|
|
14
12
|
@click.command()
|
|
15
13
|
@project_code_option(required=False)
|
|
16
14
|
@asset_id_option(required=False)
|
|
17
|
-
@
|
|
18
|
-
"-
|
|
19
|
-
|
|
20
|
-
required=False,
|
|
21
|
-
help="If no value is set so the empty tree hash commit is used.",
|
|
22
|
-
)
|
|
23
|
-
@click.option(
|
|
24
|
-
"-e",
|
|
25
|
-
"--end-commit",
|
|
26
|
-
required=False,
|
|
27
|
-
help="""If no value is set so the HEAD commit
|
|
28
|
-
from the current branch is used""",
|
|
15
|
+
@project_code_option(
|
|
16
|
+
help="Not required when --no-send-to-flow option is set",
|
|
17
|
+
required=False
|
|
29
18
|
)
|
|
30
19
|
@click.option(
|
|
31
|
-
|
|
32
|
-
|
|
20
|
+
'-r',
|
|
21
|
+
'--repository-dir',
|
|
33
22
|
default=".",
|
|
34
23
|
show_default=True,
|
|
35
24
|
type=click.Path(
|
|
@@ -39,65 +28,46 @@ from convisoappsec.sast.sastbox import SASTBox
|
|
|
39
28
|
required=False,
|
|
40
29
|
help="The source code repository directory.",
|
|
41
30
|
)
|
|
42
|
-
@click.option(
|
|
43
|
-
"--fail-on-severity-threshold",
|
|
44
|
-
required=False,
|
|
45
|
-
help="If the threshold of the informed severity and higher has reach, then the command will fail after send the results to AppSec Flow.\n \
|
|
46
|
-
The severity levels are: UNDEFINED, INFO, LOW, MEDIUM, HIGH, CRITICAL.",
|
|
47
|
-
type=click.Tuple([str, int]),
|
|
48
|
-
default=(None, None),
|
|
49
|
-
)
|
|
50
|
-
@click.option(
|
|
51
|
-
"--fail-on-threshold",
|
|
52
|
-
required=False,
|
|
53
|
-
help="If the threshold has reach then the command will fail after send the result to AppSec Flow",
|
|
54
|
-
type=int,
|
|
55
|
-
default=False,
|
|
56
|
-
)
|
|
57
31
|
@click.option(
|
|
58
32
|
"--send-to-flow/--no-send-to-flow",
|
|
59
33
|
default=True,
|
|
60
34
|
show_default=True,
|
|
61
35
|
required=False,
|
|
62
|
-
hidden=True,
|
|
63
36
|
help="""Enable or disable the ability of send analysis result
|
|
64
37
|
reports to flow. When --send-to-flow option is set the --project-code
|
|
65
38
|
option is required""",
|
|
39
|
+
hidden=True
|
|
66
40
|
)
|
|
67
41
|
@click.option(
|
|
68
|
-
"--
|
|
69
|
-
default=None,
|
|
70
|
-
required=False,
|
|
42
|
+
"--custom-sca-tags",
|
|
71
43
|
hidden=True,
|
|
72
|
-
envvar=("CONVISO_DEPLOY_ID", "FLOW_DEPLOY_ID")
|
|
73
|
-
)
|
|
74
|
-
@click.option(
|
|
75
|
-
"--sastbox-registry",
|
|
76
|
-
default="",
|
|
77
44
|
required=False,
|
|
78
|
-
|
|
79
|
-
|
|
45
|
+
multiple=True,
|
|
46
|
+
type=(str, str),
|
|
47
|
+
help="""It should be passed as <repository_name> <image_tag>. It accepts multiple values"""
|
|
80
48
|
)
|
|
81
49
|
@click.option(
|
|
82
|
-
"--
|
|
83
|
-
default="",
|
|
84
|
-
required=False,
|
|
50
|
+
"--scanner-timeout",
|
|
85
51
|
hidden=True,
|
|
86
|
-
|
|
52
|
+
required=False,
|
|
53
|
+
default=7200,
|
|
54
|
+
type=int,
|
|
55
|
+
help="Set timeout for each scanner"
|
|
87
56
|
)
|
|
88
57
|
@click.option(
|
|
89
|
-
"--
|
|
90
|
-
default=SASTBox.DEFAULT_TAG,
|
|
91
|
-
required=False,
|
|
58
|
+
"--parallel-workers",
|
|
92
59
|
hidden=True,
|
|
93
|
-
|
|
60
|
+
required=False,
|
|
61
|
+
default=2,
|
|
62
|
+
type=int,
|
|
63
|
+
help="Set max parallel workers"
|
|
94
64
|
)
|
|
95
65
|
@click.option(
|
|
96
|
-
"--
|
|
97
|
-
default=
|
|
66
|
+
"--deploy-id",
|
|
67
|
+
default=None,
|
|
98
68
|
required=False,
|
|
99
69
|
hidden=True,
|
|
100
|
-
envvar=("
|
|
70
|
+
envvar=("CONVISO_DEPLOY_ID", "FLOW_DEPLOY_ID")
|
|
101
71
|
)
|
|
102
72
|
@click.option(
|
|
103
73
|
'--experimental',
|
|
@@ -135,10 +105,9 @@ from convisoappsec.sast.sastbox import SASTBox
|
|
|
135
105
|
@help_option
|
|
136
106
|
@pass_flow_context
|
|
137
107
|
@click.pass_context
|
|
138
|
-
def generate(context, flow_context, project_code, asset_id, company_id,
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
from_ast):
|
|
108
|
+
def generate(context, flow_context, project_code, asset_id, company_id, repository_dir, send_to_flow, custom_sca_tags,
|
|
109
|
+
scanner_timeout, parallel_workers, deploy_id, experimental, asset_name, vulnerability_auto_close, from_ast):
|
|
110
|
+
|
|
142
111
|
context.params['company_id'] = context.params.get('company_id') or company_id
|
|
143
112
|
|
|
144
113
|
if not context.params['company_id']:
|
|
@@ -149,10 +118,9 @@ def generate(context, flow_context, project_code, asset_id, company_id, end_comm
|
|
|
149
118
|
prepared_context = RequirementsVerifier.prepare_context(context)
|
|
150
119
|
|
|
151
120
|
params_to_copy = [
|
|
152
|
-
'project_code', 'asset_id', '
|
|
153
|
-
'
|
|
154
|
-
'
|
|
155
|
-
'experimental', 'asset_name', 'vulnerability_auto_close', 'company_id'
|
|
121
|
+
'project_code', 'asset_id', 'repository_dir', 'send_to_flow',
|
|
122
|
+
'deploy_id', 'custom_sca_tags', 'scanner_timeout', 'parallel_workers',
|
|
123
|
+
'experimental', 'asset_name', 'vulnerability_auto_close'
|
|
156
124
|
]
|
|
157
125
|
|
|
158
126
|
for param_name in params_to_copy:
|
|
@@ -169,7 +137,7 @@ def generate(context, flow_context, project_code, asset_id, company_id, end_comm
|
|
|
169
137
|
))
|
|
170
138
|
|
|
171
139
|
command = [
|
|
172
|
-
f"syft packages {repository_dir} -o
|
|
140
|
+
f"syft packages {repository_dir} -o cyclonedx-json={file_name}"
|
|
173
141
|
]
|
|
174
142
|
|
|
175
143
|
try:
|
|
@@ -179,10 +147,21 @@ def generate(context, flow_context, project_code, asset_id, company_id, end_comm
|
|
|
179
147
|
log_func("We have a problem when try to generate the sbom file ...{error}".format(error=error), color='red')
|
|
180
148
|
return
|
|
181
149
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
150
|
+
if asset_id is None:
|
|
151
|
+
asset_id = context.params['asset_id']
|
|
152
|
+
|
|
153
|
+
send_sbom_file_to_csc(company_id=company_id, asset_id=asset_id, file=file_name)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def log_func(msg, new_line=True):
|
|
157
|
+
click.echo(click.style(msg), nl=new_line, err=True)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
@pass_flow_context
|
|
161
|
+
def send_sbom_file_to_csc(flow_context, company_id, asset_id, file):
|
|
162
|
+
conviso_api = flow_context.create_conviso_graphql_client()
|
|
163
|
+
api_key = flow_context.key
|
|
185
164
|
|
|
165
|
+
log_func(f"Sending sbom to conviso platform ...")
|
|
186
166
|
|
|
187
|
-
|
|
188
|
-
click.echo(click.style(msg, bold=True, fg=color), nl=new_line, err=True)
|
|
167
|
+
return conviso_api.sbom.send_sbom_file(company_id=company_id, asset_id=asset_id, file_path=file, api_key=api_key)
|
|
@@ -16,6 +16,7 @@ from convisoappsec.logger import LOGGER
|
|
|
16
16
|
from convisoappsec.common.graphql.errors import ReponseError
|
|
17
17
|
from convisoappsec.flowcli.requirements_verifier import RequirementsVerifier
|
|
18
18
|
from copy import deepcopy as clone
|
|
19
|
+
from convisoappsec.flowcli.sbom import sbom
|
|
19
20
|
|
|
20
21
|
click_log.basic_config(LOGGER)
|
|
21
22
|
|
|
@@ -155,6 +156,7 @@ def run(
|
|
|
155
156
|
|
|
156
157
|
perform_command(
|
|
157
158
|
flow_context,
|
|
159
|
+
context,
|
|
158
160
|
context.params['project_code'],
|
|
159
161
|
context.params['asset_id'],
|
|
160
162
|
context.params['repository_dir'],
|
|
@@ -276,7 +278,7 @@ def get_relative_path(path):
|
|
|
276
278
|
|
|
277
279
|
|
|
278
280
|
def perform_command(
|
|
279
|
-
flow_context, project_code, asset_id, repository_dir, send_to_flow, custom_sca_tags, scanner_timeout,
|
|
281
|
+
flow_context, context, project_code, asset_id, repository_dir, send_to_flow, custom_sca_tags, scanner_timeout,
|
|
280
282
|
deploy_id, experimental
|
|
281
283
|
):
|
|
282
284
|
if send_to_flow and not experimental and not project_code:
|
|
@@ -361,6 +363,11 @@ def perform_command(
|
|
|
361
363
|
# TODO add CI Decision block code
|
|
362
364
|
LOGGER.info('\U00002705 SCA Scan Finished')
|
|
363
365
|
|
|
366
|
+
# Generate SBOM when execute a sca only scan.
|
|
367
|
+
sbom_generate = sbom.commands.get('generate')
|
|
368
|
+
specific_param = { "from_ast": True }
|
|
369
|
+
context.params.update(specific_param)
|
|
370
|
+
sbom_generate.invoke(context)
|
|
364
371
|
except Exception as e:
|
|
365
372
|
on_http_error(e)
|
|
366
373
|
raise click.ClickException(str(e)) from e
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '2.2.2-dev.0'
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '2.2.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
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/beta/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/beta/models/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/beta/resources_api.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/beta/schemas/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/v1/models/__init__.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/v1/models/asset.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/v1/models/issues.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/v1/models/project.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/graphql_api/v1/schemas/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/source_code_scanner/__init__.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/source_code_scanner/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/util/source_code_compressor.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/version_control_system_adapter.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flow/version_searchers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/create/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/create/entrypoint.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/deploy/create/with_/__init__.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/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-cli-2.2.1 → conviso-cli-2.2.2.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.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/findings/create/__init__.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/findings/create/entrypoint.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/findings/create/with_/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/findings/import_sarif/__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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/vulnerability/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/convisoappsec/flowcli/vulnerability/entrypoint.py
RENAMED
|
File without changes
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/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
|
{conviso-cli-2.2.1 → conviso-cli-2.2.2.dev0}/scripts/shell_completer/flow_fish_completer.fish
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|