devsecops-engine-tools 1.6.7__py3-none-any.whl

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.

Potentially problematic release.


This version of devsecops-engine-tools might be problematic. Click here for more details.

Files changed (231) hide show
  1. devsecops_engine_tools/__init__.py +0 -0
  2. devsecops_engine_tools/engine_core/__init__.py +0 -0
  3. devsecops_engine_tools/engine_core/src/__init__.py +0 -0
  4. devsecops_engine_tools/engine_core/src/applications/__init__.py +0 -0
  5. devsecops_engine_tools/engine_core/src/applications/runner_engine_core.py +124 -0
  6. devsecops_engine_tools/engine_core/src/deployment/__init__.py +0 -0
  7. devsecops_engine_tools/engine_core/src/deployment/infrastructure/__init__.py +0 -0
  8. devsecops_engine_tools/engine_core/src/domain/__init__.py +0 -0
  9. devsecops_engine_tools/engine_core/src/domain/model/__init__.py +0 -0
  10. devsecops_engine_tools/engine_core/src/domain/model/customs_exceptions.py +9 -0
  11. devsecops_engine_tools/engine_core/src/domain/model/exclusions.py +14 -0
  12. devsecops_engine_tools/engine_core/src/domain/model/finding.py +20 -0
  13. devsecops_engine_tools/engine_core/src/domain/model/gateway/__init__.py +0 -0
  14. devsecops_engine_tools/engine_core/src/domain/model/gateway/devops_platform_gateway.py +27 -0
  15. devsecops_engine_tools/engine_core/src/domain/model/gateway/metrics_manager_gateway.py +7 -0
  16. devsecops_engine_tools/engine_core/src/domain/model/gateway/printer_table_gateway.py +13 -0
  17. devsecops_engine_tools/engine_core/src/domain/model/gateway/secrets_manager_gateway.py +7 -0
  18. devsecops_engine_tools/engine_core/src/domain/model/gateway/vulnerability_management_gateway.py +17 -0
  19. devsecops_engine_tools/engine_core/src/domain/model/input_core.py +12 -0
  20. devsecops_engine_tools/engine_core/src/domain/model/level_compliance.py +3 -0
  21. devsecops_engine_tools/engine_core/src/domain/model/level_vulnerability.py +7 -0
  22. devsecops_engine_tools/engine_core/src/domain/model/threshold.py +12 -0
  23. devsecops_engine_tools/engine_core/src/domain/model/vulnerability_management.py +20 -0
  24. devsecops_engine_tools/engine_core/src/domain/usecases/__init__.py +0 -0
  25. devsecops_engine_tools/engine_core/src/domain/usecases/break_build.py +375 -0
  26. devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py +148 -0
  27. devsecops_engine_tools/engine_core/src/domain/usecases/metrics_manager.py +59 -0
  28. devsecops_engine_tools/engine_core/src/infrastructure/__init__.py +0 -0
  29. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/__init__.py +0 -0
  30. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/__init__.py +0 -0
  31. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/s3_manager.py +52 -0
  32. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/secrets_manager.py +40 -0
  33. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/__init__.py +0 -0
  34. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/azure_devops.py +103 -0
  35. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/__init__.py +0 -0
  36. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py +215 -0
  37. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_pretty_table/__init__.py +0 -0
  38. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_pretty_table/printer_pretty_table.py +84 -0
  39. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/runtime_local/__init__.py +0 -0
  40. devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/runtime_local/runtime_local.py +71 -0
  41. devsecops_engine_tools/engine_core/src/infrastructure/entry_points/__init__.py +0 -0
  42. devsecops_engine_tools/engine_core/src/infrastructure/entry_points/entry_point_core.py +50 -0
  43. devsecops_engine_tools/engine_core/src/infrastructure/helpers/__init__.py +0 -0
  44. devsecops_engine_tools/engine_core/src/infrastructure/helpers/aws.py +9 -0
  45. devsecops_engine_tools/engine_core/src/infrastructure/helpers/util.py +15 -0
  46. devsecops_engine_tools/engine_dast/__init__.py +0 -0
  47. devsecops_engine_tools/engine_dast/src/__init__.py +0 -0
  48. devsecops_engine_tools/engine_dast/src/applications/__init__.py +0 -0
  49. devsecops_engine_tools/engine_dast/src/deployment/__init__.py +0 -0
  50. devsecops_engine_tools/engine_dast/src/deployment/infrastructure/__init__.py +0 -0
  51. devsecops_engine_tools/engine_dast/src/domain/__init__.py +0 -0
  52. devsecops_engine_tools/engine_dast/src/domain/model/__init__.py +0 -0
  53. devsecops_engine_tools/engine_dast/src/domain/usecases/__init__.py +0 -0
  54. devsecops_engine_tools/engine_dast/src/infrastructure/__init__.py +0 -0
  55. devsecops_engine_tools/engine_dast/src/infrastructure/driven_adapters/__init__.py +0 -0
  56. devsecops_engine_tools/engine_dast/src/infrastructure/entry_points/__init__.py +0 -0
  57. devsecops_engine_tools/engine_dast/src/infrastructure/helpers/__init__.py +0 -0
  58. devsecops_engine_tools/engine_sast/__init__.py +0 -0
  59. devsecops_engine_tools/engine_sast/engine_iac/__init__.py +0 -0
  60. devsecops_engine_tools/engine_sast/engine_iac/src/__init__.py +0 -0
  61. devsecops_engine_tools/engine_sast/engine_iac/src/applications/__init__.py +0 -0
  62. devsecops_engine_tools/engine_sast/engine_iac/src/applications/runner_iac_scan.py +30 -0
  63. devsecops_engine_tools/engine_sast/engine_iac/src/deployment/__init__.py +0 -0
  64. devsecops_engine_tools/engine_sast/engine_iac/src/deployment/infrastructure/__init__.py +0 -0
  65. devsecops_engine_tools/engine_sast/engine_iac/src/domain/__init__.py +0 -0
  66. devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/__init__.py +0 -0
  67. devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/config_tool.py +24 -0
  68. devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/gateways/__init__.py +0 -0
  69. devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/gateways/tool_gateway.py +6 -0
  70. devsecops_engine_tools/engine_sast/engine_iac/src/domain/usecases/__init__.py +0 -0
  71. devsecops_engine_tools/engine_sast/engine_iac/src/domain/usecases/iac_scan.py +130 -0
  72. devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/__init__.py +0 -0
  73. devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/__init__.py +0 -0
  74. devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/__init__.py +0 -0
  75. devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_config.py +135 -0
  76. devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_deserealizator.py +35 -0
  77. devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_tool.py +195 -0
  78. devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/entry_points/__init__.py +0 -0
  79. devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/entry_points/entry_point_tool.py +6 -0
  80. devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/helpers/__init__.py +0 -0
  81. devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/helpers/file_generator_tool.py +74 -0
  82. devsecops_engine_tools/engine_sast/engine_secret/__init__.py +0 -0
  83. devsecops_engine_tools/engine_sast/engine_secret/src/__init__.py +0 -0
  84. devsecops_engine_tools/engine_sast/engine_secret/src/applications/__init__.py +0 -0
  85. devsecops_engine_tools/engine_sast/engine_secret/src/applications/runner_secret_scan.py +34 -0
  86. devsecops_engine_tools/engine_sast/engine_secret/src/deployment/__init__.py +0 -0
  87. devsecops_engine_tools/engine_sast/engine_secret/src/deployment/infrastructure/__init__.py +0 -0
  88. devsecops_engine_tools/engine_sast/engine_secret/src/domain/__init__.py +0 -0
  89. devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/DeserializeConfigTool.py +11 -0
  90. devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/__init__.py +0 -0
  91. devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/__init__.py +0 -0
  92. devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/gateway_deserealizator.py +11 -0
  93. devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/git_gateway.py +15 -0
  94. devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/tool_gateway.py +16 -0
  95. devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/__init__.py +0 -0
  96. devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py +72 -0
  97. devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py +73 -0
  98. devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/__init__.py +0 -0
  99. devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/__init__.py +0 -0
  100. devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/git_cli/__init__.py +0 -0
  101. devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/git_cli/git_run.py +60 -0
  102. devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/__init__.py +0 -0
  103. devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_deserealizator.py +39 -0
  104. devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py +104 -0
  105. devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/__init__.py +0 -0
  106. devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py +11 -0
  107. devsecops_engine_tools/engine_sca/__init__.py +0 -0
  108. devsecops_engine_tools/engine_sca/engine_container/__init__.py +0 -0
  109. devsecops_engine_tools/engine_sca/engine_container/src/__init__.py +0 -0
  110. devsecops_engine_tools/engine_sca/engine_container/src/applications/__init__.py +0 -0
  111. devsecops_engine_tools/engine_sca/engine_container/src/applications/runner_container_scan.py +45 -0
  112. devsecops_engine_tools/engine_sca/engine_container/src/deployment/__init__.py +0 -0
  113. devsecops_engine_tools/engine_sca/engine_container/src/deployment/infrastructure/__init__.py +0 -0
  114. devsecops_engine_tools/engine_sca/engine_container/src/domain/__init__.py +0 -0
  115. devsecops_engine_tools/engine_sca/engine_container/src/domain/model/__init__.py +0 -0
  116. devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/__init__.py +0 -0
  117. devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/deserealizator_gateway.py +8 -0
  118. devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/images_gateway.py +7 -0
  119. devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/tool_gateway.py +7 -0
  120. devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/__init__.py +0 -0
  121. devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py +82 -0
  122. devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/handle_remote_config_patterns.py +67 -0
  123. devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/set_input_core.py +76 -0
  124. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/__init__.py +0 -0
  125. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/__init__.py +0 -0
  126. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/__init__.py +0 -0
  127. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/docker_images.py +22 -0
  128. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/__init__.py +0 -0
  129. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_cloud_manager_scan.py +123 -0
  130. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_deserialize_output.py +62 -0
  131. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/__init__.py +0 -0
  132. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_deserialize_output.py +48 -0
  133. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_manager_scan.py +114 -0
  134. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/__init__.py +0 -0
  135. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py +40 -0
  136. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/helpers/__init__.py +0 -0
  137. devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/helpers/images_scanned.py +16 -0
  138. devsecops_engine_tools/engine_sca/engine_dependencies/__init__.py +0 -0
  139. devsecops_engine_tools/engine_sca/engine_dependencies/src/__init__.py +0 -0
  140. devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/__init__.py +0 -0
  141. devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/runner_dependencies_scan.py +32 -0
  142. devsecops_engine_tools/engine_sca/engine_dependencies/src/deployment/__init__.py +0 -0
  143. devsecops_engine_tools/engine_sca/engine_dependencies/src/deployment/infrastructure/__init__.py +0 -0
  144. devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/__init__.py +0 -0
  145. devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/__init__.py +0 -0
  146. devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/gateways/__init__.py +0 -0
  147. devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/gateways/deserializator_gateway.py +8 -0
  148. devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/gateways/tool_gateway.py +9 -0
  149. devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/__init__.py +0 -0
  150. devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/dependencies_sca_scan.py +44 -0
  151. devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/find_artifacts.py +95 -0
  152. devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/find_mono_repos.py +29 -0
  153. devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/handle_remote_config_patterns.py +90 -0
  154. devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/set_input_core.py +65 -0
  155. devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/__init__.py +0 -0
  156. devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/__init__.py +0 -0
  157. devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/__init__.py +0 -0
  158. devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_deserialize_output.py +57 -0
  159. devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_manager_scan.py +154 -0
  160. devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/__init__.py +0 -0
  161. devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/entry_point_tool.py +83 -0
  162. devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/__init__.py +0 -0
  163. devsecops_engine_tools/engine_utilities/__init__.py +0 -0
  164. devsecops_engine_tools/engine_utilities/azuredevops/__init__.py +0 -0
  165. devsecops_engine_tools/engine_utilities/azuredevops/infrastructure/__init__.py +0 -0
  166. devsecops_engine_tools/engine_utilities/azuredevops/infrastructure/azure_devops_api.py +67 -0
  167. devsecops_engine_tools/engine_utilities/azuredevops/models/AzureMessageLoggingPipeline.py +21 -0
  168. devsecops_engine_tools/engine_utilities/azuredevops/models/AzurePredefinedVariables.py +65 -0
  169. devsecops_engine_tools/engine_utilities/azuredevops/models/__init__.py +0 -0
  170. devsecops_engine_tools/engine_utilities/defect_dojo/__init__.py +5 -0
  171. devsecops_engine_tools/engine_utilities/defect_dojo/applications/__init__.py +0 -0
  172. devsecops_engine_tools/engine_utilities/defect_dojo/applications/connect.py +37 -0
  173. devsecops_engine_tools/engine_utilities/defect_dojo/applications/defect_dojo.py +40 -0
  174. devsecops_engine_tools/engine_utilities/defect_dojo/applications/finding.py +40 -0
  175. devsecops_engine_tools/engine_utilities/defect_dojo/domain/__init__.py +0 -0
  176. devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/__init__.py +0 -0
  177. devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/cmdb.py +11 -0
  178. devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/engagement.py +55 -0
  179. devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/finding.py +96 -0
  180. devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/product.py +35 -0
  181. devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/product_list.py +12 -0
  182. devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/product_type.py +16 -0
  183. devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/product_type_list.py +13 -0
  184. devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/scan_configuration.py +21 -0
  185. devsecops_engine_tools/engine_utilities/defect_dojo/domain/request_objects/__init__.py +0 -0
  186. devsecops_engine_tools/engine_utilities/defect_dojo/domain/request_objects/finding.py +95 -0
  187. devsecops_engine_tools/engine_utilities/defect_dojo/domain/request_objects/import_scan.py +125 -0
  188. devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/__init__.py +0 -0
  189. devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/finding.py +100 -0
  190. devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/import_scan.py +223 -0
  191. devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/__init__.py +0 -0
  192. devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/cmdb.py +59 -0
  193. devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/finding.py +38 -0
  194. devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/import_scan.py +133 -0
  195. devsecops_engine_tools/engine_utilities/defect_dojo/hello_world.py +2 -0
  196. devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/__init__.py +0 -0
  197. devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/__init__.py +0 -0
  198. devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/cmdb.py +55 -0
  199. devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/engagement.py +55 -0
  200. devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/finding.py +37 -0
  201. devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/import_scan.py +115 -0
  202. devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/product.py +50 -0
  203. devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/product_type.py +59 -0
  204. devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/scan_configurations.py +65 -0
  205. devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/settings/__init__.py +0 -0
  206. devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/settings/settings.py +1 -0
  207. devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/repository/__init__.py +0 -0
  208. devsecops_engine_tools/engine_utilities/github/__init__.py +0 -0
  209. devsecops_engine_tools/engine_utilities/github/infrastructure/__init__.py +0 -0
  210. devsecops_engine_tools/engine_utilities/github/infrastructure/github_api.py +49 -0
  211. devsecops_engine_tools/engine_utilities/github/models/__init__.py +0 -0
  212. devsecops_engine_tools/engine_utilities/input_validations/__init__.py +0 -0
  213. devsecops_engine_tools/engine_utilities/input_validations/env_utils.py +10 -0
  214. devsecops_engine_tools/engine_utilities/input_validations/validate_input_with_regex_letters_number_and_only.py +8 -0
  215. devsecops_engine_tools/engine_utilities/settings.py +38 -0
  216. devsecops_engine_tools/engine_utilities/ssh/__init__.py +0 -0
  217. devsecops_engine_tools/engine_utilities/ssh/managment_private_key.py +67 -0
  218. devsecops_engine_tools/engine_utilities/utils/__init__.py +0 -0
  219. devsecops_engine_tools/engine_utilities/utils/api_error.py +14 -0
  220. devsecops_engine_tools/engine_utilities/utils/dataclass_classmethod.py +84 -0
  221. devsecops_engine_tools/engine_utilities/utils/datetime_parsing.py +10 -0
  222. devsecops_engine_tools/engine_utilities/utils/logger_info.py +109 -0
  223. devsecops_engine_tools/engine_utilities/utils/name_conversion.py +12 -0
  224. devsecops_engine_tools/engine_utilities/utils/printers.py +21 -0
  225. devsecops_engine_tools/engine_utilities/utils/session_manager.py +14 -0
  226. devsecops_engine_tools/version.py +1 -0
  227. devsecops_engine_tools-1.6.7.dist-info/METADATA +156 -0
  228. devsecops_engine_tools-1.6.7.dist-info/RECORD +231 -0
  229. devsecops_engine_tools-1.6.7.dist-info/WHEEL +5 -0
  230. devsecops_engine_tools-1.6.7.dist-info/entry_points.txt +2 -0
  231. devsecops_engine_tools-1.6.7.dist-info/top_level.txt +1 -0
