conviso-cli 2.3.0.dev3__tar.gz → 2.3.0.dev5__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 (137) hide show
  1. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/PKG-INFO +2 -2
  2. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/conviso_cli.egg-info/PKG-INFO +2 -2
  3. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/conviso_cli.egg-info/SOURCES.txt +1 -0
  4. conviso-cli-2.3.0.dev5/conviso_cli.egg-info/requires.txt +13 -0
  5. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/resources_api.py +83 -71
  6. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/schemas/mutations/__init__.py +24 -0
  7. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/ast/entrypoint.py +4 -4
  8. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/container/run.py +2 -2
  9. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/entrypoint.py +0 -10
  10. conviso-cli-2.3.0.dev5/convisoappsec/flowcli/environment_checker.py +45 -0
  11. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/iac/run.py +1 -3
  12. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/requirements_verifier.py +2 -0
  13. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sast/run.py +31 -148
  14. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sbom/generate.py +4 -9
  15. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sca/run.py +3 -20
  16. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/vulnerability/run.py +4 -10
  17. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/sast/sastbox.py +1 -1
  18. conviso-cli-2.3.0.dev5/convisoappsec/version.py +1 -0
  19. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/setup.py +13 -13
  20. conviso-cli-2.3.0.dev3/conviso_cli.egg-info/requires.txt +0 -13
  21. conviso-cli-2.3.0.dev3/convisoappsec/version.py +0 -1
  22. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/README.md +0 -0
  23. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/conviso_cli.egg-info/dependency_links.txt +0 -0
  24. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/conviso_cli.egg-info/entry_points.txt +0 -0
  25. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/conviso_cli.egg-info/top_level.txt +0 -0
  26. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/__init__.py +0 -0
  27. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/__init__.py +0 -0
  28. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/box.py +0 -0
  29. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/docker.py +0 -0
  30. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/exceptions.py +0 -0
  31. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/git_data_parser.py +0 -0
  32. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/graphql/__init__.py +0 -0
  33. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/graphql/error_handlers.py +0 -0
  34. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/graphql/errors.py +0 -0
  35. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/graphql/low_client.py +0 -0
  36. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/retry_handler.py +0 -0
  37. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/common/strings.py +0 -0
  38. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/__init__.py +0 -0
  39. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/api.py +0 -0
  40. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/__init__.py +0 -0
  41. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/__init__.py +0 -0
  42. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/client.py +0 -0
  43. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/models/__init__.py +0 -0
  44. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/models/issues/__init__.py +0 -0
  45. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/models/issues/container.py +0 -0
  46. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/models/issues/iac.py +0 -0
  47. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/models/issues/normalize.py +0 -0
  48. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/models/issues/sast.py +0 -0
  49. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/models/issues/sca.py +0 -0
  50. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/resources_api.py +0 -0
  51. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/schemas/__init__.py +0 -0
  52. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/schemas/mutations/__init__.py +0 -0
  53. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/beta/schemas/resolvers/__init__.py +0 -0
  54. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/__init__.py +0 -0
  55. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/client.py +0 -0
  56. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/models/__init__.py +0 -0
  57. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/models/asset.py +0 -0
  58. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/models/issues.py +0 -0
  59. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/models/project.py +0 -0
  60. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/schemas/__init__.py +0 -0
  61. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/graphql_api/v1/schemas/resolvers/__init__.py +0 -0
  62. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/source_code_scanner/__init__.py +0 -0
  63. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/source_code_scanner/exceptions.py +0 -0
  64. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/source_code_scanner/scc.py +0 -0
  65. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/source_code_scanner/source_code_scanner.py +0 -0
  66. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/util/__init__.py +0 -0
  67. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/util/ci_provider.py +0 -0
  68. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/util/metrics.py +0 -0
  69. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/util/source_code_compressor.py +0 -0
  70. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/version_control_system_adapter.py +0 -0
  71. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/version_searchers/__init__.py +0 -0
  72. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/version_searchers/sorted_by_versioning_style.py +0 -0
  73. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/version_searchers/timebased_version_seacher.py +0 -0
  74. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/version_searchers/version_searcher_result.py +0 -0
  75. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/versioning_style/__init__.py +0 -0
  76. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flow/versioning_style/semantic_versioning.py +0 -0
  77. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/__init__.py +0 -0
  78. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/__main__.py +0 -0
  79. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/assets/__init__.py +0 -0
  80. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/assets/create.py +0 -0
  81. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/assets/entrypoint.py +0 -0
  82. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/assets/ls.py +0 -0
  83. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/ast/__init__.py +0 -0
  84. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/common.py +0 -0
  85. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/companies/__init__.py +0 -0
  86. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/companies/ls.py +0 -0
  87. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/container/__init__.py +0 -0
  88. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/container/entrypoint.py +0 -0
  89. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/context.py +0 -0
  90. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/__init__.py +0 -0
  91. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/__init__.py +0 -0
  92. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/context.py +0 -0
  93. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/entrypoint.py +0 -0
  94. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/__init__.py +0 -0
  95. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/entrypoint.py +0 -0
  96. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/__init__.py +0 -0
  97. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/context.py +0 -0
  98. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/entrypoint.py +0 -0
  99. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/__init__.py +0 -0
  100. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/entrypoint.py +0 -0
  101. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/time_.py +0 -0
  102. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/tag_tracker/sort_by/versioning_style.py +0 -0
  103. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/create/with_/values.py +0 -0
  104. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/entrypoint.py +0 -0
  105. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/ls.py +0 -0
  106. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/deploy/show.py +0 -0
  107. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/__init__.py +0 -0
  108. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/create/__init__.py +0 -0
  109. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/create/entrypoint.py +0 -0
  110. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/create/with_/__init__.py +0 -0
  111. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/create/with_/entrypoint.py +0 -0
  112. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/create/with_/version_tracker.py +0 -0
  113. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/entrypoint.py +0 -0
  114. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/import_sarif/__init__.py +0 -0
  115. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/findings/import_sarif/entrypoint.py +0 -0
  116. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/help_option.py +0 -0
  117. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/iac/__init__.py +0 -0
  118. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/iac/entrypoint.py +0 -0
  119. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/projects/__init__.py +0 -0
  120. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/projects/ls.py +0 -0
  121. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sast/__init__.py +0 -0
  122. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sast/entrypoint.py +0 -0
  123. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sbom/__init__.py +0 -0
  124. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sbom/entrypoint.py +0 -0
  125. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sca/__init__.py +0 -0
  126. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/sca/entrypoint.py +0 -0
  127. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/vulnerability/__init__.py +0 -0
  128. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/vulnerability/assert_security_rules.py +0 -0
  129. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/vulnerability/entrypoint.py +0 -0
  130. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/flowcli/vulnerability/rules_schema.json +0 -0
  131. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/logger.py +0 -0
  132. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/sast/__init__.py +0 -0
  133. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/convisoappsec/sast/decision.py +0 -0
  134. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/scripts/shell_completer/flow_bash_completer.sh +0 -0
  135. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/scripts/shell_completer/flow_fish_completer.fish +0 -0
  136. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/scripts/shell_completer/flow_zsh_completer.sh +0 -0
  137. {conviso-cli-2.3.0.dev3 → conviso-cli-2.3.0.dev5}/setup.cfg +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: conviso-cli
