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,375 @@
1
+ from dataclasses import dataclass
2
+ from functools import reduce
3
+
4
+ from devsecops_engine_tools.engine_core.src.domain.model.input_core import InputCore
5
+ from devsecops_engine_tools.engine_core.src.domain.model.finding import (
6
+ Finding,
7
+ Category,
8
+ )
9
+ from devsecops_engine_tools.engine_core.src.domain.model.exclusions import Exclusions
10
+ from devsecops_engine_tools.engine_core.src.domain.model.gateway.devops_platform_gateway import (
11
+ DevopsPlatformGateway,
12
+ )
13
+ from devsecops_engine_tools.engine_core.src.domain.model.gateway.printer_table_gateway import (
14
+ PrinterTableGateway,
15
+ )
16
+
17
+ from collections import Counter
18
+ from datetime import timedelta, datetime
19
+ import pytz
20
+
21
+
22
+ @dataclass
23
+ class BreakBuild:
24
+ def __init__(
25
+ self,
26
+ devops_platform_gateway: DevopsPlatformGateway,
27
+ printer_table_gateway: PrinterTableGateway,
28
+ ):
29
+ self.devops_platform_gateway = devops_platform_gateway
30
+ self.printer_table_gateway = printer_table_gateway
31
+
32
+ def _apply_policie_exception_new_vulnerability_industry(
33
+ self, findings_list: "list[Finding]", exclusions: "list[Exclusions]", args: any
34
+ ):
35
+ if args["tool"] in ["engine_container", "engine_dependencies"]:
36
+ date_actual = datetime.now(pytz.utc)
37
+ for item in findings_list:
38
+ if item.published_date_cve:
39
+ date_initial = datetime.fromisoformat(item.published_date_cve)
40
+ date_final = date_initial + timedelta(days=5)
41
+ if date_initial <= date_actual <= date_final:
42
+ exclusions.append(
43
+ Exclusions(
44
+ **{
45
+ "id": item.id,
46
+ "where": "all",
47
+ "create_date": date_initial.strftime("%d%m%Y"),
48
+ "expired_date": date_final.strftime("%d%m%Y"),
49
+ "reason": "New vulnerability in the industry",
50
+ }
51
+ )
52
+ )
53
+
54
+ def process(self, findings_list: "list[Finding]", input_core: InputCore, args: any):
55
+ devops_platform_gateway = self.devops_platform_gateway
56
+ printer_table_gateway = self.printer_table_gateway
57
+ threshold = input_core.threshold_defined
58
+ exclusions = input_core.totalized_exclusions
59
+ custom_message = input_core.custom_message_break_build
60
+
61
+ scan_result = {
62
+ "findings_excluded": [],
63
+ "vulnerabilities": {},
64
+ "compliances": {},
65
+ }
66
+
67
+ if len(findings_list) != 0:
68
+ self._apply_policie_exception_new_vulnerability_industry(
69
+ findings_list, exclusions, args
70
+ )
71
+
72
+ findings_excluded_list = list(
73
+ filter(
74
+ lambda item: any(
75
+ exclusion.id == item.id
76
+ and (exclusion.where in item.where or "all" in exclusion.where)
77
+ for exclusion in exclusions
78
+ ),
79
+ findings_list,
80
+ )
81
+ )
82
+
83
+ scan_result["findings_excluded"] = list(
84
+ map(
85
+ lambda item: {
86
+ "id": item.id,
87
+ "severity": item.severity,
88
+ "category": item.category.value,
89
+ },
90
+ findings_excluded_list,
91
+ )
92
+ )
93
+
94
+ findings_without_exclusions_list = list(
95
+ filter(
96
+ lambda v: v not in findings_excluded_list,
97
+ findings_list,
98
+ )
99
+ )
100
+
101
+ vulnerabilities_without_exclusions_list = list(
102
+ filter(
103
+ lambda v: v.category == Category.VULNERABILITY,
104
+ findings_without_exclusions_list,
105
+ )
106
+ )
107
+
108
+ compliances_without_exclusions_list = list(
109
+ filter(
110
+ lambda v: v.category == Category.COMPLIANCE,
111
+ findings_without_exclusions_list,
112
+ )
113
+ )
114
+
115
+ vulnerabilities_critical = reduce(
116
+ lambda count, vulnerability: (
117
+ count + 1 if vulnerability.severity == "critical" else count
118
+ ),
119
+ vulnerabilities_without_exclusions_list,
120
+ 0,
121
+ )
122
+ vulnerabilities_high = reduce(
123
+ lambda count, vulnerability: (
124
+ count + 1 if vulnerability.severity == "high" else count
125
+ ),
126
+ vulnerabilities_without_exclusions_list,
127
+ 0,
128
+ )
129
+ vulnerabilities_medium = reduce(
130
+ lambda count, vulnerability: (
131
+ count + 1 if vulnerability.severity == "medium" else count
132
+ ),
133
+ vulnerabilities_without_exclusions_list,
134
+ 0,
135
+ )
136
+ vulnerabilities_low = reduce(
137
+ lambda count, vulnerability: (
138
+ count + 1 if vulnerability.severity == "low" else count
139
+ ),
140
+ vulnerabilities_without_exclusions_list,
141
+ 0,
142
+ )
143
+ vulnerabilities_unknown = reduce(
144
+ lambda count, vulnerability: (
145
+ count + 1 if vulnerability.severity == "unknown" else count
146
+ ),
147
+ vulnerabilities_without_exclusions_list,
148
+ 0,
149
+ )
150
+
151
+ compliance_critical = reduce(
152
+ lambda count, compliance: (
153
+ count + 1 if compliance.severity == "critical" else count
154
+ ),
155
+ compliances_without_exclusions_list,
156
+ 0,
157
+ )
158
+ print()
159
+ if (
160
+ sum(
161
+ [
162
+ vulnerabilities_critical,
163
+ vulnerabilities_high,
164
+ vulnerabilities_medium,
165
+ vulnerabilities_low,
166
+ ]
167
+ )
168
+ == 0
169
+ ):
170
+ print(
171
+ devops_platform_gateway.message(
172
+ "succeeded", "There are no vulnerabilities"
173
+ )
174
+ )
175
+ print(devops_platform_gateway.result_pipeline("succeeded"))
176
+ elif (
177
+ vulnerabilities_critical >= threshold.vulnerability.critical
178
+ or vulnerabilities_high >= threshold.vulnerability.high
179
+ or vulnerabilities_medium >= threshold.vulnerability.medium
180
+ or vulnerabilities_low >= threshold.vulnerability.low
181
+ ):
182
+ print("Below are all vulnerabilities detected.")
183
+ printer_table_gateway.print_table_findings(
184
+ vulnerabilities_without_exclusions_list
185
+ )
186
+ print(
187
+ devops_platform_gateway.message(
188
+ "error",
189
+ "Security count issues (critical: {0}, high: {1}, medium: {2}, low: {3}) is greater than or equal to failure criteria (critical: {4}, high: {5}, medium: {6}, low:{7}, operator: or)".format(
190
+ vulnerabilities_critical,
191
+ vulnerabilities_high,
192
+ vulnerabilities_medium,
193
+ vulnerabilities_low,
194
+ threshold.vulnerability.critical,
195
+ threshold.vulnerability.high,
196
+ threshold.vulnerability.medium,
197
+ threshold.vulnerability.low,
198
+ ),
199
+ )
200
+ )
201
+ print(devops_platform_gateway.result_pipeline("failed"))
202
+
203
+ scan_result["vulnerabilities"] = {
204
+ "threshold": {
205
+ "critical": vulnerabilities_critical,
206
+ "high": vulnerabilities_high,
207
+ "medium": vulnerabilities_medium,
208
+ "low": vulnerabilities_low,
209
+ },
210
+ "status": "failed",
211
+ "found": list(
212
+ map(
213
+ lambda item: {
214
+ "id": item.id,
215
+ "severity": item.severity,
216
+ },
217
+ vulnerabilities_without_exclusions_list,
218
+ )
219
+ ),
220
+ }
221
+ else:
222
+ print("Below are all vulnerabilities detected.")
223
+ printer_table_gateway.print_table_findings(
224
+ vulnerabilities_without_exclusions_list
225
+ )
226
+ print(
227
+ devops_platform_gateway.message(
228
+ "warning",
229
+ "Security count issues (critical: {0}, high: {1}, medium: {2}, low: {3}) is not greater than or equal to failure criteria (critical: {4}, high: {5}, medium: {6}, low:{7}, operator: or)".format(
230
+ vulnerabilities_critical,
231
+ vulnerabilities_high,
232
+ vulnerabilities_medium,
233
+ vulnerabilities_low,
234
+ threshold.vulnerability.critical,
235
+ threshold.vulnerability.high,
236
+ threshold.vulnerability.medium,
237
+ threshold.vulnerability.low,
238
+ ),
239
+ )
240
+ )
241
+
242
+ if devops_platform_gateway.get_variable("stage") == "build":
243
+ print(devops_platform_gateway.result_pipeline("succeeded_with_issues"))
244
+ else:
245
+ print(devops_platform_gateway.result_pipeline("succeeded"))
246
+
247
+ scan_result["vulnerabilities"] = {
248
+ "threshold": {
249
+ "critical": vulnerabilities_critical,
250
+ "high": vulnerabilities_high,
251
+ "medium": vulnerabilities_medium,
252
+ "low": vulnerabilities_low,
253
+ },
254
+ "status": "succeeded",
255
+ "found": list(
256
+ map(
257
+ lambda item: {
258
+ "id": item.id,
259
+ "severity": item.severity,
260
+ },
261
+ vulnerabilities_without_exclusions_list,
262
+ )
263
+ ),
264
+ }
265
+
266
+ ids_vulnerabilitites = list(
267
+ map(lambda x: x.id, vulnerabilities_without_exclusions_list)
268
+ )
269
+ ids_match = list(filter(lambda x: x in ids_vulnerabilitites, threshold.cve))
270
+ if len(ids_match) > 0:
271
+ print(
272
+ devops_platform_gateway.message(
273
+ "error",
274
+ "Scan Failed due to vulnerability policy violations: CVEs Vulnerabilities: {0}".format(
275
+ ",".join(ids_match)
276
+ ),
277
+ )
278
+ )
279
+ print(devops_platform_gateway.result_pipeline("failed"))
280
+
281
+ print()
282
+ if len(compliances_without_exclusions_list) > 0:
283
+ print("Below are all compliances issues detected.")
284
+ printer_table_gateway.print_table_findings(
285
+ compliances_without_exclusions_list
286
+ )
287
+ status = "succeeded"
288
+ if compliance_critical >= threshold.compliance.critical:
289
+ print(
290
+ devops_platform_gateway.message(
291
+ "error",
292
+ "Compliance issues count (critical: {0}) is greater than or equal to failure criteria (critical: {1})".format(
293
+ compliance_critical, threshold.compliance.critical
294
+ ),
295
+ )
296
+ )
297
+ print(devops_platform_gateway.result_pipeline("failed"))
298
+ status = "failed"
299
+ scan_result["compliances"] = {
300
+ "threshold": {"critical": compliance_critical},
301
+ "status": status,
302
+ "found": list(
303
+ map(
304
+ lambda item: {
305
+ "id": item.id,
306
+ "severity": item.severity,
307
+ },
308
+ compliances_without_exclusions_list,
309
+ )
310
+ ),
311
+ }
312
+ else:
313
+ print(
314
+ devops_platform_gateway.message(
315
+ "succeeded", "There are no compliances issues"
316
+ )
317
+ )
318
+ print(devops_platform_gateway.result_pipeline("succeeded"))
319
+ print()
320
+ if len(findings_excluded_list) > 0:
321
+ exclusions_list = list(
322
+ map(
323
+ lambda item: {
324
+ "severity": item.severity,
325
+ "id": item.id,
326
+ "where": item.where,
327
+ "create_date": next(
328
+ (
329
+ elem.create_date
330
+ for elem in exclusions
331
+ if elem.id == item.id
332
+ ),
333
+ None,
334
+ ),
335
+ "expired_date": next(
336
+ (
337
+ elem.expired_date
338
+ for elem in exclusions
339
+ if elem.id == item.id
340
+ ),
341
+ None,
342
+ ),
343
+ "reason": next(
344
+ (
345
+ elem.reason
346
+ for elem in exclusions
347
+ if elem.id == item.id
348
+ ),
349
+ None,
350
+ ),
351
+ },
352
+ findings_excluded_list,
353
+ )
354
+ )
355
+ print(
356
+ devops_platform_gateway.message(
357
+ "warning", "Bellow are all findings that were excepted."
358
+ )
359
+ )
360
+ printer_table_gateway.print_table_exclusions(exclusions_list)
361
+ for reason, total in Counter(
362
+ map(lambda x: x["reason"], exclusions_list)
363
+ ).items():
364
+ print("{0} findings count: {1}".format(reason, total))
365
+ else:
366
+ print(devops_platform_gateway.message("succeeded", "There are no findings"))
367
+ print(devops_platform_gateway.result_pipeline("succeeded"))
368
+ print()
369
+ print(
370
+ devops_platform_gateway.message(
371
+ "info",
372
+ custom_message,
373
+ )
374
+ )
375
+ return scan_result
@@ -0,0 +1,148 @@
1
+ from devsecops_engine_tools.engine_sast.engine_iac.src.applications.runner_iac_scan import (
2
+ runner_engine_iac,
3
+ )
4
+ from devsecops_engine_tools.engine_sast.engine_secret.src.applications.runner_secret_scan import (
5
+ runner_secret_scan,
6
+ )
7
+ from devsecops_engine_tools.engine_core.src.domain.model.gateway.vulnerability_management_gateway import (
8
+ VulnerabilityManagementGateway,
9
+ )
10
+ from devsecops_engine_tools.engine_core.src.domain.model.gateway.secrets_manager_gateway import (
11
+ SecretsManagerGateway,
12
+ )
13
+ from devsecops_engine_tools.engine_core.src.domain.model.gateway.devops_platform_gateway import (
14
+ DevopsPlatformGateway,
15
+ )
16
+ from devsecops_engine_tools.engine_core.src.domain.model.vulnerability_management import (
17
+ VulnerabilityManagement,
18
+ )
19
+ from devsecops_engine_tools.engine_core.src.domain.model.customs_exceptions import (
20
+ ExceptionVulnerabilityManagement,
21
+ ExceptionFindingsExcepted,
22
+ )
23
+ from devsecops_engine_tools.engine_sca.engine_container.src.applications.runner_container_scan import (
24
+ runner_engine_container,
25
+ )
26
+ from devsecops_engine_tools.engine_sca.engine_dependencies.src.applications.runner_dependencies_scan import (
27
+ runner_engine_dependencies,
28
+ )
29
+ from devsecops_engine_tools.engine_core.src.infrastructure.helpers.util import (
30
+ define_env,
31
+ )
32
+
33
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
34
+ from devsecops_engine_tools.engine_utilities import settings
35
+
36
+ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
37
+
38
+ MESSAGE_ENABLED = "not yet enabled"
39
+
40
+
41
+ class HandleScan:
42
+ def __init__(
43
+ self,
44
+ vulnerability_management: VulnerabilityManagementGateway,
45
+ secrets_manager_gateway: SecretsManagerGateway,
46
+ devops_platform_gateway: DevopsPlatformGateway,
47
+ ):
48
+ self.vulnerability_management = vulnerability_management
49
+ self.secrets_manager_gateway = secrets_manager_gateway
50
+ self.devops_platform_gateway = devops_platform_gateway
51
+
52
+ def _use_vulnerability_management(
53
+ self, config_tool, input_core, dict_args, secret_tool, env
54
+ ):
55
+ try:
56
+ self.vulnerability_management.send_vulnerability_management(
57
+ VulnerabilityManagement(
58
+ config_tool[dict_args["tool"].upper()]["TOOL"],
59
+ input_core,
60
+ dict_args,
61
+ secret_tool,
62
+ config_tool,
63
+ self.devops_platform_gateway.get_source_code_management_uri(),
64
+ self.devops_platform_gateway.get_base_compact_remote_config_url(
65
+ dict_args["remote_config_repo"]
66
+ ),
67
+ self.devops_platform_gateway.get_variable("access_token"),
68
+ self.devops_platform_gateway.get_variable("build_execution_id"),
69
+ self.devops_platform_gateway.get_variable("build_id"),
70
+ self.devops_platform_gateway.get_variable("branch_tag"),
71
+ self.devops_platform_gateway.get_variable("commit_hash"),
72
+ env
73
+ )
74
+ )
75
+ except ExceptionVulnerabilityManagement as ex1:
76
+ logger.error(str(ex1))
77
+ try:
78
+ input_core.totalized_exclusions.extend(
79
+ self.vulnerability_management.get_findings_excepted(
80
+ input_core.scope_pipeline,
81
+ dict_args,
82
+ secret_tool,
83
+ config_tool,
84
+ )
85
+ )
86
+ except ExceptionFindingsExcepted as ex2:
87
+ logger.error(str(ex2))
88
+
89
+ def process(self, dict_args: any, config_tool: any):
90
+ secret_tool = None
91
+ env = define_env(
92
+ self.devops_platform_gateway.get_variable("environment"),
93
+ self.devops_platform_gateway.get_variable("branch_name"),
94
+ )
95
+ if dict_args["use_secrets_manager"] == "true":
96
+ secret_tool = self.secrets_manager_gateway.get_secret(config_tool)
97
+ if "engine_iac" in dict_args["tool"]:
98
+ findings_list, input_core = runner_engine_iac(
99
+ dict_args, config_tool["ENGINE_IAC"]["TOOL"], secret_tool,self.devops_platform_gateway, env
100
+ )
101
+ if dict_args["use_vulnerability_management"] == "true":
102
+ self._use_vulnerability_management(
103
+ config_tool, input_core, dict_args, secret_tool, env
104
+ )
105
+ return findings_list, input_core
106
+ elif "engine_container" in dict_args["tool"]:
107
+ secret_sca = ""
108
+ if secret_tool is not None:
109
+ secret_sca = secret_tool["token_prisma_cloud"]
110
+ else:
111
+ secret_sca = dict_args["token_engine_container"]
112
+ findings_list, input_core = runner_engine_container(
113
+ dict_args, config_tool, secret_sca, self.devops_platform_gateway
114
+ )
115
+ if (
116
+ dict_args["use_vulnerability_management"] == "true"
117
+ and input_core.path_file_results
118
+ ):
119
+ self._use_vulnerability_management(
120
+ config_tool, input_core, dict_args, secret_tool, env
121
+ )
122
+ return findings_list, input_core
123
+ elif "engine_dast" in dict_args["tool"]:
124
+ print(MESSAGE_ENABLED)
125
+ elif "engine_secret" in dict_args["tool"]:
126
+ findings_list, input_core = runner_secret_scan(
127
+ dict_args,
128
+ config_tool["ENGINE_SECRET"]["TOOL"],
129
+ self.devops_platform_gateway
130
+ )
131
+ return findings_list, input_core
132
+ elif "engine_dependencies" in dict_args["tool"]:
133
+ if secret_tool is not None:
134
+ secret_sca = secret_tool["token_xray"]
135
+ else:
136
+ secret_sca = dict_args["token_engine_dependencies"]
137
+ findings_list, input_core = runner_engine_dependencies(
138
+ dict_args, config_tool, secret_sca, self.devops_platform_gateway
139
+ )
140
+
141
+ if (
142
+ dict_args["use_vulnerability_management"] == "true"
143
+ and input_core.path_file_results
144
+ ):
145
+ self._use_vulnerability_management(
146
+ config_tool, input_core, dict_args, secret_tool, env
147
+ )
148
+ return findings_list, input_core
@@ -0,0 +1,59 @@
1
+ from devsecops_engine_tools.engine_core.src.domain.model.gateway.devops_platform_gateway import (
2
+ DevopsPlatformGateway,
3
+ )
4
+ from devsecops_engine_tools.engine_core.src.domain.model.gateway.metrics_manager_gateway import (
5
+ MetricsManagerGateway,
6
+ )
7
+ from devsecops_engine_tools.engine_core.src.domain.model.input_core import InputCore
8
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import log_records
9
+ from devsecops_engine_tools.engine_core.src.infrastructure.helpers.util import (
10
+ define_env,
11
+ )
12
+ import datetime
13
+ import json
14
+ import os
15
+
16
+
17
+ class MetricsManager:
18
+ def __init__(
19
+ self,
20
+ devops_platform_gateway: DevopsPlatformGateway,
21
+ metrics_manager_gateway: MetricsManagerGateway,
22
+ ):
23
+ self.devops_platform_gateway = devops_platform_gateway
24
+ self.metrics_manager_gateway = metrics_manager_gateway
25
+
26
+ def process(
27
+ self, config_tool: any, input_core: InputCore, dict_args: any, scan_result: any
28
+ ):
29
+ execution_id = self.devops_platform_gateway.get_variable("release_id") if input_core.stage_pipeline == "Release" else self.devops_platform_gateway.get_variable("build_execution_id")
30
+ scope_pipeline = input_core.scope_pipeline
31
+ base_directory = os.path.expanduser("/tmp/log_engine_tools")
32
+ file_path = f"{base_directory}/{scope_pipeline}.json"
33
+ base_directory_path = os.path.expanduser(base_directory)
34
+ if not os.path.exists(base_directory_path):
35
+ os.makedirs(base_directory_path)
36
+ else:
37
+ if os.path.exists(file_path):
38
+ os.remove(file_path)
39
+ with open(
40
+ file_path,
41
+ "x",
42
+ ) as file:
43
+ body = {
44
+ "id": execution_id,
45
+ "date": datetime.datetime.now().strftime("%Y-%m-%d"),
46
+ "component": scope_pipeline,
47
+ "stage": input_core.stage_pipeline,
48
+ "check_type": dict_args["tool"],
49
+ "environment": define_env(
50
+ self.devops_platform_gateway.get_variable("environment"),
51
+ self.devops_platform_gateway.get_variable("branch_name"),
52
+ ),
53
+ "events": log_records,
54
+ "scan_result": scan_result
55
+ }
56
+ json.dump(body, file)
57
+ self.metrics_manager_gateway.send_metrics(
58
+ config_tool, dict_args["tool"], file_path
59
+ )
@@ -0,0 +1,52 @@
1
+ from devsecops_engine_tools.engine_core.src.domain.model.gateway.metrics_manager_gateway import (
2
+ MetricsManagerGateway,
3
+ )
4
+ from devsecops_engine_tools.engine_core.src.infrastructure.helpers.aws import (
5
+ assume_role,
6
+ )
7
+ import boto3
8
+ import logging
9
+ import datetime
10
+
11
+ boto3.set_stream_logger(name="botocore.credentials", level=logging.WARNING)
12
+
13
+
14
+ class S3Manager(MetricsManagerGateway):
15
+
16
+ def _get_s3_data(self, client, bucket, path):
17
+ try:
18
+ response = client.get_object(
19
+ Bucket=bucket,
20
+ Key=path,
21
+ )
22
+ return response["Body"].read().decode("utf-8")
23
+ except client.exceptions.NoSuchKey:
24
+ return ""
25
+
26
+ def send_metrics(self, config_tool, tool, file_path):
27
+ temp_credentials = assume_role(
28
+ config_tool["METRICS_MANAGER"]["AWS"]["ROLE_ARN"]
29
+ )
30
+ session = boto3.session.Session()
31
+ client = session.client(
32
+ service_name="s3",
33
+ region_name=config_tool["METRICS_MANAGER"]["AWS"]["REGION_NAME"],
34
+ aws_access_key_id=temp_credentials["AccessKeyId"],
35
+ aws_secret_access_key=temp_credentials["SecretAccessKey"],
36
+ aws_session_token=temp_credentials["SessionToken"],
37
+ )
38
+ date = datetime.datetime.now()
39
+ path_bucket = f'{tool}/{date.strftime("%Y")}/{date.strftime("%m")}/{date.strftime("%d")}/{file_path.split("/")[-1]}'
40
+
41
+ data = self._get_s3_data(
42
+ client, config_tool["METRICS_MANAGER"]["AWS"]["BUCKET"], path_bucket
43
+ )
44
+
45
+ with open(file_path, "rb") as new_data:
46
+ new_data_content = new_data.read().decode("utf-8")
47
+ data = data + "\n" + new_data_content if data else new_data_content
48
+ client.put_object(
49
+ Bucket=config_tool["METRICS_MANAGER"]["AWS"]["BUCKET"],
50
+ Key=path_bucket,
51
+ Body=data,
52
+ )
@@ -0,0 +1,40 @@
1
+ from dataclasses import dataclass
2
+ from devsecops_engine_tools.engine_core.src.domain.model.gateway.secrets_manager_gateway import (
3
+ SecretsManagerGateway,
4
+ )
5
+ from devsecops_engine_tools.engine_core.src.infrastructure.helpers.aws import (
6
+ assume_role
7
+ )
8
+ import boto3
9
+ import json
10
+ from botocore.exceptions import NoCredentialsError
11
+ import logging
12
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
13
+ from devsecops_engine_tools.engine_utilities import settings
14
+
15
+ boto3.set_stream_logger(name="botocore.credentials", level=logging.WARNING)
16
+ logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
17
+
18
+
19
+ @dataclass
20
+ class SecretsManager(SecretsManagerGateway):
21
+ def get_secret(self, config_tool):
22
+ temp_credentials = assume_role(config_tool["SECRET_MANAGER"]["AWS"]["ROLE_ARN"])
23
+ session = boto3.session.Session()
24
+ client = session.client(
25
+ service_name="secretsmanager",
26
+ region_name=config_tool["SECRET_MANAGER"]["AWS"]["REGION_NAME"],
27
+ aws_access_key_id=temp_credentials["AccessKeyId"],
28
+ aws_secret_access_key=temp_credentials["SecretAccessKey"],
29
+ aws_session_token=temp_credentials["SessionToken"],
30
+ )
31
+
32
+ try:
33
+ secret_name = config_tool["SECRET_MANAGER"]["AWS"]["SECRET_NAME"]
34
+ get_secret_value_response = client.get_secret_value(SecretId=secret_name)
35
+ secret = get_secret_value_response["SecretString"]
36
+ secret_dict = json.loads(secret)
37
+ return secret_dict
38
+ except NoCredentialsError as e:
39
+ logger.error("Error getting secret: {e}")
40
+ return None