@@ -0,0 +1,14 @@
1
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
2
+ from marshmallow import ValidationError
3
+ from requests import Response
4
+
5
+
6
+ class ApiError(ValidationError):
7
+ def __init__(self, message):
8
+ m = ""
9
+ if isinstance(message, dict):
10
+ m = str(message.get("message")) if message.get("message") else ""
11
+ m += str(message.get("detail")) if message.get("detail") else ""
12
+ else:
13
+ m = str(message)
14
+ super().__init__({"message": str(m)})
@@ -0,0 +1,84 @@
1
+ import dataclasses
2
+ import typing
3
+ import datetime
4
+ import enum
5
+ from inspect import isclass
6
+ from .name_conversion import camel_case_to_snake_case, snake_case_to_camel_case
7
+ from .datetime_parsing import iso_from_datetime, parse_iso_datetime
8
+
9
+
10
+ class FromDictMixin:
11
+ @staticmethod
12
+ def attribute_to_dict(attribute):
13
+ if hasattr(attribute, "to_dict") and callable(attribute.to_dict):
14
+ return getattr(attribute, "to_dict")()
15
+ return attribute
16
+
17
+ def to_dict(self):
18
+ if self == {}:
19
+ return self
20
+ available_fields = {field.name: field for field in dataclasses.fields(self)}
21
+ transformed_data = {}
22
+ for field_name, field_type in available_fields.items():
23
+ navitaire_key = snake_case_to_camel_case(field_name)
24
+ attribute = getattr(self, field_name)
25
+ if isinstance(attribute, list):
26
+ transformed_data[navitaire_key] = []
27
+ for element in attribute:
28
+ transformed_data[navitaire_key].append(FromDictMixin.attribute_to_dict(element))
29
+ elif isinstance(attribute, dict):
30
+ transformed_data[navitaire_key] = {}
31
+ for key, element in attribute.items():
32
+ transformed_data[navitaire_key][key] = FromDictMixin.attribute_to_dict(element)
33
+ elif isinstance(attribute, enum.Enum):
34
+ transformed_data[navitaire_key] = attribute.value
35
+ elif isinstance(attribute, datetime.datetime):
36
+ transformed_data[navitaire_key] = iso_from_datetime(attribute)
37
+ else:
38
+ transformed_data[navitaire_key] = FromDictMixin.attribute_to_dict(attribute)
39
+ return transformed_data
40
+
41
+ @classmethod
42
+ def from_dict(cls, data):
43
+ built_in_types = (int, str, bool, float)
44
+ available_fields = {field.name: field for field in dataclasses.fields(cls)}
45
+ transformed_data = {}
46
+ for key, value in data.items():
47
+ internal_key = camel_case_to_snake_case(key)
48
+ if internal_key in available_fields.keys() and value:
49
+ matching_internal_field = available_fields[internal_key]
50
+ if matching_internal_field.type in built_in_types:
51
+ internal_value = value
52
+ elif matching_internal_field.type == datetime.datetime and value:
53
+ internal_value = parse_iso_datetime(value)
54
+ elif isclass(matching_internal_field.type) and issubclass(matching_internal_field.type, enum.Enum):
55
+ internal_value = matching_internal_field.type(value)
56
+ elif hasattr(matching_internal_field.type, "from_dict") and callable(
57
+ matching_internal_field.type.from_dict
58
+ ):
59
+ internal_value = matching_internal_field.type.from_dict(value)
60
+ elif (
61
+ isinstance(matching_internal_field.type, typing._GenericAlias)
62
+ and matching_internal_field.type.__origin__ == list
63
+ ):
64
+ value_class = matching_internal_field.type.__args__[0]
65
+ internal_value = []
66
+ if hasattr(value_class, "from_dict") and callable(value_class.from_dict):
67
+ internal_value = [value_class.from_dict(v) for v in value]
68
+ else:
69
+ internal_value = [v for v in value]
70
+ elif (
71
+ isinstance(matching_internal_field.type, typing._GenericAlias)
72
+ and matching_internal_field.type.__origin__ == dict
73
+ ):
74
+ value_class = matching_internal_field.type.__args__[1]
75
+ internal_value = {}
76
+ if hasattr(value_class, "from_dict") and callable(value_class.from_dict):
77
+ internal_value = {k: value_class.from_dict(v) for k, v in value.items()}
78
+ else:
79
+ internal_value = value
80
+ else:
81
+ internal_value = None
82
+ if internal_value:
83
+ transformed_data[internal_key] = internal_value
84
+ return cls(**transformed_data)
@@ -0,0 +1,10 @@
1
+ import datetime
2
+ import dateutil.parser
3
+
4
+
5
+ def parse_iso_datetime(datetime_string: str):
6
+ return dateutil.parser.isoparse(datetime_string)
7
+
8
+
9
+ def iso_from_datetime(dt: datetime.datetime):
10
+ return dt.isoformat()
@@ -0,0 +1,109 @@
1
+ # -*- coding: utf-8 -*-
2
+ import logging
3
+ import os
4
+ import datetime
5
+
6
+ log_records = []
7
+
8
+
9
+ class CustomFormatter(logging.Formatter):
10
+ grey = "\x1b[38;20m"
11
+ yellow = "\x1b[33;20m"
12
+ red = "\x1b[31;20m"
13
+ bold_red = "\x1b[31;1m"
14
+ reset = "\x1b[0m"
15
+ format = "%(asctime)s [%(levelname)s | %(filename)s | %(funcName)s | %(lineno)d] > %(message)s"
16
+
17
+ FORMATS = {
18
+ logging.DEBUG: grey + format + reset,
19
+ logging.INFO: grey + format + reset,
20
+ logging.WARNING: yellow + format + reset,
21
+ logging.ERROR: red + format + reset,
22
+ logging.CRITICAL: bold_red + format + reset,
23
+ }
24
+
25
+ def format(self, record):
26
+ log_fmt = self.FORMATS.get(record.levelno)
27
+ formatter = logging.Formatter(log_fmt)
28
+ return formatter.format(record)
29
+
30
+
31
+ class JsonFormatter(logging.Formatter):
32
+ def format(self, record):
33
+ log_data = {
34
+ "timestamp": self.formatTime(record),
35
+ "level": record.levelname,
36
+ "message": record.getMessage(),
37
+ "module": record.module,
38
+ "funcName": record.funcName,
39
+ "lineno": record.lineno
40
+ }
41
+ return log_data
42
+
43
+
44
+ class ListHandler(logging.Handler):
45
+ def emit(self, record):
46
+ log_record = self.format(record)
47
+ log_records.append(log_record)
48
+
49
+
50
+ class SingletonType(type):
51
+ _instances = {}
52
+
53
+ def __call__(cls, *args, **kwargs):
54
+ if cls not in cls._instances:
55
+ cls._instances[cls] = super(SingletonType, cls).__call__(*args, **kwargs)
56
+ return cls._instances[cls]
57
+
58
+
59
+ class MyLogger(metaclass=SingletonType):
60
+ """resive como parametro bool si es
61
+ True cre un archivo de logs por default is False"""
62
+
63
+ _logger = None
64
+
65
+ def __init__(self, *args, **kwargs):
66
+ self._logger = logging.getLogger("crumbs")
67
+ if kwargs["debug"]:
68
+ self._logger.setLevel(logging.DEBUG)
69
+ else:
70
+ self._logger.setLevel(logging.WARNING)
71
+
72
+ if kwargs["log_file"]:
73
+ now = datetime.datetime.now()
74
+ dirname = "./log"
75
+ if not os.path.isdir(dirname):
76
+ os.mkdir(dirname)
77
+ if kwargs["log_file_format"] == "log":
78
+ # log with file log
79
+ file_handler = logging.FileHandler(
80
+ dirname + "/log_" + now.strftime("%Y-%m-%d") + ".log"
81
+ )
82
+ formatter = logging.Formatter(
83
+ "%(asctime)s [%(levelname)s | %(filename)s | %(funcName)s | %(lineno)d] > %(message)s"
84
+ )
85
+ file_handler.setFormatter(formatter)
86
+ self._logger.addHandler(file_handler)
87
+ elif kwargs["log_file_format"] == "json":
88
+ # log with file json
89
+ file_handler = ListHandler()
90
+ file_handler.setFormatter(JsonFormatter())
91
+ self._logger.addHandler(file_handler)
92
+ if kwargs["log_console"]:
93
+ # log whit console
94
+ stream_handler = logging.StreamHandler()
95
+ stream_handler.setFormatter(CustomFormatter())
96
+ self._logger.addHandler(stream_handler)
97
+
98
+ def get_logger(self):
99
+ return self._logger
100
+
101
+
102
+ # forma de llamado
103
+ # if __name__ == "__main__":
104
+ # logger = MyLogger.__call__(True)(True).get_logger()
105
+ # logger.info("debug message")
106
+ # logger.info("info message")
107
+ # logger.warning("warning message")
108
+ # logger.error("error message")
109
+ # logger.critical("critical message")
@@ -0,0 +1,12 @@
1
+ import re
2
+
3
+
4
+ def camel_case_to_snake_case(value):
5
+ return re.sub(r"(?<=[a-z])(?=[A-Z])", "_", value).lower()
6
+
7
+
8
+ def snake_case_to_camel_case(value):
9
+ parts = value.split("_")
10
+ parts[0] = parts[0].lower()
11
+ parts[1:] = [part.capitalize() for part in parts[1:]]
12
+ return "".join(parts)
@@ -0,0 +1,21 @@
1
+ import pyfiglet
2
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
3
+ from devsecops_engine_tools.engine_utilities import settings
4
+ import logging
5
+
6
+ logger = logging.getLogger(__name__)
7
+ logging.basicConfig(format="%(message)s", level=logging.INFO)
8
+
9
+
10
+ class Printers:
11
+ @staticmethod
12
+ def print_logo_tool(banner: str):
13
+ print(pyfiglet.figlet_format(banner, font="slant"))
14
+
15
+ @staticmethod
16
+ def print_title(title: str):
17
+ logger.info("\n")
18
+ logger.info("*" * len(title))
19
+ logger.info(title)
20
+ logger.info("*" * len(title))
21
+ logger.info("\n")
@@ -0,0 +1,14 @@
1
+ import requests
2
+
3
+
4
+ class SessionManager:
5
+ _instance = None
6
+ _token = None
7
+ _host = None
8
+
9
+ def __new__(cls, token=None, host=None):
10
+ cls._token = token
11
+ cls._host = host
12
+ if not cls._instance:
13
+ cls._instance = requests.Session()
14
+ return cls
@@ -0,0 +1 @@
1
+ version = '1.6.7'
@@ -0,0 +1,156 @@
1
+ Metadata-Version: 2.1
2
+ Name: devsecops-engine-tools
3
+ Version: 1.6.7
4
+ Summary: Tool for DevSecOps strategy
5
+ Home-page: https://github.com/bancolombia/devsecops-engine-tools
6
+ Author: Bancolombia DevSecOps Team
7
+ Author-email: devsecops@bancolombia.com.co
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
10
+ Classifier: Operating System :: OS Independent
11
+ Requires-Python: >=3.8
12
+ Description-Content-Type: text/markdown
13
+ Requires-Dist: requests ==2.31.0
14
+ Requires-Dist: multipledispatch ==0.6.0
15
+ Requires-Dist: PyYAML ==6.0.1
16
+ Requires-Dist: checkov ==2.3.296
17
+ Requires-Dist: pyfiglet ==0.7
18
+ Requires-Dist: prettytable ==3.8.0
19
+ Requires-Dist: azure-devops ==7.1.0b3
20
+ Requires-Dist: marshmallow ==3.19.0
21
+ Requires-Dist: pytz ==2023.3
22
+ Requires-Dist: python-decouple ==3.8
23
+ Requires-Dist: requests-toolbelt ==1.0.0
24
+ Requires-Dist: python-dateutil ==2.8.2
25
+ Requires-Dist: pexpect ==4.9.0
26
+
27
+ # DevSecOps Engine Tools
28
+
29
+ [![Maintained by Bancolombia](https://img.shields.io/badge/maintained_by-Bancolombia-yellow)](#)
30
+ [![Build](https://github.com/bancolombia/devsecops-engine-tools/actions/workflows/build.yml/badge.svg)](https://github.com/bancolombia/devsecops-engine-tools/actions/workflows/build.yml)
31
+ [![Python Version](https://img.shields.io/badge/python%20-%203.8%20%7C%203.9%20%7C%203.10%20%7C%203.11%20%7C%203.12%20-blue)](#)
32
+
33
+ # Objective
34
+
35
+ Tool that unifies the evaluation of the different devsecops practices being agnostic to the devops platform, using both open source and market tools.
36
+
37
+ # Component
38
+
39
+ πŸ“¦ [tools](https://github.com/bancolombia/devsecops-engine-tools/tree/trunk/tools): DevSecOps Practice Modules
40
+
41
+ # Communications channel
42
+
43
+ Here are the channels we use to communicate about the project:
44
+
45
+ **1. Mailing list:** You can join our mailing list to always be informed at the following link: [CommunityDevsecopsEngine](https://groups.google.com/g/CommunityDevsecopsEngine)
46
+
47
+ **2. Email:** You can write to us by email: MaintainersDevsecopsEngine@googlegroups.com
48
+
49
+ # Getting started
50
+
51
+ ### Requirements
52
+
53
+ - Python >= 3.8
54
+
55
+ ### Installation
56
+
57
+ ```bash
58
+ pip3 install devsecops-engine-tools
59
+ ```
60
+
61
+ ### Scan running - flags (CLI)
62
+
63
+ ```bash
64
+ devsecops-engine-tools --platform_devops ["local","azure"] --remote_config_repo ["remote_config_repo"] --tool ["engine_iac", "engine_dast", "engine_secret", "engine_dependencies", "engine_container"] --folder_path ["Folder path scan engine_iac"] --platform ["eks","openshift"] --use_secrets_manager ["false", "true"] --use_vulnerability_management ["false", "true"] --send_metrics ["false", "true"] --token_cmdb ["token_cmdb"] --token_vulnerability_management ["token_vulnerability_management"] --token_engine_container ["token_engine_container"] --token_engine_dependencies ["token_engine_dependencies"]
65
+ ```
66
+
67
+ ### Structure Remote Config
68
+ [example_remote_config_local](https://github.com/bancolombia/devsecops-engine-tools/blob/trunk/example_remote_config_local/)
69
+ ```bash
70
+ πŸ“¦Remote_Config
71
+ ┣ πŸ“‚engine_core
72
+ ┃ β”— πŸ“œConfigTool.json
73
+ ┣ πŸ“‚engine_sast
74
+ ┃ β”— πŸ“‚engine_iac
75
+ ┃ β”— πŸ“œConfigTool.json
76
+ ┃ β”— πŸ“œExclusions.json
77
+ ┃ β”— πŸ“‚engine_secret
78
+ ┃ β”— πŸ“œConfigTool.json
79
+ ┣ πŸ“‚engine_sca
80
+ ┃ β”— πŸ“‚engine_container
81
+ ┃ β”— πŸ“œConfigTool.json
82
+ ┃ β”— πŸ“œExclusions.json
83
+ ┃ β”— πŸ“‚engine_dependencies
84
+ ┃ β”— πŸ“œConfigTool.json
85
+ ┃ β”— πŸ“œExclusions.json
86
+ ```
87
+ ### Scan running sample (CLI) - Local
88
+
89
+ > Complete the value in **.envdetlocal** file a set in execution environment
90
+ ```
91
+ $ set -a
92
+ $ source .envdetlocal
93
+ $ set +a
94
+ ```
95
+
96
+
97
+ ```bash
98
+ devsecops-engine-tools --platform_devops local --remote_config_repo DevSecOps_Remote_Config --tool engine_iac
99
+
100
+ ```
101
+ ### Scan result sample (CLI)
102
+
103
+ ```bash
104
+ ____ _____ ____ ______ _ ______ __
105
+ / __ \___ _ __/ ___/___ _____/ __ \____ _____ / ____/___ ____ _(_)___ ___ /_ __/___ ____ / /____
106
+ / / / / _ \ | / /\__ \/ _ \/ ___/ / / / __ \/ ___/ / __/ / __ \/ __ `/ / __ \/ _ \ / / / __ \/ __ \/ / ___/
107
+ / /_/ / __/ |/ /___/ / __/ /__/ /_/ / /_/ (__ ) / /___/ / / / /_/ / / / / / __/ / / / /_/ / /_/ / (__ )
108
+ /_____/\___/|___//____/\___/\___/\____/ .___/____/ /_____/_/ /_/\__, /_/_/ /_/\___/ /_/ \____/\____/_/____/
109
+ /_/ /____/
110
+
111
+ Secrets manager is not enabled to configure external checks
112
+
113
+ Below are all vulnerabilities detected.
114
+ ╔══════════╦════════════╦════════════════════════════════════════════════════════════════════════════════════╦════════════════════════╗
115
+ β•‘ Severity β•‘ ID β•‘ Description β•‘ Where β•‘
116
+ ╠══════════╬════════════╬════════════════════════════════════════════════════════════════════════════════════╬════════════════════════╣
117
+ β•‘ critical β•‘ CKV_K8S_37 β•‘ IAC-CKV_K8S_37 Minimize the admission of containers with capabilities assigned β•‘ /_AW1234/app.yaml β•‘
118
+ β•‘ critical β•‘ CKV_K8S_20 β•‘ IAC-CKV_K8S_20 Containers should not run with allowPrivilegeEscalation β•‘ /_AW1234/app.yaml β•‘
119
+ β•‘ critical β•‘ CKV_K8S_30 β•‘ IAC-CKV_K8S_30 Apply security context to your containers β•‘ /_AW1234/app.yaml β•‘
120
+ β•‘ critical β•‘ CKV_K8S_23 β•‘ IAC-CKV_K8S_23 Minimize the admission of root containers β•‘ /_AW1234/app.yaml β•‘
121
+ β•‘ high β•‘ CKV_AWS_20 β•‘ C-S3-005-AWS S3 buckets are accessible to public β•‘ /_AW1234/template.yaml β•‘
122
+ β•‘ high β•‘ CKV_K8S_22 β•‘ IAC-CKV_K8S_22 Use read-only filesystem for containers where possible β•‘ /_AW1234/app.yaml β•‘
123
+ β•‘ high β•‘ CKV_K8S_28 β•‘ IAC-CKV_K8S_28 Minimize the admission of containers with the NET_RAW capability β•‘ /_AW1234/app.yaml β•‘
124
+ β•‘ high β•‘ CKV_K8S_38 β•‘ IAC-CKV_K8S_38 Ensure that Service Account Tokens are only mounted where necessary β•‘ /_AW1234/app.yaml β•‘
125
+ β•šβ•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
126
+ Security count issues (critical: 4, high: 4, medium: 0, low: 0) is greater than or equal to failure criteria (critical: 1, high: 8, medium: 10, low:15, operator: or)
127
+ ✘Failed
128
+
129
+ Below are all compliances issues detected.
130
+ ╔══════════╦═══════════╦════════════════════════════════════════════════════╦═══════════════════╗
131
+ β•‘ Severity β•‘ ID β•‘ Description β•‘ Where β•‘
132
+ ╠══════════╬═══════════╬════════════════════════════════════════════════════╬═══════════════════╣
133
+ β•‘ critical β•‘ CKV_K8S_8 β•‘ IAC-CKV_K8S_8 Liveness Probe Should be Configured β•‘ /_AW1234/app.yaml β•‘
134
+ β•‘ critical β•‘ CKV_K8S_9 β•‘ IAC-CKV_K8S_9 Readiness Probe Should be Configured β•‘ /_AW1234/app.yaml β•‘
135
+ β•šβ•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
136
+ Compliance issues count (critical: 2) is greater than or equal to failure criteria (critical: 1)
137
+ ✘Failed
138
+
139
+ Bellow are all the findings that were accepted.
140
+ ╔══════════╦════════════╦═══════════════════╦═════════════╦══════════════╦══════════════════╗
141
+ β•‘ Severity β•‘ ID β•‘ Where β•‘ Create Date β•‘ Expired Date β•‘ Reason β•‘
142
+ ╠══════════╬════════════╬═══════════════════╬═════════════╬══════════════╬══════════════════╣
143
+ β•‘ high β•‘ CKV_K8S_38 β•‘ /_AW1234/app.yaml β•‘ 18/11/2023 β•‘ 18/03/2024 β•‘ False Positive β•‘
144
+ β•šβ•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
145
+
146
+ message custom
147
+ ```
148
+
149
+ # How can I help?
150
+
151
+ Review the issues, we hear new ideas. Read more [Contributing](https://github.com/bancolombia/devsecops-engine-tools/blob/trunk/docs/CONTRIBUTING.md)
152
+
153
+
154
+
155
+
156
+