conviso-ast 3.0.0__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.0/PKG-INFO +37 -0
- conviso_ast-3.0.0/README.md +8 -0
- conviso_ast-3.0.0/conviso_ast.egg-info/PKG-INFO +37 -0
- conviso_ast-3.0.0/conviso_ast.egg-info/SOURCES.txt +131 -0
- conviso_ast-3.0.0/conviso_ast.egg-info/dependency_links.txt +1 -0
- conviso_ast-3.0.0/conviso_ast.egg-info/entry_points.txt +3 -0
- conviso_ast-3.0.0/conviso_ast.egg-info/requires.txt +13 -0
- conviso_ast-3.0.0/conviso_ast.egg-info/top_level.txt +1 -0
- conviso_ast-3.0.0/convisoappsec/__init__.py +0 -0
- conviso_ast-3.0.0/convisoappsec/common/__init__.py +5 -0
- conviso_ast-3.0.0/convisoappsec/common/box.py +251 -0
- conviso_ast-3.0.0/convisoappsec/common/cleaner.py +78 -0
- conviso_ast-3.0.0/convisoappsec/common/docker.py +399 -0
- conviso_ast-3.0.0/convisoappsec/common/exceptions.py +8 -0
- conviso_ast-3.0.0/convisoappsec/common/git_data_parser.py +76 -0
- conviso_ast-3.0.0/convisoappsec/common/graphql/__init__.py +0 -0
- conviso_ast-3.0.0/convisoappsec/common/graphql/error_handlers.py +75 -0
- conviso_ast-3.0.0/convisoappsec/common/graphql/errors.py +16 -0
- conviso_ast-3.0.0/convisoappsec/common/graphql/low_client.py +51 -0
- conviso_ast-3.0.0/convisoappsec/common/retry_handler.py +40 -0
- conviso_ast-3.0.0/convisoappsec/common/strings.py +8 -0
- conviso_ast-3.0.0/convisoappsec/flow/__init__.py +3 -0
- conviso_ast-3.0.0/convisoappsec/flow/api.py +104 -0
- conviso_ast-3.0.0/convisoappsec/flow/cleaner.py +118 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/__init__.py +0 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/__init__.py +0 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/client.py +18 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/models/__init__.py +0 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/models/issues/__init__.py +0 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/models/issues/container.py +72 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/models/issues/iac.py +6 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/models/issues/normalize.py +13 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/models/issues/sast.py +53 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/models/issues/sca.py +78 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/resources_api.py +142 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/schemas/__init__.py +0 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/schemas/mutations/__init__.py +61 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/schemas/resolvers/__init__.py +0 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/__init__.py +0 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/client.py +46 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/models/__init__.py +0 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/models/asset.py +14 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/models/issues.py +16 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/models/project.py +35 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/resources_api.py +489 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/schemas/__init__.py +0 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/schemas/mutations/__init__.py +212 -0
- conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/schemas/resolvers/__init__.py +180 -0
- conviso_ast-3.0.0/convisoappsec/flow/source_code_scanner/__init__.py +9 -0
- conviso_ast-3.0.0/convisoappsec/flow/source_code_scanner/exceptions.py +2 -0
- conviso_ast-3.0.0/convisoappsec/flow/source_code_scanner/scc.py +68 -0
- conviso_ast-3.0.0/convisoappsec/flow/source_code_scanner/source_code_scanner.py +177 -0
- conviso_ast-3.0.0/convisoappsec/flow/util/__init__.py +7 -0
- conviso_ast-3.0.0/convisoappsec/flow/util/ci_provider.py +99 -0
- conviso_ast-3.0.0/convisoappsec/flow/util/metrics.py +16 -0
- conviso_ast-3.0.0/convisoappsec/flow/util/source_code_compressor.py +22 -0
- conviso_ast-3.0.0/convisoappsec/flow/version_control_system_adapter.py +528 -0
- conviso_ast-3.0.0/convisoappsec/flow/version_searchers/__init__.py +9 -0
- conviso_ast-3.0.0/convisoappsec/flow/version_searchers/sorted_by_versioning_style.py +85 -0
- conviso_ast-3.0.0/convisoappsec/flow/version_searchers/timebased_version_seacher.py +39 -0
- conviso_ast-3.0.0/convisoappsec/flow/version_searchers/version_searcher_result.py +33 -0
- conviso_ast-3.0.0/convisoappsec/flow/versioning_style/__init__.py +0 -0
- conviso_ast-3.0.0/convisoappsec/flow/versioning_style/semantic_versioning.py +44 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/__init__.py +3 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/__main__.py +4 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/assets/__init__.py +4 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/assets/create.py +88 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/assets/entrypoint.py +20 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/assets/ls.py +63 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/ast/__init__.py +3 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/ast/entrypoint.py +427 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/common.py +175 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/companies/__init__.py +0 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/companies/ls.py +25 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/container/__init__.py +3 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/container/entrypoint.py +17 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/container/run.py +306 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/context.py +49 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/deploy/__init__.py +0 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/__init__.py +4 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/context.py +12 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/entrypoint.py +31 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/__init__.py +3 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/entrypoint.py +20 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/tag_tracker/__init__.py +4 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/tag_tracker/context.py +11 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/tag_tracker/entrypoint.py +30 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/__init__.py +4 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/entrypoint.py +21 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/time_.py +84 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/versioning_style.py +115 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/values.py +133 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/entrypoint.py +103 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/environment_checker.py +45 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/findings/__init__.py +4 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/findings/create/__init__.py +4 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/findings/create/entrypoint.py +18 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/findings/create/with_/__init__.py +3 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/findings/create/with_/entrypoint.py +19 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/findings/create/with_/version_tracker.py +93 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/findings/entrypoint.py +19 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/findings/import_sarif/__init__.py +4 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/findings/import_sarif/entrypoint.py +430 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/help_option.py +18 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/iac/__init__.py +3 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/iac/entrypoint.py +17 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/iac/run.py +328 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/requirements_verifier.py +132 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/sast/__init__.py +3 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/sast/entrypoint.py +17 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/sast/run.py +485 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/sbom/__init__.py +3 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/sbom/entrypoint.py +17 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/sbom/generate.py +235 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/sca/__init__.py +3 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/sca/entrypoint.py +17 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/sca/run.py +479 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/vulnerability/__init__.py +3 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/vulnerability/assert_security_rules.py +201 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/vulnerability/container_vulnerability_manager.py +175 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/vulnerability/entrypoint.py +18 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/vulnerability/rules_schema.json +53 -0
- conviso_ast-3.0.0/convisoappsec/flowcli/vulnerability/run.py +487 -0
- conviso_ast-3.0.0/convisoappsec/logger.py +29 -0
- conviso_ast-3.0.0/convisoappsec/sast/__init__.py +0 -0
- conviso_ast-3.0.0/convisoappsec/sast/decision.py +45 -0
- conviso_ast-3.0.0/convisoappsec/sast/sastbox.py +296 -0
- conviso_ast-3.0.0/convisoappsec/version.py +1 -0
- conviso_ast-3.0.0/scripts/shell_completer/flow_bash_completer.sh +21 -0
- conviso_ast-3.0.0/scripts/shell_completer/flow_fish_completer.fish +1 -0
- conviso_ast-3.0.0/scripts/shell_completer/flow_zsh_completer.sh +32 -0
- conviso_ast-3.0.0/setup.cfg +4 -0
- conviso_ast-3.0.0/setup.py +65 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
|
+
Name: conviso-ast
|
|
3
|
+
Version: 3.0.0
|
|
4
|
+
Maintainer: Conviso
|
|
5
|
+
Maintainer-email: development@convisoappsec.com
|
|
6
|
+
Project-URL: Source, https://github.com/convisoappsec/convisocli/
|
|
7
|
+
Requires-Python: >=3.9
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
Requires-Dist: GitPython==3.1.45
|
|
10
|
+
Requires-Dist: click==8.1.8
|
|
11
|
+
Requires-Dist: requests==2.32.5
|
|
12
|
+
Requires-Dist: urllib3==2.4.0
|
|
13
|
+
Requires-Dist: semantic-version==2.10.0
|
|
14
|
+
Requires-Dist: docker==7.1.0
|
|
15
|
+
Requires-Dist: PyYAML==6.0.3
|
|
16
|
+
Requires-Dist: click-log==0.4.0
|
|
17
|
+
Requires-Dist: transitions==0.9.2
|
|
18
|
+
Requires-Dist: jsonschema==4.25.1
|
|
19
|
+
Requires-Dist: giturlparse<=0.12.0
|
|
20
|
+
Requires-Dist: jmespath==1.0.1
|
|
21
|
+
Requires-Dist: setuptools==78.1.0
|
|
22
|
+
Dynamic: description
|
|
23
|
+
Dynamic: description-content-type
|
|
24
|
+
Dynamic: maintainer
|
|
25
|
+
Dynamic: maintainer-email
|
|
26
|
+
Dynamic: project-url
|
|
27
|
+
Dynamic: requires-dist
|
|
28
|
+
Dynamic: requires-python
|
|
29
|
+
|
|
30
|
+
# AST
|
|
31
|
+
|
|
32
|
+
This is a command line tool to execute Conviso AST.
|
|
33
|
+
|
|
34
|
+
# Documentation
|
|
35
|
+
Please visit the [official documentation] for further information.
|
|
36
|
+
|
|
37
|
+
[official documentation]: <https://docs.convisoappsec.com/security-scans/conviso-ast/>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
|
+
Name: conviso-ast
|
|
3
|
+
Version: 3.0.0
|
|
4
|
+
Maintainer: Conviso
|
|
5
|
+
Maintainer-email: development@convisoappsec.com
|
|
6
|
+
Project-URL: Source, https://github.com/convisoappsec/convisocli/
|
|
7
|
+
Requires-Python: >=3.9
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
Requires-Dist: GitPython==3.1.45
|
|
10
|
+
Requires-Dist: click==8.1.8
|
|
11
|
+
Requires-Dist: requests==2.32.5
|
|
12
|
+
Requires-Dist: urllib3==2.4.0
|
|
13
|
+
Requires-Dist: semantic-version==2.10.0
|
|
14
|
+
Requires-Dist: docker==7.1.0
|
|
15
|
+
Requires-Dist: PyYAML==6.0.3
|
|
16
|
+
Requires-Dist: click-log==0.4.0
|
|
17
|
+
Requires-Dist: transitions==0.9.2
|
|
18
|
+
Requires-Dist: jsonschema==4.25.1
|
|
19
|
+
Requires-Dist: giturlparse<=0.12.0
|
|
20
|
+
Requires-Dist: jmespath==1.0.1
|
|
21
|
+
Requires-Dist: setuptools==78.1.0
|
|
22
|
+
Dynamic: description
|
|
23
|
+
Dynamic: description-content-type
|
|
24
|
+
Dynamic: maintainer
|
|
25
|
+
Dynamic: maintainer-email
|
|
26
|
+
Dynamic: project-url
|
|
27
|
+
Dynamic: requires-dist
|
|
28
|
+
Dynamic: requires-python
|
|
29
|
+
|
|
30
|
+
# AST
|
|
31
|
+
|
|
32
|
+
This is a command line tool to execute Conviso AST.
|
|
33
|
+
|
|
34
|
+
# Documentation
|
|
35
|
+
Please visit the [official documentation] for further information.
|
|
36
|
+
|
|
37
|
+
[official documentation]: <https://docs.convisoappsec.com/security-scans/conviso-ast/>
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
README.md
|
|
2
|
+
setup.py
|
|
3
|
+
conviso_ast.egg-info/PKG-INFO
|
|
4
|
+
conviso_ast.egg-info/SOURCES.txt
|
|
5
|
+
conviso_ast.egg-info/dependency_links.txt
|
|
6
|
+
conviso_ast.egg-info/entry_points.txt
|
|
7
|
+
conviso_ast.egg-info/requires.txt
|
|
8
|
+
conviso_ast.egg-info/top_level.txt
|
|
9
|
+
convisoappsec/__init__.py
|
|
10
|
+
convisoappsec/logger.py
|
|
11
|
+
convisoappsec/version.py
|
|
12
|
+
convisoappsec/common/__init__.py
|
|
13
|
+
convisoappsec/common/box.py
|
|
14
|
+
convisoappsec/common/cleaner.py
|
|
15
|
+
convisoappsec/common/docker.py
|
|
16
|
+
convisoappsec/common/exceptions.py
|
|
17
|
+
convisoappsec/common/git_data_parser.py
|
|
18
|
+
convisoappsec/common/retry_handler.py
|
|
19
|
+
convisoappsec/common/strings.py
|
|
20
|
+
convisoappsec/common/graphql/__init__.py
|
|
21
|
+
convisoappsec/common/graphql/error_handlers.py
|
|
22
|
+
convisoappsec/common/graphql/errors.py
|
|
23
|
+
convisoappsec/common/graphql/low_client.py
|
|
24
|
+
convisoappsec/flow/__init__.py
|
|
25
|
+
convisoappsec/flow/api.py
|
|
26
|
+
convisoappsec/flow/cleaner.py
|
|
27
|
+
convisoappsec/flow/version_control_system_adapter.py
|
|
28
|
+
convisoappsec/flow/graphql_api/__init__.py
|
|
29
|
+
convisoappsec/flow/graphql_api/beta/__init__.py
|
|
30
|
+
convisoappsec/flow/graphql_api/beta/client.py
|
|
31
|
+
convisoappsec/flow/graphql_api/beta/resources_api.py
|
|
32
|
+
convisoappsec/flow/graphql_api/beta/models/__init__.py
|
|
33
|
+
convisoappsec/flow/graphql_api/beta/models/issues/__init__.py
|
|
34
|
+
convisoappsec/flow/graphql_api/beta/models/issues/container.py
|
|
35
|
+
convisoappsec/flow/graphql_api/beta/models/issues/iac.py
|
|
36
|
+
convisoappsec/flow/graphql_api/beta/models/issues/normalize.py
|
|
37
|
+
convisoappsec/flow/graphql_api/beta/models/issues/sast.py
|
|
38
|
+
convisoappsec/flow/graphql_api/beta/models/issues/sca.py
|
|
39
|
+
convisoappsec/flow/graphql_api/beta/schemas/__init__.py
|
|
40
|
+
convisoappsec/flow/graphql_api/beta/schemas/mutations/__init__.py
|
|
41
|
+
convisoappsec/flow/graphql_api/beta/schemas/resolvers/__init__.py
|
|
42
|
+
convisoappsec/flow/graphql_api/v1/__init__.py
|
|
43
|
+
convisoappsec/flow/graphql_api/v1/client.py
|
|
44
|
+
convisoappsec/flow/graphql_api/v1/resources_api.py
|
|
45
|
+
convisoappsec/flow/graphql_api/v1/models/__init__.py
|
|
46
|
+
convisoappsec/flow/graphql_api/v1/models/asset.py
|
|
47
|
+
convisoappsec/flow/graphql_api/v1/models/issues.py
|
|
48
|
+
convisoappsec/flow/graphql_api/v1/models/project.py
|
|
49
|
+
convisoappsec/flow/graphql_api/v1/schemas/__init__.py
|
|
50
|
+
convisoappsec/flow/graphql_api/v1/schemas/mutations/__init__.py
|
|
51
|
+
convisoappsec/flow/graphql_api/v1/schemas/resolvers/__init__.py
|
|
52
|
+
convisoappsec/flow/source_code_scanner/__init__.py
|
|
53
|
+
convisoappsec/flow/source_code_scanner/exceptions.py
|
|
54
|
+
convisoappsec/flow/source_code_scanner/scc.py
|
|
55
|
+
convisoappsec/flow/source_code_scanner/source_code_scanner.py
|
|
56
|
+
convisoappsec/flow/util/__init__.py
|
|
57
|
+
convisoappsec/flow/util/ci_provider.py
|
|
58
|
+
convisoappsec/flow/util/metrics.py
|
|
59
|
+
convisoappsec/flow/util/source_code_compressor.py
|
|
60
|
+
convisoappsec/flow/version_searchers/__init__.py
|
|
61
|
+
convisoappsec/flow/version_searchers/sorted_by_versioning_style.py
|
|
62
|
+
convisoappsec/flow/version_searchers/timebased_version_seacher.py
|
|
63
|
+
convisoappsec/flow/version_searchers/version_searcher_result.py
|
|
64
|
+
convisoappsec/flow/versioning_style/__init__.py
|
|
65
|
+
convisoappsec/flow/versioning_style/semantic_versioning.py
|
|
66
|
+
convisoappsec/flowcli/__init__.py
|
|
67
|
+
convisoappsec/flowcli/__main__.py
|
|
68
|
+
convisoappsec/flowcli/common.py
|
|
69
|
+
convisoappsec/flowcli/context.py
|
|
70
|
+
convisoappsec/flowcli/entrypoint.py
|
|
71
|
+
convisoappsec/flowcli/environment_checker.py
|
|
72
|
+
convisoappsec/flowcli/help_option.py
|
|
73
|
+
convisoappsec/flowcli/requirements_verifier.py
|
|
74
|
+
convisoappsec/flowcli/assets/__init__.py
|
|
75
|
+
convisoappsec/flowcli/assets/create.py
|
|
76
|
+
convisoappsec/flowcli/assets/entrypoint.py
|
|
77
|
+
convisoappsec/flowcli/assets/ls.py
|
|
78
|
+
convisoappsec/flowcli/ast/__init__.py
|
|
79
|
+
convisoappsec/flowcli/ast/entrypoint.py
|
|
80
|
+
convisoappsec/flowcli/companies/__init__.py
|
|
81
|
+
convisoappsec/flowcli/companies/ls.py
|
|
82
|
+
convisoappsec/flowcli/container/__init__.py
|
|
83
|
+
convisoappsec/flowcli/container/entrypoint.py
|
|
84
|
+
convisoappsec/flowcli/container/run.py
|
|
85
|
+
convisoappsec/flowcli/deploy/__init__.py
|
|
86
|
+
convisoappsec/flowcli/deploy/create/__init__.py
|
|
87
|
+
convisoappsec/flowcli/deploy/create/context.py
|
|
88
|
+
convisoappsec/flowcli/deploy/create/entrypoint.py
|
|
89
|
+
convisoappsec/flowcli/deploy/create/with_/__init__.py
|
|
90
|
+
convisoappsec/flowcli/deploy/create/with_/entrypoint.py
|
|
91
|
+
convisoappsec/flowcli/deploy/create/with_/values.py
|
|
92
|
+
convisoappsec/flowcli/deploy/create/with_/tag_tracker/__init__.py
|
|
93
|
+
convisoappsec/flowcli/deploy/create/with_/tag_tracker/context.py
|
|
94
|
+
convisoappsec/flowcli/deploy/create/with_/tag_tracker/entrypoint.py
|
|
95
|
+
convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/__init__.py
|
|
96
|
+
convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/entrypoint.py
|
|
97
|
+
convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/time_.py
|
|
98
|
+
convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/versioning_style.py
|
|
99
|
+
convisoappsec/flowcli/findings/__init__.py
|
|
100
|
+
convisoappsec/flowcli/findings/entrypoint.py
|
|
101
|
+
convisoappsec/flowcli/findings/create/__init__.py
|
|
102
|
+
convisoappsec/flowcli/findings/create/entrypoint.py
|
|
103
|
+
convisoappsec/flowcli/findings/create/with_/__init__.py
|
|
104
|
+
convisoappsec/flowcli/findings/create/with_/entrypoint.py
|
|
105
|
+
convisoappsec/flowcli/findings/create/with_/version_tracker.py
|
|
106
|
+
convisoappsec/flowcli/findings/import_sarif/__init__.py
|
|
107
|
+
convisoappsec/flowcli/findings/import_sarif/entrypoint.py
|
|
108
|
+
convisoappsec/flowcli/iac/__init__.py
|
|
109
|
+
convisoappsec/flowcli/iac/entrypoint.py
|
|
110
|
+
convisoappsec/flowcli/iac/run.py
|
|
111
|
+
convisoappsec/flowcli/sast/__init__.py
|
|
112
|
+
convisoappsec/flowcli/sast/entrypoint.py
|
|
113
|
+
convisoappsec/flowcli/sast/run.py
|
|
114
|
+
convisoappsec/flowcli/sbom/__init__.py
|
|
115
|
+
convisoappsec/flowcli/sbom/entrypoint.py
|
|
116
|
+
convisoappsec/flowcli/sbom/generate.py
|
|
117
|
+
convisoappsec/flowcli/sca/__init__.py
|
|
118
|
+
convisoappsec/flowcli/sca/entrypoint.py
|
|
119
|
+
convisoappsec/flowcli/sca/run.py
|
|
120
|
+
convisoappsec/flowcli/vulnerability/__init__.py
|
|
121
|
+
convisoappsec/flowcli/vulnerability/assert_security_rules.py
|
|
122
|
+
convisoappsec/flowcli/vulnerability/container_vulnerability_manager.py
|
|
123
|
+
convisoappsec/flowcli/vulnerability/entrypoint.py
|
|
124
|
+
convisoappsec/flowcli/vulnerability/rules_schema.json
|
|
125
|
+
convisoappsec/flowcli/vulnerability/run.py
|
|
126
|
+
convisoappsec/sast/__init__.py
|
|
127
|
+
convisoappsec/sast/decision.py
|
|
128
|
+
convisoappsec/sast/sastbox.py
|
|
129
|
+
scripts/shell_completer/flow_bash_completer.sh
|
|
130
|
+
scripts/shell_completer/flow_fish_completer.fish
|
|
131
|
+
scripts/shell_completer/flow_zsh_completer.sh
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
convisoappsec
|
|
File without changes
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import docker
|
|
2
|
+
import tarfile
|
|
3
|
+
import tempfile
|
|
4
|
+
import time
|
|
5
|
+
from concurrent.futures import ThreadPoolExecutor
|
|
6
|
+
|
|
7
|
+
from transitions import Machine
|
|
8
|
+
from transitions.extensions.states import Timeout, add_state_features
|
|
9
|
+
|
|
10
|
+
from convisoappsec.common.docker import SCSCommon
|
|
11
|
+
from convisoappsec.logger import LOGGER
|
|
12
|
+
|
|
13
|
+
RAW_STATE_MSG = 'Scanner {} entered on {} state'
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class SARIFParsingError(BaseException):
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class PropertyRequiredError(SARIFParsingError):
|
|
21
|
+
def __init__(self, stderr_log=''):
|
|
22
|
+
pretty_error = self.__parse_pretty_property_error(stderr_log)
|
|
23
|
+
print('Error:', pretty_error)
|
|
24
|
+
|
|
25
|
+
def __parse_pretty_property_error(self, stderr_logs):
|
|
26
|
+
expected_error_line = ''
|
|
27
|
+
|
|
28
|
+
for log_line in stderr_logs.split('\n'):
|
|
29
|
+
expected_error_text = 'PropertyRequiredError'
|
|
30
|
+
if expected_error_text in log_line:
|
|
31
|
+
expected_error_line = log_line
|
|
32
|
+
break
|
|
33
|
+
|
|
34
|
+
error = self.__extract_text_after_colon(expected_error_line)
|
|
35
|
+
|
|
36
|
+
return error.strip()
|
|
37
|
+
|
|
38
|
+
def __extract_text_after_colon(self, text):
|
|
39
|
+
try:
|
|
40
|
+
return text.split(':', 3)[-1]
|
|
41
|
+
except IndexError:
|
|
42
|
+
return ''
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@add_state_features(Timeout)
|
|
46
|
+
class ScannerMachine(Machine):
|
|
47
|
+
pass
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class ScannerEntity:
|
|
51
|
+
|
|
52
|
+
def __init__(self, token, scanner, logger=None, timeout=7200):
|
|
53
|
+
self.logger = logger or LOGGER
|
|
54
|
+
self.token = token
|
|
55
|
+
|
|
56
|
+
self.scanner = self.__setup_scanner(scanner)
|
|
57
|
+
self.name = self.scanner.name
|
|
58
|
+
self.results = None
|
|
59
|
+
|
|
60
|
+
self.states = [
|
|
61
|
+
'waiting',
|
|
62
|
+
{'name': 'pulling', 'timeout': timeout, 'on_timeout': self._on_timeout},
|
|
63
|
+
{'name': 'running', 'timeout': timeout, 'on_timeout': self._on_timeout},
|
|
64
|
+
{'name': 'sending', 'timeout': timeout, 'on_timeout': self._on_timeout},
|
|
65
|
+
'done'
|
|
66
|
+
]
|
|
67
|
+
self.machine = ScannerMachine(
|
|
68
|
+
model=self,
|
|
69
|
+
states=self.states,
|
|
70
|
+
initial='waiting'
|
|
71
|
+
)
|
|
72
|
+
self.machine.add_ordered_transitions()
|
|
73
|
+
self._set_callbacks()
|
|
74
|
+
self.to_waiting()
|
|
75
|
+
|
|
76
|
+
def __setup_scanner(self, scanner):
|
|
77
|
+
if isinstance(scanner, SCSCommon):
|
|
78
|
+
return scanner
|
|
79
|
+
else:
|
|
80
|
+
return self._instanciate_scanner(scanner)
|
|
81
|
+
|
|
82
|
+
def _set_callbacks(self):
|
|
83
|
+
self.machine.on_enter_waiting('_on_waiting')
|
|
84
|
+
self.machine.on_enter_pulling('_on_pulling')
|
|
85
|
+
self.machine.on_enter_running('_on_running')
|
|
86
|
+
self.machine.on_enter_sending('_on_sending')
|
|
87
|
+
self.machine.on_enter_done('_on_done')
|
|
88
|
+
|
|
89
|
+
def _instanciate_scanner(self, data):
|
|
90
|
+
return SCSCommon(
|
|
91
|
+
**data,
|
|
92
|
+
token=self.token,
|
|
93
|
+
logger=self.logger,
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
def _on_timeout(self):
|
|
97
|
+
self.logger.debug('Scanner {} timeout on state {}'.format(
|
|
98
|
+
self.name, self.state
|
|
99
|
+
))
|
|
100
|
+
|
|
101
|
+
def _on_waiting(self):
|
|
102
|
+
self.logger.debug(RAW_STATE_MSG.format(
|
|
103
|
+
self.name, self.state
|
|
104
|
+
))
|
|
105
|
+
|
|
106
|
+
def _on_pulling(self):
|
|
107
|
+
self.logger.debug(RAW_STATE_MSG.format(
|
|
108
|
+
self.name, self.state
|
|
109
|
+
))
|
|
110
|
+
image = self.scanner.pull()
|
|
111
|
+
if image:
|
|
112
|
+
self.logger.debug('Image: {}'.format(image))
|
|
113
|
+
self.next_state()
|
|
114
|
+
else:
|
|
115
|
+
raise RuntimeError("Image not found.")
|
|
116
|
+
|
|
117
|
+
def _on_running(self):
|
|
118
|
+
self.scanner.run()
|
|
119
|
+
self.end_time = time.time()
|
|
120
|
+
self.logger.debug('Total execution time for {} was {:2f}'.format(
|
|
121
|
+
self.scanner.repository_name,
|
|
122
|
+
self.end_time - self.start_time
|
|
123
|
+
))
|
|
124
|
+
self.next_state()
|
|
125
|
+
|
|
126
|
+
def _on_sending(self):
|
|
127
|
+
self.logger.debug(RAW_STATE_MSG.format(
|
|
128
|
+
self.name, self.state
|
|
129
|
+
))
|
|
130
|
+
self.results = self.scanner.get_container_reports()
|
|
131
|
+
self.next_state()
|
|
132
|
+
|
|
133
|
+
def _on_done(self):
|
|
134
|
+
self.logger.debug(RAW_STATE_MSG.format(
|
|
135
|
+
self.scanner.repository_name, self.state
|
|
136
|
+
))
|
|
137
|
+
self.scanner.container.remove(v=True, force=True)
|
|
138
|
+
|
|
139
|
+
def start(self):
|
|
140
|
+
self.start_time = time.time()
|
|
141
|
+
self.to_pulling()
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
class ContainerWrapper:
|
|
145
|
+
|
|
146
|
+
def __init__(self, token, containers_map, logger, timeout, max_workers=5):
|
|
147
|
+
self.token = token
|
|
148
|
+
self.logger = logger or LOGGER
|
|
149
|
+
self.max_workers = max_workers
|
|
150
|
+
self.scanners = [
|
|
151
|
+
ScannerEntity(
|
|
152
|
+
token=token,
|
|
153
|
+
scanner=scanner,
|
|
154
|
+
logger=logger,
|
|
155
|
+
timeout=timeout
|
|
156
|
+
)
|
|
157
|
+
for scanner in containers_map.values()
|
|
158
|
+
]
|
|
159
|
+
|
|
160
|
+
def run(self):
|
|
161
|
+
self.logger.debug("Starting Execution")
|
|
162
|
+
with ThreadPoolExecutor(max_workers=self.max_workers) as exeggutor:
|
|
163
|
+
for scanner in self.scanners:
|
|
164
|
+
exeggutor.submit(scanner.start)
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def convert_sarif_to_sastbox1(report_filepath, repository_dir, container_registry_token, scanner_timeout=7200):
|
|
168
|
+
"""
|
|
169
|
+
Args:
|
|
170
|
+
report_filepath (str): filepath to the report to be converted
|
|
171
|
+
repository_dir (str): filepath to the repository being tested
|
|
172
|
+
token (str): Conviso container registry token
|
|
173
|
+
scanner_timeout (int): container timeout
|
|
174
|
+
|
|
175
|
+
Returns:
|
|
176
|
+
string: filepath to the converted report
|
|
177
|
+
"""
|
|
178
|
+
CONTAINER_IMAGE_NAME = 'sastbox-converter-tool'
|
|
179
|
+
CONTAINER_IMAGE_TAG = 'cc50dee'
|
|
180
|
+
|
|
181
|
+
CONTAINER_INPUT_FILEPATH = '/code{}'.format(
|
|
182
|
+
report_filepath.replace(repository_dir, '')
|
|
183
|
+
)
|
|
184
|
+
CONTAINER_OUTPUT_FILENAME = CONTAINER_INPUT_FILEPATH.replace(
|
|
185
|
+
'sarif', 'json'
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
CONTAINERS_MAP = {
|
|
189
|
+
CONTAINER_IMAGE_NAME: {
|
|
190
|
+
'repository_dir': repository_dir,
|
|
191
|
+
'repository_name': CONTAINER_IMAGE_NAME,
|
|
192
|
+
'tag': CONTAINER_IMAGE_TAG,
|
|
193
|
+
'command': [
|
|
194
|
+
'--format', 'sastbox1',
|
|
195
|
+
'--input', CONTAINER_INPUT_FILEPATH,
|
|
196
|
+
'--output', CONTAINER_OUTPUT_FILENAME
|
|
197
|
+
],
|
|
198
|
+
},
|
|
199
|
+
}
|
|
200
|
+
converter_wrapped = ContainerWrapper(
|
|
201
|
+
token=container_registry_token,
|
|
202
|
+
containers_map=CONTAINERS_MAP,
|
|
203
|
+
logger=None,
|
|
204
|
+
timeout=scanner_timeout
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
converter_wrapped.logger.setLevel('WARN')
|
|
208
|
+
converter_wrapped.run()
|
|
209
|
+
converter_wrapped.logger.setLevel('INFO')
|
|
210
|
+
|
|
211
|
+
scanner = converter_wrapped.scanners[0].scanner
|
|
212
|
+
last_scan_name = scanner.name
|
|
213
|
+
last_container = scanner.docker.containers.get(
|
|
214
|
+
last_scan_name
|
|
215
|
+
)
|
|
216
|
+
|
|
217
|
+
try:
|
|
218
|
+
chunks, _ = last_container.get_archive(CONTAINER_OUTPUT_FILENAME)
|
|
219
|
+
output_filepath = __extract_tarball_chunks(
|
|
220
|
+
chunks, report_filepath.replace('sarif', 'json')
|
|
221
|
+
)
|
|
222
|
+
except docker.errors.APIError as error:
|
|
223
|
+
stderr_log = last_container.logs(stderr=True).decode('utf-8')
|
|
224
|
+
raise PropertyRequiredError(stderr_log)
|
|
225
|
+
|
|
226
|
+
return output_filepath
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
def __extract_tarball_chunks(tarball_chunks, report_absolute_filepath):
|
|
230
|
+
"""
|
|
231
|
+
|
|
232
|
+
Args:
|
|
233
|
+
tarball_chunks (int): The number of bytes returned by each iteration of the generator
|
|
234
|
+
report_filename (string): The name of the extracted report
|
|
235
|
+
|
|
236
|
+
Returns:
|
|
237
|
+
string: Report absolute filepath in local filesystem
|
|
238
|
+
"""
|
|
239
|
+
output_dirpath = report_absolute_filepath[
|
|
240
|
+
:report_absolute_filepath.rfind('/')
|
|
241
|
+
]
|
|
242
|
+
|
|
243
|
+
with tempfile.TemporaryFile() as tmp_wrapper_file:
|
|
244
|
+
for chunk in tarball_chunks:
|
|
245
|
+
tmp_wrapper_file.write(chunk)
|
|
246
|
+
tmp_wrapper_file.seek(0)
|
|
247
|
+
|
|
248
|
+
with tarfile.open(mode="r|", fileobj=tmp_wrapper_file) as talball_file:
|
|
249
|
+
talball_file.extractall(path=output_dirpath)
|
|
250
|
+
|
|
251
|
+
return report_absolute_filepath
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import shutil
|
|
3
|
+
import tempfile
|
|
4
|
+
import docker
|
|
5
|
+
|
|
6
|
+
class Cleaner:
|
|
7
|
+
"""Responsible for cleaning temporary files, Docker containers, images, and volumes."""
|
|
8
|
+
|
|
9
|
+
def __init__(self):
|
|
10
|
+
try:
|
|
11
|
+
self.client = docker.from_env()
|
|
12
|
+
except Exception as e:
|
|
13
|
+
print(f"Error initializing Docker client: {e}")
|
|
14
|
+
self.client = None
|
|
15
|
+
|
|
16
|
+
def cleanup(self):
|
|
17
|
+
""" Responsable to clean dirs, docker images and containers after all executions,
|
|
18
|
+
removes all stopped containers, unused networks, dangling images, and build cache.
|
|
19
|
+
"""
|
|
20
|
+
try:
|
|
21
|
+
client = docker.from_env()
|
|
22
|
+
self.perform_cleanup()
|
|
23
|
+
|
|
24
|
+
for container in client.containers.list(all=True):
|
|
25
|
+
try:
|
|
26
|
+
container.remove()
|
|
27
|
+
except Exception:
|
|
28
|
+
continue
|
|
29
|
+
|
|
30
|
+
for image in client.images.list():
|
|
31
|
+
if image.tags and any(tag.startswith("public.ecr.aws/convisoappsec/") for tag in image.tags):
|
|
32
|
+
try:
|
|
33
|
+
client.images.remove(image.id)
|
|
34
|
+
except Exception as e:
|
|
35
|
+
print(f"Error removing image {image.tags}: {e}")
|
|
36
|
+
continue
|
|
37
|
+
|
|
38
|
+
volumes = client.volumes.list()
|
|
39
|
+
for volume in volumes:
|
|
40
|
+
try:
|
|
41
|
+
volume.remove()
|
|
42
|
+
except Exception:
|
|
43
|
+
continue
|
|
44
|
+
|
|
45
|
+
except Exception as e:
|
|
46
|
+
print(f"An unexpected error occurred: {e}")
|
|
47
|
+
return
|
|
48
|
+
|
|
49
|
+
def perform_cleanup(self):
|
|
50
|
+
"""Method to clean the tmp directory and remove 'conviso-output-' directories in the current directory."""
|
|
51
|
+
|
|
52
|
+
tmp_dir = tempfile.gettempdir()
|
|
53
|
+
|
|
54
|
+
# Clear system temp directory
|
|
55
|
+
try:
|
|
56
|
+
for filename in os.listdir(tmp_dir):
|
|
57
|
+
file_path = os.path.join(tmp_dir, filename)
|
|
58
|
+
try:
|
|
59
|
+
if os.path.isfile(file_path) or os.path.islink(file_path):
|
|
60
|
+
os.remove(file_path)
|
|
61
|
+
elif os.path.isdir(file_path):
|
|
62
|
+
shutil.rmtree(file_path)
|
|
63
|
+
except Exception:
|
|
64
|
+
pass
|
|
65
|
+
except Exception:
|
|
66
|
+
pass
|
|
67
|
+
|
|
68
|
+
# Clear 'conviso-output-' directories in the current directory
|
|
69
|
+
try:
|
|
70
|
+
for filename in os.listdir("."):
|
|
71
|
+
dir_path = os.path.join(".", filename)
|
|
72
|
+
if os.path.isdir(dir_path) and filename.startswith("conviso-output-"):
|
|
73
|
+
try:
|
|
74
|
+
shutil.rmtree(dir_path)
|
|
75
|
+
except Exception:
|
|
76
|
+
pass
|
|
77
|
+
except Exception:
|
|
78
|
+
pass
|