3
- Version: 2.3.0.dev3
3
+ Version: 2.3.0.dev5
4
4
  Summary: UNKNOWN
5
5
  Maintainer: Conviso
6
6
  Maintainer-email: development@convisoappsec.com
7
7
  License: UNKNOWN
8
8
  Project-URL: Source, https://github.com/convisoappsec/convisocli/
9
9
  Platform: UNKNOWN
10
- Requires-Python: >=3.8
10
+ Requires-Python: >=3.9
11
11
  Description-Content-Type: text/markdown
12
12
 
13
13
  # CLI
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: conviso-cli
3
- Version: 2.3.0.dev3
3
+ Version: 2.3.0.dev5
4
4
  Summary: UNKNOWN
5
5
  Maintainer: Conviso
6
6
  Maintainer-email: development@convisoappsec.com
7
7
  License: UNKNOWN
8
8
  Project-URL: Source, https://github.com/convisoappsec/convisocli/
9
9
  Platform: UNKNOWN
10
- Requires-Python: >=3.8
10
+ Requires-Python: >=3.9
11
11
  Description-Content-Type: text/markdown
12
12
 
13
13
  # CLI
@@ -66,6 +66,7 @@ convisoappsec/flowcli/__main__.py
66
66
  convisoappsec/flowcli/common.py
