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,2 @@
1
+ def hello_world(saludo):
2
+ print(saludo)
@@ -0,0 +1,55 @@
1
+ import json
2
+ from devsecops_engine_tools.engine_utilities.utils.api_error import ApiError
3
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
4
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.models.cmdb import Cmdb
5
+ from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.settings.settings import VERIFY_CERTIFICATE
6
+ from devsecops_engine_tools.engine_utilities.utils.session_manager import SessionManager
7
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.request_objects.import_scan import ImportScanRequest
8
+ from devsecops_engine_tools.engine_utilities.settings import SETTING_LOGGER
9
+
10
+ logger = MyLogger.__call__(**SETTING_LOGGER).get_logger()
11
+
12
+
13
+ class CmdbRestConsumer:
14
+ def __init__(self, token: str, host: str, mapping_cmdb: dict, session: SessionManager) -> None:
15
+ self.__token = token
16
+ self.__host = host
17
+ self.__mapping_cmdb = mapping_cmdb
18
+ self.__session = session._instance
19
+
20
+ def get_product_info(self, request: ImportScanRequest) -> Cmdb:
21
+ data = json.dumps({"codapp": request.code_app})
22
+ headers = {"tokenkey": self.__token, "Content-Type": "application/json"}
23
+ logger.info("Search info of name product")
24
+ try:
25
+ response = self.__session.post(self.__host, headers=headers, data=data, verify=VERIFY_CERTIFICATE)
26
+ if response.status_code != 200:
27
+ logger.error(response)
28
+ raise ApiError(response.json()["Message"])
29
+
30
+ if response.json() == []:
31
+ e = f"Engagement: {request.code_app} not found"
32
+ logger.warning(e)
33
+ # Producto is Orphan
34
+ return Cmdb(
35
+ product_type_name="ORPHAN_PRODUCT_TYPE",
36
+ product_name=f"{request.code_app}_Product",
37
+ tag_product="ORPHAN",
38
+ product_description="Orphan Product Description",
39
+ codigo_app=str(request.code_app),
40
+ )
41
+
42
+ data = response.json()[-1]
43
+ data_map = self.mapping_cmdb(data)
44
+ logger.info(data_map)
45
+ cmdb_object = Cmdb.from_dict(data_map)
46
+ except Exception as e:
47
+ logger.error(e)
48
+ raise ApiError(e)
49
+ return cmdb_object
50
+
51
+ def mapping_cmdb(self, data):
52
+ data_map = {}
53
+ for key, value in self.__mapping_cmdb.items():
54
+ data_map[key] = data[value] if value in data else ""
55
+ return data_map
@@ -0,0 +1,55 @@
1
+ import json
2
+ from devsecops_engine_tools.engine_utilities.utils.api_error import ApiError
3
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
4
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.request_objects.import_scan import ImportScanRequest
5
+ from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.settings.settings import VERIFY_CERTIFICATE
6
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.models.engagement import Engagement, EngagementList
7
+ from devsecops_engine_tools.engine_utilities.utils.session_manager import SessionManager
8
+ from datetime import datetime
9
+ from devsecops_engine_tools.engine_utilities.settings import SETTING_LOGGER
10
+
11
+ logger = MyLogger.__call__(**SETTING_LOGGER).get_logger()
12
+
13
+
14
+ class EngagementRestConsumer:
15
+ def __init__(self, request: ImportScanRequest, session: SessionManager):
16
+ self.__token = request.token_defect_dojo
17
+ self.__host = request.host_defect_dojo
18
+ self.__session = session._instance
19
+
20
+ def get_engagements(self, engagement_name):
21
+ url = f"{self.__host}/api/v2/engagements/?name={engagement_name}"
22
+
23
+ headers = {"Authorization": f"Token {self.__token}", "Content-Type": "application/json"}
24
+ try:
25
+ response = self.__session.get(url=url, headers=headers, verify=VERIFY_CERTIFICATE)
26
+ if response.status_code != 200:
27
+ logger.error(response.json())
28
+ raise ApiError(response.json())
29
+ response = EngagementList().from_dict(response.json())
30
+ except Exception as e:
31
+ raise ApiError(e)
32
+ return response
33
+
34
+ def post_engagement(self, engagement_name, product_id):
35
+ url = f"{self.__host}/api/v2/engagements/"
36
+ data = json.dumps(
37
+ {
38
+ "name": engagement_name,
39
+ "target_start": str(datetime.now().date()),
40
+ "target_end": str(datetime.now().date()),
41
+ "product": product_id,
42
+ "engagement_type": "CI/CD",
43
+ "status": "In Progress",
44
+ }
45
+ )
46
+ headers = {"Authorization": f"Token {self.__token}", "Content-Type": "application/json"}
47
+ try:
48
+ response = self.__session.post(url=url, headers=headers, data=data, verify=VERIFY_CERTIFICATE)
49
+ if response.status_code != 201:
50
+ logger.error(response.json())
51
+ raise ApiError(response.json())
52
+ response = Engagement().from_dict(response.json())
53
+ except Exception as e:
54
+ raise ApiError(e)
55
+ return response
@@ -0,0 +1,37 @@
1
+ from devsecops_engine_tools.engine_utilities.utils.api_error import ApiError
2
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.request_objects.finding import FindingRequest
3
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.models.finding import Finding, FindingList
4
+ from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.settings.settings import VERIFY_CERTIFICATE
5
+ from devsecops_engine_tools.engine_utilities.utils.session_manager import SessionManager
6
+ from devsecops_engine_tools.engine_utilities.settings import SETTING_LOGGER
7
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
8
+ import json
9
+
10
+ logger = MyLogger.__call__(**SETTING_LOGGER).get_logger()
11
+
12
+
13
+ class FindingRestConsumer:
14
+ def __init__(self, session: SessionManager):
15
+ self.__token = session._token
16
+ self.__host = session._host
17
+ self.__session = session._instance
18
+
19
+ def get(self, request):
20
+ url = f"{self.__host}/api/v2/findings/"
21
+ headers = {"Authorization": f"Token {self.__token}", "Content-Type": "application/json"}
22
+ response = self.__session.get(url, headers=headers, data={}, params=request, verify=VERIFY_CERTIFICATE)
23
+ if response.status_code != 200:
24
+ raise ApiError(response.json())
25
+ findings = FindingList.from_dict(response.json())
26
+ return findings
27
+
28
+ def close(self, request, id):
29
+ url = f"{self.__host}/api/v2/findings/{id}/close/"
30
+ headers = {"Authorization": f"Token {self.__token}", "Content-Type": "application/json"}
31
+ response = self.__session.post(url, headers=headers, data=json.dumps(request), verify=VERIFY_CERTIFICATE)
32
+ if response.status_code != 200:
33
+ logger.error(response.json())
34
+ raise ApiError(response.json())
35
+ logger.debug(response.json())
36
+ logger.debug(response)
37
+ return response
@@ -0,0 +1,115 @@
1
+ from devsecops_engine_tools.engine_utilities.utils.api_error import ApiError
2
+ from requests_toolbelt.multipart.encoder import MultipartEncoder
3
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.request_objects.import_scan import ImportScanRequest
4
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
5
+ from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.settings.settings import VERIFY_CERTIFICATE
6
+ from devsecops_engine_tools.engine_utilities.utils.session_manager import SessionManager
7
+ from devsecops_engine_tools.engine_utilities.settings import SETTING_LOGGER
8
+
9
+ logger = MyLogger.__call__(**SETTING_LOGGER).get_logger()
10
+
11
+
12
+ class ImportScanRestConsumer:
13
+ def __init__(self, request: ImportScanRequest, session: SessionManager):
14
+ self.__token = request.token_defect_dojo
15
+ self.__host = request.host_defect_dojo
16
+ self.__session = session._instance
17
+
18
+ def import_scan_api(self, request: ImportScanRequest) -> ImportScanRequest:
19
+ url = f"{self.__host}/api/v2/import-scan/"
20
+ data = {
21
+ "scan_date": request.scan_date,
22
+ "minimum_severity": request.minimum_severity,
23
+ "active": request.active,
24
+ "verified": request.verified,
25
+ "scan_type": request.scan_type,
26
+ "endpoint_to_add": request.endpoint_to_add,
27
+ # "file": request.file,
28
+ "product_type_name": request.product_type_name,
29
+ "product_name": request.product_name,
30
+ "engagement_name": request.engagement_name,
31
+ "engagement_end_date": request.engagement_end_date,
32
+ "source_code_management_uri": request.source_code_management_uri,
33
+ "engagement": str(request.engagement) if request.engagement != 0 else "",
34
+ "auto_create_context": "false",
35
+ "deduplication_on_engagement": request.deduplication_on_engagement,
36
+ "lead": request.lead,
37
+ "tags": request.tags,
38
+ "close_old_findings": str(request.close_old_findings),
39
+ "close_old_findings_product_scope": str(request.close_old_findings_product_scope),
40
+ "push_to_jira": str(request.push_to_jira),
41
+ "environment": request.environment,
42
+ "version": request.version,
43
+ "build_id": request.build_id,
44
+ "branch_tag": request.branch_tag,
45
+ "commit_hash": request.commit_hash,
46
+ "api_scan_configuration": str(request.api_scan_configuration)
47
+ if request.api_scan_configuration != 0
48
+ else "",
49
+ "service": request.service,
50
+ "group_by": request.group_by,
51
+ }
52
+ multipart_data = MultipartEncoder(fields=data)
53
+
54
+ headers = {"Authorization": f"Token {self.__token}", "Content-Type": multipart_data.content_type}
55
+ try:
56
+ response = self.__session.post(url, headers=headers, data=multipart_data, verify=VERIFY_CERTIFICATE)
57
+ if response.status_code != 201:
58
+ logger.error(response.status_code)
59
+ logger.error(response.json())
60
+ raise ApiError(response.json())
61
+ response = ImportScanRequest().from_dict(response.json())
62
+ except Exception as e:
63
+ logger.error(f"from dict import Scan: {response.json()}")
64
+ raise ApiError(response.json())
65
+ return response
66
+
67
+ def import_scan(self, request: ImportScanRequest, files) -> ImportScanRequest:
68
+ url = f"{self.__host}/api/v2/import-scan/"
69
+ payload = {
70
+ "scan_date": request.scan_date,
71
+ "minimum_severity": request.minimum_severity,
72
+ "active": request.active,
73
+ "verified": request.verified,
74
+ "scan_type": request.scan_type,
75
+ "endpoint_to_add": request.endpoint_to_add,
76
+ "file": files,
77
+ "product_type_name": request.product_type_name,
78
+ "product_name": request.product_name,
79
+ "engagement_name": request.engagement_name,
80
+ "engagement_end_date": request.engagement_end_date,
81
+ "source_code_management_uri": request.source_code_management_uri,
82
+ "engagement": request.engagement if request.engagement != 0 else "",
83
+ "auto_create_context": "false",
84
+ "deduplication_on_engagement": request.deduplication_on_engagement,
85
+ "lead": request.lead,
86
+ "tags": request.tags,
87
+ "close_old_findings": request.close_old_findings,
88
+ "close_old_findings_product_scope": request.close_old_findings_product_scope,
89
+ "push_to_jira": request.push_to_jira,
90
+ "environment": request.environment,
91
+ "version": request.version,
92
+ "build_id": request.build_id,
93
+ "branch_tag": request.branch_tag,
94
+ "commit_hash": request.commit_hash,
95
+ "api_scan_configuration": str(request.api_scan_configuration)
96
+ if request.api_scan_configuration != 0
97
+ else "",
98
+ "service": request.service,
99
+ "group_by": request.group_by,
100
+ }
101
+
102
+ headers = {"Authorization": f"Token {self.__token}"}
103
+ try:
104
+ response = self.__session.post(url, headers=headers, data=payload, files=files, verify=VERIFY_CERTIFICATE)
105
+ if response.status_code != 201:
106
+ logger.error(payload)
107
+ logger.error(response.json())
108
+ logger.error(response)
109
+ raise ApiError(response.json())
110
+ logger.info(f"Sucessfull {response}")
111
+ response = ImportScanRequest.from_dict(response.json())
112
+ except Exception as e:
113
+ logger.error(f"from dict import Scan: {response.json()}")
114
+ raise ApiError(e)
115
+ return response
@@ -0,0 +1,50 @@
1
+ from devsecops_engine_tools.engine_utilities.utils.api_error import ApiError
2
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
3
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.request_objects.import_scan import ImportScanRequest
4
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.models.product import Product
5
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.models.product_list import ProductList
6
+ from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.settings.settings import VERIFY_CERTIFICATE
7
+ from devsecops_engine_tools.engine_utilities.utils.session_manager import SessionManager
8
+ from devsecops_engine_tools.engine_utilities.settings import SETTING_LOGGER
9
+
10
+ logger = MyLogger.__call__(**SETTING_LOGGER).get_logger()
11
+
12
+
13
+ class ProductRestConsumer:
14
+ def __init__(self, request: ImportScanRequest, session: SessionManager):
15
+ self.__token = request.token_defect_dojo
16
+ self.__host = request.host_defect_dojo
17
+ self.__session = session._instance
18
+
19
+ def get_products(self, request: ImportScanRequest) -> ProductList:
20
+ url = f"{self.__host}/api/v2/products/?name={request.code_app}"
21
+ headers = {"Authorization": f"Token {self.__token}", "Content-Type": "application/json"}
22
+ try:
23
+ response = self.__session.get(url, headers=headers, data={}, verify=VERIFY_CERTIFICATE)
24
+ if response.status_code != 200:
25
+ raise ApiError(response.json())
26
+ products_object = ProductList.from_dict(response.json())
27
+ except Exception as e:
28
+ logger.error(f"from dict product: {response.json()}")
29
+ raise ApiError(e)
30
+ return products_object
31
+
32
+ def post_product(self, request: ImportScanRequest, product_type_id: int) -> Product:
33
+ url = f"{self.__host}/api/v2/products/"
34
+
35
+ data = {
36
+ "name": request.product_name,
37
+ "description": "AREA RESPONSABLE TI: " + request.product_description.upper(),
38
+ "enable_full_risk_acceptance": True,
39
+ "prod_type": product_type_id,
40
+ }
41
+ headers = {"Authorization": f"Token {self.__token}"}
42
+ try:
43
+ response = self.__session.post(url, headers=headers, data=data, verify=VERIFY_CERTIFICATE)
44
+ if response.status_code != 201:
45
+ raise ApiError(response.json())
46
+ product_object = Product.from_dict(response.json())
47
+ except Exception as e:
48
+ logger.error(f"form dict product: {response.json()}")
49
+ raise ApiError(e)
50
+ return product_object
@@ -0,0 +1,59 @@
1
+ import json
2
+ from devsecops_engine_tools.engine_utilities.utils.api_error import ApiError
3
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
4
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.request_objects.import_scan import ImportScanRequest
5
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.models.product_type_list import ProductTypeList
6
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.models.product_type import ProductType
7
+ from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.settings.settings import VERIFY_CERTIFICATE
8
+ from devsecops_engine_tools.engine_utilities.utils.session_manager import SessionManager
9
+ from devsecops_engine_tools.engine_utilities.settings import SETTING_LOGGER
10
+
11
+ logger = MyLogger.__call__(**SETTING_LOGGER).get_logger()
12
+
13
+
14
+ class ProductTypeRestConsumer:
15
+ def __init__(self, request: ImportScanRequest, session: SessionManager):
16
+ self.__token = request.token_defect_dojo
17
+ self.__host = request.host_defect_dojo
18
+ self.__session = session._instance
19
+
20
+ def post_product_type(self, product_type_name: str) -> ProductType:
21
+ url = f"{self.__host}/api/v2/product_types/"
22
+ data = json.dumps({"name": product_type_name})
23
+ headers = {"Authorization": f"Token {self.__token}", "Content-Type": "application/json"}
24
+ try:
25
+ response = self.__session.post(url, headers=headers, data=data)
26
+ if response.status_code != 201:
27
+ raise ApiError(response.json())
28
+ product_type_object = ProductType.from_dict(response.json())
29
+ except Exception as e:
30
+ log = f"from dict product_type: {response.json}"
31
+ logger.error(log)
32
+ raise ApiError(e)
33
+ return product_type_object
34
+
35
+ def get_product_types(self, product_type_name: str) -> ProductTypeList:
36
+ url = f"{self.__host}/api/v2/product_types/?name={product_type_name}"
37
+ headers = {"Authorization": f"Token {self.__token}"}
38
+ try:
39
+ response = self.__session.get(url, headers=headers, data={}, verify=VERIFY_CERTIFICATE)
40
+ if response.status_code != 200:
41
+ raise ApiError(response.json())
42
+ product_type_object = ProductTypeList.from_dict(response.json())
43
+ except Exception as e:
44
+ raise ApiError(e)
45
+ return product_type_object
46
+
47
+ def get_product_type_id(self, id: int):
48
+ url = f"{self.__host}/api/v2/product_types/{id}/"
49
+
50
+ headers = {"Authorization": f"Token {self.__token}"}
51
+ try:
52
+ response = self.__session.get(url, headers=headers, data={}, verify=VERIFY_CERTIFICATE)
53
+ if response.status_code != 200:
54
+ raise ApiError(response.json())
55
+ logger.info(response)
56
+ product_type_object = ProductType.from_dict(response.json())
57
+ except Exception as e:
58
+ raise ApiError(e)
59
+ return product_type_object
@@ -0,0 +1,65 @@
1
+ from devsecops_engine_tools.engine_utilities.utils.api_error import ApiError
2
+ import json
3
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
4
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.request_objects.import_scan import ImportScanRequest
5
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.models.scan_configuration import (
6
+ ScanConfiguration,
7
+ ScanConfigurationList,
8
+ )
9
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.models.scan_configuration import ScanConfiguration
10
+ from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.settings.settings import VERIFY_CERTIFICATE
11
+ from devsecops_engine_tools.engine_utilities.utils.session_manager import SessionManager
12
+ from devsecops_engine_tools.engine_utilities.settings import SETTING_LOGGER
13
+
14
+ logger = MyLogger.__call__(**SETTING_LOGGER).get_logger()
15
+
16
+
17
+ class ScanConfigrationRestConsumer:
18
+ def __init__(self, request: ImportScanRequest, session: SessionManager) -> ScanConfiguration:
19
+ self.__token = request.token_defect_dojo
20
+ self.__host = request.host_defect_dojo
21
+ self.__session = session._instance
22
+
23
+ def post_api_scan_configuration(
24
+ self, request: ImportScanRequest, product_id: int, tool_configuration_id: int
25
+ ) -> ScanConfiguration:
26
+ url = f"{self.__host}/api/v2/product_api_scan_configurations/"
27
+
28
+ headers = {
29
+ "Authorization": f"Token {self.__token}",
30
+ "Content-Type": "application/json",
31
+ }
32
+
33
+ data = json.dumps(
34
+ {
35
+ "service_key_1": request.engagement_name,
36
+ "product": product_id,
37
+ "tool_configuration": tool_configuration_id,
38
+ }
39
+ )
40
+ try:
41
+ response = self.__session.post(url=url, headers=headers, data=data, verify=VERIFY_CERTIFICATE)
42
+ if response.status_code != 201:
43
+ logger.error(response.json())
44
+ raise ApiError(response.json())
45
+ scan_configuration_object = ScanConfiguration.from_dict(response.json())
46
+ except Exception as e:
47
+ logger.error(f"from dict scanConfiguration {response.json()}")
48
+ raise ApiError(e)
49
+ return scan_configuration_object
50
+
51
+ def get_api_scan_configuration(self, request: ImportScanRequest) -> ScanConfigurationList:
52
+ url = f"{self.__host}/api/v2/product_api_scan_configurations/?service_key_1={request.engagement_name}"
53
+ headers = {
54
+ "Authorization": f"Token {self.__token}",
55
+ "Conten-Type": "application/json",
56
+ }
57
+ try:
58
+ response = self.__session.get(url=url, headers=headers, verify=VERIFY_CERTIFICATE)
59
+ if response.status_code != 200:
60
+ logger.error(response.json())
61
+ raise ApiError(response.json())
62
+ response = ScanConfigurationList.from_dict(response.json())
63
+ except Exception as e:
64
+ raise ApiError(e)
65
+ return response
@@ -0,0 +1,49 @@
1
+ import requests
2
+ import zipfile
3
+
4
+
5
+ class GithubApi:
6
+ def __init__(
7
+ self,
8
+ token: str = ""
9
+ ):
10
+ self.token = token
11
+
12
+ def unzip_file(self, zip_file_path, extract_path):
13
+ with zipfile.ZipFile(zip_file_path, "r") as zip_ref:
14
+ zip_ref.extractall(extract_path)
15
+
16
+ def download_latest_release_assets(
17
+ self, owner, repository, download_path="."
18
+ ):
19
+ url = f"https://api.github.com/repos/{owner}/{repository}/releases/latest"
20
+
21
+ headers = {"Authorization": f"token {self.token}"}
22
+
23
+ response = requests.get(url, headers=headers)
24
+
25
+ if response.status_code == 200:
26
+ latest_release = response.json()
27
+ assets = latest_release["assets"]
28
+
29
+ for asset in assets:
30
+ asset_url = asset["url"]
31
+ asset_name = asset["name"]
32
+
33
+ headers.update({"Accept": "application/octet-stream"})
34
+
35
+ response = requests.get(asset_url, headers=headers, stream=True)
36
+
37
+ if response.status_code == 200:
38
+ with open(f"{download_path}/{asset_name}", "wb") as file:
39
+ for chunk in response.iter_content(chunk_size=8192):
40
+ file.write(chunk)
41
+ self.unzip_file(f"{download_path}/{asset_name}", download_path)
42
+ else:
43
+ print(
44
+ f"Error downloading asset {asset_name}. status code: {response.status_code}"
45
+ )
46
+ else:
47
+ print(
48
+ f"Error getting the assets of the last release. Status code: {response.status_code}"
49
+ )
@@ -0,0 +1,10 @@
1
+ import os
2
+
3
+
4
+ class EnvVariables:
5
+ @staticmethod
6
+ def get_value(env_name):
7
+ env_var = os.environ.get(env_name)
8
+ if env_var is None:
9
+ raise ValueError(f"La variable de entorno {env_name} no está definida")
10
+ return env_var
@@ -0,0 +1,8 @@
1
+ import re
2
+
3
+
4
+ def validate_input_with_regex(value, input_name):
5
+ pattern = r"^[a-zA-Z0-9_]+$"
6
+ if not re.match(pattern, value):
7
+ raise ValueError(f"Error: Invalid input for {input_name}. Only letters and numbers are allowed.")
8
+ return value
@@ -0,0 +1,38 @@
1
+ import os
2
+ import json
3
+ import platform
4
+ from decouple import config
5
+
6
+ # common_devsecops_lib settings
7
+ DEVSECOPS_ENGINE_UTILITIES_PATH = os.path.dirname(os.path.realpath(__file__))
8
+ DEVSECOPS_ENGINE_UTILITIES_RUNNER_PLATFORM_SYSTEM = platform.system()
9
+ DEVSECOPS_ENGINE_UTILITIES_RUNNER_PLATFORM_RELEASE = platform.release()
10
+ DEVSECOPS_ENGINE_UTILITIES_RUNNER_PYTHON_VERSION = platform.python_version()
11
+ DEVSECOPS_ENGINE_UTILITIES_RUNNER_PYTHON_COMPILER = platform.python_compiler()
12
+
13
+ # logging settings
14
+ DEBUG_DEVSECOPS = config("DEBUG_DEVSECOPS", default=False, cast=bool)
15
+ LOG_CONSOLE_DEVSECOPS = config("LOG_CONSOLE_DEVSECOPS", default=False, cast=bool)
16
+ FILE_DEBUG_DEVSECOPS = config("FILE_DEBUG_DEVSECOPS", default=False, cast=bool)
17
+ FILE_FORMAT_DEBUG_DEVSECOPS = config("FILE_FORMAT_DEBUG_DEVSECOPS", default="log", cast=str)
18
+ SETTING_LOGGER = {"debug": DEBUG_DEVSECOPS, "log_console": LOG_CONSOLE_DEVSECOPS, "log_file": FILE_DEBUG_DEVSECOPS, "log_file_format": FILE_FORMAT_DEBUG_DEVSECOPS}
19
+
20
+ # defect-dojo settings
21
+ INTEGRATION_TEST = config("INTEGRATION_TEST", default=False, cast=bool)
22
+ ORGANIZATION_URL = config("ORGANIZATION_URL", default="")
23
+ PERSONAL_ACCESS_TOKEN = config("PERSONAL_ACCESS_TOKEN", default="", cast=str)
24
+ REPOSITORY_ID = config("REPOSITORY_ID", default="", cast=str)
25
+ REMOTE_CONFIG_PATH = config("REMOTE_CONFIG_PATH", default="")
26
+ PROJECT_REMOTE_CONFIG = config("PROJECT_REMOTE_CONFIG", default="", cast=str)
27
+ TOKEN_CMDB = config("TOKEN_CMDB", default="", cast=str)
28
+ HOST_CMDB = config("HOST_CMDB", default="", cast=str)
29
+ EXPRESSION = config("EXPRESSION", default="", cast=str)
30
+ TOKEN_DEFECT_DOJO = config("TOKEN_DEFECT_DOJO", default="", cast=str)
31
+ HOST_DEFECT_DOJO = config("HOST_DEFECT_DOJO", default="", cast=str)
32
+ SCAN_TYPE = config("SCAN_TYPE", default="", cast=str)
33
+ CMDB_MAPPING = json.loads(config("CMDB_MAPPING", default={}, cast=str))
34
+ ENGAGEMENT_NAME = config("ENGAGEMENT_NAME", default="", cast=str)
35
+ FILE = config("FILE", default="", cast=str)
36
+ TAGS = config("TAGS", default="", cast=str)
37
+ COMPACT_REMOTE_CONFIG_URL = config("COMPACT_REMOTE_CONFIG_URL", default="", cast=str)
38
+ BRANCH_TAG = config("BRANCH_TAG", default="", cast=str)
@@ -0,0 +1,67 @@
1
+ import os
2
+ import pexpect
3
+ import base64
4
+
5
+
6
+ def decode_base64(secret_data, key_name):
7
+ key_name_secret = secret_data[key_name]
8
+ return base64.b64decode(key_name_secret).decode("utf-8")
9
+
10
+
11
+ def config_knowns_hosts(host, ssh_key):
12
+ try:
13
+ ssh_directory = os.path.expanduser("~/.ssh")
14
+ if not os.path.exists(ssh_directory):
15
+ os.makedirs(ssh_directory)
16
+
17
+ known_hosts_file_path = os.path.expanduser("~/.ssh/known_hosts")
18
+ line_to_add = f"{host} ssh-rsa {ssh_key}\n"
19
+ if not os.path.exists(known_hosts_file_path):
20
+ with open(known_hosts_file_path, "w") as known_hosts_file:
21
+ known_hosts_file.write(line_to_add)
22
+ else:
23
+ with open(known_hosts_file_path, "a") as known_hosts_file:
24
+ known_hosts_file.write(line_to_add)
25
+ except Exception as e:
26
+ print(f"An error ocurred while configuring file: {e}")
27
+
28
+
29
+ def create_ssh_private_file(ssh_key_file_path, ssh_key_content):
30
+ try:
31
+ with open(ssh_key_file_path, "w") as archivo:
32
+ archivo.write(ssh_key_content)
33
+ permisos = 0o600
34
+
35
+ os.chmod(ssh_key_file_path, permisos)
36
+ except Exception as e:
37
+ print(f"An error ocurred creating file: {e}")
38
+
39
+
40
+ def add_ssh_private_key(ssh_key_file_path, ssh_key_password):
41
+ try:
42
+ # Iniciar un nuevo shell y evaluar el comando ssh-agent
43
+ pexpect.spawn("ssh-agent -k")
44
+ ssh_process = pexpect.spawn("ssh-agent -s")
45
+ ssh_process.expect("SSH_AUTH_SOCK=(.*?);")
46
+ ssh_auth_sock = ssh_process.match.group(1).decode()
47
+ ssh_process.expect("SSH_AGENT_PID=(.*?);")
48
+ ssh_agent_pid = ssh_process.match.group(1).decode()
49
+
50
+ agent_env = {"SSH_AUTH_SOCK": ssh_auth_sock, "SSH_AGENT_PID": ssh_agent_pid}
51
+
52
+ # Esperar a que se complete la inicialización de ssh-agent
53
+ ssh_process.expect(pexpect.EOF)
54
+
55
+ # Agregar la clave privada al ssh-agent proporcionando la contraseña
56
+ ssh_add_process = pexpect.spawn(f"ssh-add {ssh_key_file_path}", env=agent_env)
57
+
58
+ # Esperar la solicitud de contraseña y proporcionarla
59
+ ssh_add_process.expect("Enter passphrase", timeout=5)
60
+ ssh_add_process.sendline(ssh_key_password)
61
+
62
+ # Esperar a que se complete la operación
63
+ ssh_add_process.expect(pexpect.EOF)
64
+
65
+ return agent_env
66
+ except Exception as e:
67
+ print(f"An error ocurred adding private key: {e}")