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.
Files changed (133) hide show
  1. conviso_ast-3.0.0/PKG-INFO +37 -0
  2. conviso_ast-3.0.0/README.md +8 -0
  3. conviso_ast-3.0.0/conviso_ast.egg-info/PKG-INFO +37 -0
  4. conviso_ast-3.0.0/conviso_ast.egg-info/SOURCES.txt +131 -0
  5. conviso_ast-3.0.0/conviso_ast.egg-info/dependency_links.txt +1 -0
  6. conviso_ast-3.0.0/conviso_ast.egg-info/entry_points.txt +3 -0
  7. conviso_ast-3.0.0/conviso_ast.egg-info/requires.txt +13 -0
  8. conviso_ast-3.0.0/conviso_ast.egg-info/top_level.txt +1 -0
  9. conviso_ast-3.0.0/convisoappsec/__init__.py +0 -0
  10. conviso_ast-3.0.0/convisoappsec/common/__init__.py +5 -0
  11. conviso_ast-3.0.0/convisoappsec/common/box.py +251 -0
  12. conviso_ast-3.0.0/convisoappsec/common/cleaner.py +78 -0
  13. conviso_ast-3.0.0/convisoappsec/common/docker.py +399 -0
  14. conviso_ast-3.0.0/convisoappsec/common/exceptions.py +8 -0
  15. conviso_ast-3.0.0/convisoappsec/common/git_data_parser.py +76 -0
  16. conviso_ast-3.0.0/convisoappsec/common/graphql/__init__.py +0 -0
  17. conviso_ast-3.0.0/convisoappsec/common/graphql/error_handlers.py +75 -0
  18. conviso_ast-3.0.0/convisoappsec/common/graphql/errors.py +16 -0
  19. conviso_ast-3.0.0/convisoappsec/common/graphql/low_client.py +51 -0
  20. conviso_ast-3.0.0/convisoappsec/common/retry_handler.py +40 -0
  21. conviso_ast-3.0.0/convisoappsec/common/strings.py +8 -0
  22. conviso_ast-3.0.0/convisoappsec/flow/__init__.py +3 -0
  23. conviso_ast-3.0.0/convisoappsec/flow/api.py +104 -0
  24. conviso_ast-3.0.0/convisoappsec/flow/cleaner.py +118 -0
  25. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/__init__.py +0 -0
  26. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/__init__.py +0 -0
  27. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/client.py +18 -0
  28. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/models/__init__.py +0 -0
  29. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/models/issues/__init__.py +0 -0
  30. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/models/issues/container.py +72 -0
  31. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/models/issues/iac.py +6 -0
  32. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/models/issues/normalize.py +13 -0
  33. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/models/issues/sast.py +53 -0
  34. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/models/issues/sca.py +78 -0
  35. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/resources_api.py +142 -0
  36. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/schemas/__init__.py +0 -0
  37. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/schemas/mutations/__init__.py +61 -0
  38. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/beta/schemas/resolvers/__init__.py +0 -0
  39. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/__init__.py +0 -0
  40. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/client.py +46 -0
  41. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/models/__init__.py +0 -0
  42. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/models/asset.py +14 -0
  43. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/models/issues.py +16 -0
  44. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/models/project.py +35 -0
  45. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/resources_api.py +489 -0
  46. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/schemas/__init__.py +0 -0
  47. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/schemas/mutations/__init__.py +212 -0
  48. conviso_ast-3.0.0/convisoappsec/flow/graphql_api/v1/schemas/resolvers/__init__.py +180 -0
  49. conviso_ast-3.0.0/convisoappsec/flow/source_code_scanner/__init__.py +9 -0
  50. conviso_ast-3.0.0/convisoappsec/flow/source_code_scanner/exceptions.py +2 -0
  51. conviso_ast-3.0.0/convisoappsec/flow/source_code_scanner/scc.py +68 -0
  52. conviso_ast-3.0.0/convisoappsec/flow/source_code_scanner/source_code_scanner.py +177 -0
  53. conviso_ast-3.0.0/convisoappsec/flow/util/__init__.py +7 -0
  54. conviso_ast-3.0.0/convisoappsec/flow/util/ci_provider.py +99 -0
  55. conviso_ast-3.0.0/convisoappsec/flow/util/metrics.py +16 -0
  56. conviso_ast-3.0.0/convisoappsec/flow/util/source_code_compressor.py +22 -0
  57. conviso_ast-3.0.0/convisoappsec/flow/version_control_system_adapter.py +528 -0
  58. conviso_ast-3.0.0/convisoappsec/flow/version_searchers/__init__.py +9 -0
  59. conviso_ast-3.0.0/convisoappsec/flow/version_searchers/sorted_by_versioning_style.py +85 -0
  60. conviso_ast-3.0.0/convisoappsec/flow/version_searchers/timebased_version_seacher.py +39 -0
  61. conviso_ast-3.0.0/convisoappsec/flow/version_searchers/version_searcher_result.py +33 -0
  62. conviso_ast-3.0.0/convisoappsec/flow/versioning_style/__init__.py +0 -0
  63. conviso_ast-3.0.0/convisoappsec/flow/versioning_style/semantic_versioning.py +44 -0
  64. conviso_ast-3.0.0/convisoappsec/flowcli/__init__.py +3 -0
  65. conviso_ast-3.0.0/convisoappsec/flowcli/__main__.py +4 -0
  66. conviso_ast-3.0.0/convisoappsec/flowcli/assets/__init__.py +4 -0
  67. conviso_ast-3.0.0/convisoappsec/flowcli/assets/create.py +88 -0
  68. conviso_ast-3.0.0/convisoappsec/flowcli/assets/entrypoint.py +20 -0
  69. conviso_ast-3.0.0/convisoappsec/flowcli/assets/ls.py +63 -0
  70. conviso_ast-3.0.0/convisoappsec/flowcli/ast/__init__.py +3 -0
  71. conviso_ast-3.0.0/convisoappsec/flowcli/ast/entrypoint.py +427 -0
  72. conviso_ast-3.0.0/convisoappsec/flowcli/common.py +175 -0
  73. conviso_ast-3.0.0/convisoappsec/flowcli/companies/__init__.py +0 -0
  74. conviso_ast-3.0.0/convisoappsec/flowcli/companies/ls.py +25 -0
  75. conviso_ast-3.0.0/convisoappsec/flowcli/container/__init__.py +3 -0
  76. conviso_ast-3.0.0/convisoappsec/flowcli/container/entrypoint.py +17 -0
  77. conviso_ast-3.0.0/convisoappsec/flowcli/container/run.py +306 -0
  78. conviso_ast-3.0.0/convisoappsec/flowcli/context.py +49 -0
  79. conviso_ast-3.0.0/convisoappsec/flowcli/deploy/__init__.py +0 -0
  80. conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/__init__.py +4 -0
  81. conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/context.py +12 -0
  82. conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/entrypoint.py +31 -0
  83. conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/__init__.py +3 -0
  84. conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/entrypoint.py +20 -0
  85. conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/tag_tracker/__init__.py +4 -0
  86. conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/tag_tracker/context.py +11 -0
  87. conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/tag_tracker/entrypoint.py +30 -0
  88. conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/__init__.py +4 -0
  89. conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/entrypoint.py +21 -0
  90. conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/time_.py +84 -0
  91. conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/versioning_style.py +115 -0
  92. conviso_ast-3.0.0/convisoappsec/flowcli/deploy/create/with_/values.py +133 -0
  93. conviso_ast-3.0.0/convisoappsec/flowcli/entrypoint.py +103 -0
  94. conviso_ast-3.0.0/convisoappsec/flowcli/environment_checker.py +45 -0
  95. conviso_ast-3.0.0/convisoappsec/flowcli/findings/__init__.py +4 -0
  96. conviso_ast-3.0.0/convisoappsec/flowcli/findings/create/__init__.py +4 -0
  97. conviso_ast-3.0.0/convisoappsec/flowcli/findings/create/entrypoint.py +18 -0
  98. conviso_ast-3.0.0/convisoappsec/flowcli/findings/create/with_/__init__.py +3 -0
  99. conviso_ast-3.0.0/convisoappsec/flowcli/findings/create/with_/entrypoint.py +19 -0
  100. conviso_ast-3.0.0/convisoappsec/flowcli/findings/create/with_/version_tracker.py +93 -0
  101. conviso_ast-3.0.0/convisoappsec/flowcli/findings/entrypoint.py +19 -0
  102. conviso_ast-3.0.0/convisoappsec/flowcli/findings/import_sarif/__init__.py +4 -0
  103. conviso_ast-3.0.0/convisoappsec/flowcli/findings/import_sarif/entrypoint.py +430 -0
  104. conviso_ast-3.0.0/convisoappsec/flowcli/help_option.py +18 -0
  105. conviso_ast-3.0.0/convisoappsec/flowcli/iac/__init__.py +3 -0
  106. conviso_ast-3.0.0/convisoappsec/flowcli/iac/entrypoint.py +17 -0
  107. conviso_ast-3.0.0/convisoappsec/flowcli/iac/run.py +328 -0
  108. conviso_ast-3.0.0/convisoappsec/flowcli/requirements_verifier.py +132 -0
  109. conviso_ast-3.0.0/convisoappsec/flowcli/sast/__init__.py +3 -0
  110. conviso_ast-3.0.0/convisoappsec/flowcli/sast/entrypoint.py +17 -0
  111. conviso_ast-3.0.0/convisoappsec/flowcli/sast/run.py +485 -0
  112. conviso_ast-3.0.0/convisoappsec/flowcli/sbom/__init__.py +3 -0
  113. conviso_ast-3.0.0/convisoappsec/flowcli/sbom/entrypoint.py +17 -0
  114. conviso_ast-3.0.0/convisoappsec/flowcli/sbom/generate.py +235 -0
  115. conviso_ast-3.0.0/convisoappsec/flowcli/sca/__init__.py +3 -0
  116. conviso_ast-3.0.0/convisoappsec/flowcli/sca/entrypoint.py +17 -0
  117. conviso_ast-3.0.0/convisoappsec/flowcli/sca/run.py +479 -0
  118. conviso_ast-3.0.0/convisoappsec/flowcli/vulnerability/__init__.py +3 -0
  119. conviso_ast-3.0.0/convisoappsec/flowcli/vulnerability/assert_security_rules.py +201 -0
  120. conviso_ast-3.0.0/convisoappsec/flowcli/vulnerability/container_vulnerability_manager.py +175 -0
  121. conviso_ast-3.0.0/convisoappsec/flowcli/vulnerability/entrypoint.py +18 -0
  122. conviso_ast-3.0.0/convisoappsec/flowcli/vulnerability/rules_schema.json +53 -0
  123. conviso_ast-3.0.0/convisoappsec/flowcli/vulnerability/run.py +487 -0
  124. conviso_ast-3.0.0/convisoappsec/logger.py +29 -0
  125. conviso_ast-3.0.0/convisoappsec/sast/__init__.py +0 -0
  126. conviso_ast-3.0.0/convisoappsec/sast/decision.py +45 -0
  127. conviso_ast-3.0.0/convisoappsec/sast/sastbox.py +296 -0
  128. conviso_ast-3.0.0/convisoappsec/version.py +1 -0
  129. conviso_ast-3.0.0/scripts/shell_completer/flow_bash_completer.sh +21 -0
  130. conviso_ast-3.0.0/scripts/shell_completer/flow_fish_completer.fish +1 -0
  131. conviso_ast-3.0.0/scripts/shell_completer/flow_zsh_completer.sh +32 -0
  132. conviso_ast-3.0.0/setup.cfg +4 -0
  133. 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,8 @@
1
+ # AST
2
+
3
+ This is a command line tool to execute Conviso AST.
4
+
5
+ # Documentation
6
+ Please visit the [official documentation] for further information.
7
+
8
+ [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,3 @@
1
+ [console_scripts]
2
+ conviso = convisoappsec.flowcli.entrypoint:cli
3
+ flow = convisoappsec.flowcli.entrypoint:cli
@@ -0,0 +1,13 @@
1
+ GitPython==3.1.45
2
+ click==8.1.8
3
+ requests==2.32.5
4
+ urllib3==2.4.0
5
+ semantic-version==2.10.0
6
+ docker==7.1.0
7
+ PyYAML==6.0.3
8
+ click-log==0.4.0
9
+ transitions==0.9.2
10
+ jsonschema==4.25.1
11
+ giturlparse<=0.12.0
12
+ jmespath==1.0.1
13
+ setuptools==78.1.0
@@ -0,0 +1 @@
1
+ convisoappsec
File without changes
@@ -0,0 +1,5 @@
1
+ from urllib.parse import urljoin
2
+
3
+
4
+ def safe_join_url(base_url, path):
5
+ return urljoin(base_url, path)
@@ -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