67
67
  convisoappsec/flowcli/context.py
68
68
  convisoappsec/flowcli/entrypoint.py
69
+ convisoappsec/flowcli/environment_checker.py
69
70
  convisoappsec/flowcli/help_option.py
70
71
  convisoappsec/flowcli/requirements_verifier.py
71
72
  convisoappsec/flowcli/assets/__init__.py
@@ -0,0 +1,13 @@
1
+ GitPython==3.1.44
2
+ click==8.1.8
3
+ requests==2.32.3
4
+ urllib3==2.3.0
5
+ semantic-version==2.10.0
6
+ docker==7.1.0
7
+ PyYAML==6.0.2
8
+ click-log==0.4.0
9
+ transitions==0.9.2
10
+ jsonschema==4.23.0
11
+ giturlparse<=0.12.0
12
+ jmespath==1.0.1
13
+ setuptools==75.8.0
@@ -240,6 +240,64 @@ class IssuesApi(object):
240
240
 
241
241
  return issues_stats
242
242
 
243
+ def send_issues_file(self, company_id, asset_id, file_path, api_key, vulnerability_type='SAST_FINDING',
244
+ deploy_id=None, commit_ref=None):
245
+ """Send issues file to Conviso platform"""
246
+
247
+ url = self.__conviso_graphql_client.url
248
+
249
+ if not isinstance(vulnerability_type, list):
250
+ vulnerability_type = [vulnerability_type]
251
+
252
+ vulnerability_type = [v.upper() for v in vulnerability_type]
253
+
254
+ variables = {
255
+ "companyId": company_id,
256
+ "assetId": asset_id,
257
+ "vulnerabilityTypes": vulnerability_type,
258
+ "deployId": deploy_id,
259
+ "commitRef": commit_ref,
260
+ "file": None
261
+ }
262
+
263
+ operations = {
264
+ "query": mutations.IMPORT_FINDINGS,
265
+ "variables": variables
266
+ }
267
+
268
+ file_map = {"0": ["variables.file"]}
269
+
270
+ headers = {
271
+ 'x-api-key': api_key,
272
+ "User-Agent": f"AST:{__version__}"
273
+ }
274
+
275
+ try:
276
+ with open(file_path, 'rb') as file:
277
+ files = {
278
+ 'operations': (None, json.dumps(operations), 'application/json'),
279
+ 'map': (None, json.dumps(file_map), 'application/json'),
280
+ '0': (file_path, file, 'application/octet-stream')
281
+ }
282
+
283
+ response = requests.post(url, files=files, headers=headers)
284
+ response.raise_for_status()
285
+ json_response = response.json()
286
+
287
+ self._handle_graphql_errors(json_response)
288
+ return json_response.get('data')
289
+
290
+ except requests.RequestException as e:
291
+ raise Exception(f"GraphQL request failed: {e}")
292
+
293
+ @staticmethod
294
+ def _handle_graphql_errors(json_response):
295
+ """Handle GraphQL errors"""
296
+ errors = json_response.get('errors')
297
+ if errors:
298
+ error_messages = [error.get('message', 'Unknown error') for error in errors]
299
+ raise Exception(f"GraphQL request failed with errors: {', '.join(error_messages)}")
300
+
243
301
 
244
302
  class DeploysApi(object):
245
303
  """ Class for deploys resources """
@@ -320,19 +378,18 @@ class DeploysApi(object):
320
378
  raise Exception("GraphQL request failed with errors.")
321
379
 
322
380
 
323
- class SbomApi(object):
324
- """ Class for sbom file resources """
381
+ class BaseApi:
382
+ """ Base class for handling file uploads to Conviso platform """
325
383
 
326
384
  def __init__(self, conviso_graphql_client):
327
385
  self._conviso_graphql_client = conviso_graphql_client
328
386
 
329
- def send_sbom_file(self, company_id, asset_id, file_path, api_key):
330
- """ Send SBOM file to Conviso platform """
331
-
387
+ def send_file(self, company_id, asset_id, file_path, api_key, mutation):
388
+ """ Generic method for sending a file """
332
389
  url = self._conviso_graphql_client.url
333
390
 
334
391
  operations = {
335
- "query": mutations.IMPORT_SBOM,
392
+ "query": mutation,
336
393
  "variables": {
337
394
  "companyId": company_id,
338
395
  "assetId": asset_id,
@@ -340,41 +397,50 @@ class SbomApi(object):
340
397
  }
341
398
  }
342
399
 
343
- file_map = {
344
- "0": ["variables.file"]
345
- }
400
+ file_map = {"0": ["variables.file"]}
346
401
 
347
- with open(file_path, 'rb') as sbom_file:
402
+ with open(file_path, 'rb') as file:
348
403
  files = {
349
404
  'operations': (None, json.dumps(operations), 'application/json'),
350
405
  'map': (None, json.dumps(file_map), 'application/json'),
351
- '0': (file_path, sbom_file, 'application/octet-stream')
406
+ '0': (file_path, file, 'application/octet-stream')
352
407
  }
353
408
 
354
409
  headers = {
355
- 'x-api-key': f'{api_key}',
356
- "User-Agent": "AST:{version}".format(version=__version__)
410
+ 'x-api-key': api_key,
411
+ "User-Agent": f"AST:{__version__}"
357
412
  }
358
413
 
359
414
  response = requests.post(url, files=files, headers=headers)
360
-
361
415
  response.raise_for_status()
362
416
  json_response = response.json()
363
417
 
364
418
  self._handle_graphql_errors(json_response)
365
-
366
419
  return json_response.get('data')
367
420
 
368
421
  @staticmethod
369
422
  def _handle_graphql_errors(json_response):
370
423
  """ Handle GraphQL errors """
371
424
  if 'errors' in json_response:
372
- errors = json_response['errors']
373
- for error in errors:
425
+ for error in json_response['errors']:
374
426
  print(f"GraphQL Error: {error.get('message')}")
375
427
  raise Exception("GraphQL request failed with errors.")
376
428
 
377
429
 
430
+ class SbomApi(BaseApi):
431
+ """ Class for SBOM file resources """
432
+
433
+ def send_sbom_file(self, company_id, asset_id, file_path, api_key):
434
+ return self.send_file(company_id, asset_id, file_path, api_key, mutations.IMPORT_SBOM)
435
+
436
+
437
+ class ContainerApi(BaseApi):
438
+ """ Class for container finding file resources """
439
+
440
+ def send_container_file(self, company_id, asset_id, file_path, api_key):
441
+ return self.send_file(company_id, asset_id, file_path, api_key, mutations.IMPORT_CONTAINER)
442
+
443
+
378
444
  class LogAstError(object):
379
445
  """ Class to send AST errors to Conviso Platform """
380
446
  def __init__(self, conviso_graphql_client):
@@ -402,57 +468,3 @@ class LogAstError(object):
402
468
  )
403
469
 
404
470
  return success
405
-
406
- class ContainerApi(object):
407
- """ Class for container finding file resources """
408
-
409
- def __init__(self, conviso_graphql_client):
410
- self._conviso_graphql_client = conviso_graphql_client
411
-
412
- def send_container_file(self, company_id, asset_id, file_path, api_key):
413
- """ Send Container file to Conviso platform """
414
-
415
- url = self._conviso_graphql_client.url
416
-
417
- operations = {
418
- "query": mutations.IMPORT_CONTAINER,
419
- "variables": {
420
- "companyId": company_id,
421
- "assetId": asset_id,
422
- "file": None
423
- }
424
- }
425
-
426
- file_map = {
427
- "0": ["variables.file"]
428
- }
429
-
430
- with open(file_path, 'rb') as container_file:
431
- files = {
432
- 'operations': (None, json.dumps(operations), 'application/json'),
433
- 'map': (None, json.dumps(file_map), 'application/json'),
434
- '0': (file_path, container_file, 'application/octet-stream')
435
- }
436
-
437
- headers = {
438
- 'x-api-key': f'{api_key}',
439
- "User-Agent": "AST:{version}".format(version=__version__)
440
- }
441
-
442
- response = requests.post(url, files=files, headers=headers)
443
-
444
- response.raise_for_status()
445
- json_response = response.json()
446
-
447
- self._handle_graphql_errors(json_response)
448
-
449
- return json_response.get('data')
450
-
451
- @staticmethod
452
- def _handle_graphql_errors(json_response):
453
- """ Handle GraphQL errors """
454
- if 'errors' in json_response:
455
- errors = json_response['errors']
456
- for error in errors:
457
- print(f"GraphQL Error: {error.get('message')}")
458
- raise Exception("GraphQL request failed with errors.")
@@ -171,3 +171,27 @@ mutation (
171
171
  }
172
172
  }
173
173
  """
174
+
175
+ IMPORT_FINDINGS = """
176
+ mutation (
177
+ $file: Upload!,
178
+ $assetId: ID!,
179
+ $companyId: ID!
180
+ $vulnerabilityTypes: [Issue!]!
181
+ $deployId: ID
182
+ $commitRef: String
183
+ ) {
184
+ importAstFindingsFile(
185
+ input: {
186
+ file: $file,
187
+ assetId: $assetId,
188
+ companyId: $companyId,
189
+ vulnerabilityTypes: $vulnerabilityTypes,
190
+ deployId: $deployId,
191
+ commitRef: $commitRef
192
+ }
193
+ ) {
194
+ success
195
+ }
196
+ }
197
+ """
@@ -163,6 +163,9 @@ def perform_deploy(context, flow_context, prepared_context):
163
163
  try:
164
164
  LOGGER.info("Creating new deploy...")
165
165
  created_deploy = values.invoke(context)
166
+
167
+ if created_deploy is None:
168
+ raise CreateDeployException("Deploy not created.")
166
169
  try:
167
170
  conviso_api = flow_context.create_conviso_graphql_client()
168
171
  api_key = flow_context.key
@@ -227,10 +230,7 @@ def perform_deploy(context, flow_context, prepared_context):
227
230
  ast_log=full_trace
228
231
  )
229
232
 
230
- if created_deploy:
231
- return created_deploy
232
-
233
- raise CreateDeployException("Deploy not created.")
233
+ return created_deploy
234
234
 
235
235
  except CreateDeployException as err:
236
236
  raise PerformDeployException(err)
@@ -91,8 +91,8 @@ def run(
91
91
  debug_message(f"Context after being prepared: {prepared_context.params}")
92
92
 
93
93
  params_to_copy = [
94
- 'asset_id', 'send_to_flow', 'asset_name', 'vulnerability_auto_close', 'project_code', 'repository_dir',
95
- 'company_id'
94
+ 'asset_id', 'send_to_flow', 'asset_name', 'vulnerability_auto_close',
95
+ 'project_code', 'repository_dir', 'company_id'
96
96
  ]
97
97
 
98
98
  for param_name in params_to_copy:
@@ -23,15 +23,6 @@ from .container import container
23
23
 
24
24
  click_log.basic_config(LOGGER)
25
25
 
26
-
27
- def api_url_autocompletion(*args, **kargs):
28
- return [
29
- api.PRODUCTION_API_URL,
30
- api.STAGING_API_URL,
31
- api.DEVELOPMENT_API_URL,
32
- ]
33
-
34
-
35
26
  @click.group()
36
27
  @click_log.simple_verbosity_option(LOGGER, '-l', '--verbosity')
37
28
  @click.option(
@@ -48,7 +39,6 @@ def api_url_autocompletion(*args, **kargs):
48
39
  envvar=("CONVISO_API_URL", "FLOW_API_URL"),
49
40
  default=api.DEFAULT_API_URL,
50
41
  show_default=True,
51
- autocompletion=api_url_autocompletion,
52
42
  help='The api url to access Conviso Platform resources.',
53
43
  )
54
44
  @click.option(
@@ -0,0 +1,45 @@
1
+ import os
2
+ import platform
3
+ import subprocess
4
+
5
+ class EnvironmentChecker:
6
+ """
7
+ A class to check the system environment for required software and services.
8
+ """
9
+
10
+ def __init__(self):
11
+ self.checks = {}
12
+
13
+ def _run_command(self, command, check_running=False):
14
+ """Helper function to run shell commands and capture output/errors."""
15
+ try:
16
+ process = subprocess.run(command, capture_output=True, text=True, check=not check_running)
17
+ if check_running:
18
+ return process.returncode == 0, "", ""
19
+ return process.returncode == 0, process.stdout.strip(), process.stderr.strip()
20
+ except FileNotFoundError:
21
+ return False, "", "Command not found"
22
+ except subprocess.CalledProcessError as e:
23
+ return False, "", e.stderr.strip()
24
+
25
+ def check_docker(self):
26
+ """Checks if Docker is installed and the daemon is running."""
27
+ installed, _, _ = self._run_command(["docker", "--version"])
28
+ running, _, _ = self._run_command(["docker", "info"], check_running=True)
29
+ self.checks["docker_installed"] = installed
30
+ self.checks["docker_running"] = running
31
+ return installed and running
32
+
33
+ def run_all_checks(self):
34
+ """Runs all checks and prints a summary."""
35
+ self.check_docker()
36
+
37
+ print("Environment Check Summary:")
38
+ for check, result in self.checks.items():
39
+ if "version" in check:
40
+ print(f"- {check.replace('_',' ').title()}: {result}")
41
+ else:
42
+ status = "OK" if result else "FAILED"
43
+ print(f"- {check.replace('_',' ').title()}: {status}")
44
+
45
+ return all(self.checks.values())
@@ -109,13 +109,11 @@ def run(context, flow_context, project_code, asset_id, company_id, repository_di
109
109
  This command will perform IAC analysis at the source code. The analysis
110
110
  results can be reported or not to flow application.
111
111
  """
112
- context.params['company_id'] = company_id if company_id is not None else None
113
-
114
112
  if not from_ast:
115
113
  prepared_context = RequirementsVerifier.prepare_context(clone(context))
116
114
 
117
115
  params_to_copy = [
118
- 'project_code', 'asset_id', 'repository_dir', 'send_to_flow',
116
+ 'project_code', 'asset_id', 'company_id', 'repository_dir', 'send_to_flow',
119
117
  'deploy_id', 'scanner_timeout', 'parallel_workers', 'experimental'
120
118
  ]
121
119
 
@@ -92,6 +92,8 @@ class RequirementsVerifier:
92
92
  @staticmethod
93
93
  def create_asset_with_custom_name(context, company_id, asset_name):
94
94
  """ Create an asset with custom name pass with a custom name """
95
+ if not asset_name or not asset_name.strip(): # Check for None or blank string
96
+ raise ValueError("Asset name cannot be None or blank.")
95
97
 
96
98
  # we need to verify if already has an asset with the name provided.
97
99
  # because graphql will return an error if already has.