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,125 @@
1
+ import dataclasses
2
+
3
+
4
+ @dataclasses.dataclass
5
+ class ImportScanRequest:
6
+ scan_date: str = ""
7
+ minimum_severity: str = ""
8
+ active: str = ""
9
+ verified: str = ""
10
+ scan_type: str = ""
11
+ endpoint_to_add: str = ""
12
+ file: str = ""
13
+ product_type_name: str = ""
14
+ product_name: str = ""
15
+ engagement_name: str = ""
16
+ engagement_end_date: str = ""
17
+ source_code_management_uri: str = ""
18
+ engagement: int = 0
19
+ engagement_id: int = 0
20
+ auto_create_context: str = ""
21
+ deduplication_on_engagement: str = ""
22
+ lead: str = ""
23
+ tags: str = ""
24
+ close_old_findings: str = ""
25
+ close_old_findings_product_scope: str = ""
26
+ push_to_jira: str = ""
27
+ environment: str = ""
28
+ version: str = ""
29
+ build_id: str = ""
30
+ branch_tag: str = ""
31
+ commit_hash: str = ""
32
+ api_scan_configuration: int = 0
33
+ test_id: int = 0
34
+ service: str = ""
35
+ group_by: str = ""
36
+ create_finding_groups_for_all_findings: str = ""
37
+ # ****another parameter outside defect dojo*****
38
+ product_description: str = ""
39
+ tools_configuration: str = ""
40
+ code_app: str = ""
41
+ token_cmdb: str = ""
42
+ host_cmdb: str = ""
43
+ token_defect_dojo: str = ""
44
+ host_defect_dojo: str = ""
45
+ # *** config map ***
46
+ organization_url: str = ""
47
+ personal_access_token: str = ""
48
+ repository_id: str = ""
49
+ remote_config_path: str = ""
50
+ project_remote_config: str = ""
51
+ cmdb_mapping: dict = None
52
+ product_type_name_mapping: dict = None
53
+ compact_remote_config_url: str = None
54
+ # ** Expression
55
+ expression: str = ""
56
+ # ** Test url
57
+ url: str = ""
58
+
59
+ @classmethod
60
+ def from_dict(cls, obj):
61
+ obj = cls(
62
+ scan_date=obj.get("scan_date"),
63
+ minimum_severity=obj.get("minimum_severity"),
64
+ active=obj.get("active"),
65
+ verified=obj.get("verified"),
66
+ scan_type=obj.get("scan_type"),
67
+ endpoint_to_add=obj.get("endpoint_to_add"),
68
+ file=obj.get("file"),
69
+ product_type_name=obj.get("product_type_name"),
70
+ product_name=obj.get("product_name"),
71
+ engagement_name=obj.get("engagement_name"),
72
+ engagement_end_date=obj.get("engagement_end_date"),
73
+ source_code_management_uri=obj.get("source_code_management_uri"),
74
+ engagement=obj.get("engagement"),
75
+ engagement_id=obj.get("engagement_id"),
76
+ auto_create_context=obj.get("auto_create_context"),
77
+ deduplication_on_engagement=obj.get("deduplication_on_engagement"),
78
+ lead=obj.get("lead"),
79
+ tags=obj.get("tags"),
80
+ close_old_findings=obj.get("close_old_findings"),
81
+ close_old_findings_product_scope=obj.get("close_old_findings_product_scope"),
82
+ push_to_jira=obj.get("push_to_jira"),
83
+ environment=obj.get("environment"),
84
+ version=obj.get("version"),
85
+ build_id=obj.get("build_id"),
86
+ branch_tag=obj.get("branch_tag"),
87
+ commit_hash=obj.get("commit_hash"),
88
+ api_scan_configuration=obj.get("api_scan_configuration"),
89
+ test_id=obj.get("test_id"),
90
+ service=obj.get("service"),
91
+ group_by=obj.get("group_by"),
92
+ create_finding_groups_for_all_findings=obj.get("create_finding_groups_for_all_findings"),
93
+ organization_url=obj.get("organization_url"),
94
+ personal_access_token=obj.get("personal_access_token"),
95
+ repository_id=obj.get("remote_config_repo"),
96
+ remote_config_path=obj.get("remote_config_path"),
97
+ project_remote_config=obj.get("project_remote_config"),
98
+ cmdb_mapping=obj.get("cmdb_mapping"),
99
+ product_type_name_mapping=obj.get("product_type_name_mapping"),
100
+ expression=obj.get("expression"),
101
+ compact_remote_config_url=obj.get("compact_remote_config_url"),
102
+ )
103
+ return obj
104
+
105
+ def to_dict(self):
106
+ r = {
107
+ "minimum_severity": self.minimum_severity,
108
+ "active": self.active,
109
+ "verified": self.verified,
110
+ "scan_type": self.scan_type,
111
+ "endpoint_to_add": self.endpoint_to_add,
112
+ "file": self.file,
113
+ "product_type_name": self.product_type_name,
114
+ "product_name": self.product_name,
115
+ "engagement_name": self.engagement_name,
116
+ "auto_create_context": self.auto_create_context,
117
+ "deduplication_on_engagement": self.deduplication_on_engagement,
118
+ "lead": self.lead,
119
+ "close_old_findings": self.close_old_findings,
120
+ "close_old_findings_product_scope": self.close_old_findings_product_scope,
121
+ "push_to_jira": self.push_to_jira,
122
+ "api_scan_configuration": self.api_scan_configuration,
123
+ "build_id": self.build_id,
124
+ }
125
+ return r
@@ -0,0 +1,100 @@
1
+ from marshmallow import Schema, fields, validate
2
+
3
+
4
+ class FindingSerializer(Schema):
5
+ active = fields.Bool(requeride=False)
6
+ component_name = fields.Str(requeride=False)
7
+ component_version = fields.Str(requeride=False)
8
+ created = fields.Str(requeride=False)
9
+ cvssv3 = fields.Str(requeride=False)
10
+ cvssv3_score = fields.Int(requeride=False)
11
+ cwe = fields.List(fields.Int, requeride=False)
12
+ date = fields.Str(requeride=False)
13
+ defect_review_requested_by = fields.List(fields.Int, requerided=False)
14
+ description = fields.Str(requeride=False)
15
+ duplicate = fields.Bool(requerided=False)
16
+ duplicate_finding = fields.Int(requerided=False)
17
+ dynamic_finding = fields.Bool(requerided=False)
18
+ effort_for_fixing = fields.Str(requerided=False)
19
+ endpoints = fields.List(fields.Int, requerided=False)
20
+ false_p = fields.Bool(requerided=False)
21
+ file_path = fields.Str(requeride=False)
22
+ finding_group = fields.List(fields.Number, requerided=False)
23
+ found_by = fields.List(fields.Int, requerided=False)
24
+ has_jira = fields.Bool(requerided=False)
25
+ has_tags = fields.Bool(requerided=False)
26
+ hash_code = fields.Str(requeride=False)
27
+ id = fields.List(fields.List(fields.Field()), requerided=False)
28
+ impact = fields.Str(requeride=False)
29
+ inherited_tags = fields.List(fields.List(fields.Field()), requeride=False)
30
+ is_mitigated = fields.Bool(requerided=False)
31
+ jira_change = fields.Str(requeride=False)
32
+ jira_creation = fields.Str(requeride=False)
33
+ last_reviewed = fields.Str(requeride=False)
34
+ last_reviewed_by = fields.List(fields.Int, requeried=False)
35
+ limit = fields.Int(requerided=False)
36
+ mitigated = fields.Str(requeride=False)
37
+ mitigated_by = fields.List(fields.Int, requerided=False)
38
+ mitigation = fields.Str(requeride=False)
39
+ nb_occurences = fields.List(fields.Int, requeride=False)
40
+ not_tag = fields.Str(requeride=False)
41
+ not_tags = fields.List(fields.Str, requerided=False)
42
+ not_test__engagement__product__tags = fields.List(fields.Str, requerided=False)
43
+ not_test__engagement__tags = fields.List(fields.Str, requerided=False)
44
+ not_test__tags = fields.List(fields.Str, requerided=False)
45
+ numerical_severity = fields.Str(requeride=False)
46
+ offset = fields.Int(requerided=False)
47
+ out_of_scope = fields.Bool(requerided=False)
48
+ outside_of_sla = fields.Int(requerided=False)
49
+ param = fields.Str(requeride=False)
50
+ payload = fields.Str(requeride=False)
51
+ planned_remediation_date = fields.Str(requeride=False)
52
+ planned_remediation_version = fields.Str(requeride=False)
53
+ prefetch = fields.List(fields.Str, requerided=False)
54
+ product_name = fields.Str(requeride=False)
55
+ product_name_contains = fields.Str(requeride=False)
56
+ publish_date = fields.Str(requeride=False)
57
+ references = fields.Str(requeride=False)
58
+ related_fields = fields.Str(requeride=False)
59
+ reporter = fields.List(fields.Int, requerided=False)
60
+ review_request_by = fields.List(fields.Int, requerided=False)
61
+ reviewers = fields.List(fields.Int, requerided=False)
62
+ risk_accetance = fields.Int(requerided=False)
63
+ risk_status = fields.Str(
64
+ required=False, validate=validate.OneOf(["Risk Pending", "Risk Rejected", "Risk Accepted", "Risk Active"])
65
+ )
66
+ risk_accepted = fields.Bool(requerided=False)
67
+ sast_sink_object = fields.Str(requeride=False)
68
+ sast_source_object = fields.Str(requeride=False)
69
+ scanner_confidence = fields.List(fields.Int, requerided=False)
70
+ service = fields.Str(requeride=False)
71
+ severity = fields.Str(requeride=False)
72
+ severity_justification = fields.Str(requeride=False)
73
+ sla_start_date = fields.Str(requeride=False)
74
+ sonarqube_issue = fields.List(fields.Int, requerided=False)
75
+ static_finding = fields.Bool(requerided=False)
76
+ steps_to_reproduce = fields.Str(requeride=False)
77
+ tag = fields.Str(requeride=False)
78
+ tags = fields.Str(requeride=False)
79
+ test = fields.Int(requerided=False)
80
+ test__engagement = fields.List(fields.Int, requerided=False)
81
+ test__engagement__product = fields.List(fields.Int, requerided=False)
82
+ test__engagement__product__prod_type = fields.List(fields.Int, requerided=False)
83
+ test__engagement__product__tags = fields.List(fields.Int, requerided=False)
84
+ test__engagement__tags = fields.List(fields.Str, requerided=False)
85
+ test__tags = fields.List(fields.Str, requerided=False)
86
+ test__test_type = fields.List(fields.Int, requerided=False)
87
+ title = fields.Str(requeride=False)
88
+ under_defect_review = fields.Bool(requerided=False)
89
+ under_review = fields.Bool(requerided=False)
90
+ unique_id_from_tool = fields.Str(requeride=False)
91
+ verified = fields.Bool(requerided=False)
92
+ vuln_id_from_tool = fields.Str(requeride=False)
93
+ vulnerability_id = fields.Str(requeride=False)
94
+
95
+
96
+ class FindingCloseSerializer(Schema):
97
+ is_mitigated = fields.Bool(default=True, requerided=False)
98
+ mitigated = fields.Bool(requerided=False)
99
+ detail = fields.Str(required=False)
100
+ message = fields.Str(required=False)
@@ -0,0 +1,223 @@
1
+ from marshmallow import Schema, fields, post_load, validate
2
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.request_objects.import_scan import ImportScanRequest
3
+
4
+ list_scan_type = [
5
+ "Acunetix Scan",
6
+ "Acunetix360 Scan",
7
+ "Anchore Engine Scan",
8
+ "Anchore Enterprise Policy Check",
9
+ "Anchore Grype",
10
+ "AnchoreCTL Policies Report",
11
+ "AnchoreCTL Vuln Report",
12
+ "AppSpider Scan",
13
+ "Aqua Scan",
14
+ "Arachni Scan",
15
+ "AuditJS Scan",
16
+ "AWS Prowler Scan",
17
+ "AWS Scout2 Scan",
18
+ "AWS Security Finding Format (ASFF) Scan",
19
+ "AWS Security Hub Scan",
20
+ "Azure Security Center Recommendations Scan",
21
+ "Bandit Scan",
22
+ "BlackDuck API",
23
+ "Blackduck Component Risk",
24
+ "Blackduck Hub Scan",
25
+ "Brakeman Scan",
26
+ "Bugcrowd API Import",
27
+ "BugCrowd Scan",
28
+ "Bundler-Audit Scan",
29
+ "Burp Enterprise Scan",
30
+ "Burp GraphQL API",
31
+ "Burp REST API",
32
+ "Burp Scan",
33
+ "CargoAudit Scan",
34
+ "Checkmarx OSA",
35
+ "Checkmarx Scan",
36
+ "Checkmarx Scan detailed",
37
+ "Checkov Scan",
38
+ "Clair Klar Scan",
39
+ "Clair Scan",
40
+ "Cloudsploit Scan",
41
+ "Cobalt.io API Import",
42
+ "Cobalt.io Scan",
43
+ "Codechecker Report native",
44
+ "Contrast Scan",
45
+ "Coverity API",
46
+ "Crashtest Security JSON File",
47
+ "Crashtest Security XML File",
48
+ "CredScan Scan",
49
+ "CycloneDX Scan",
50
+ "DawnScanner Scan",
51
+ "Dependency Check Scan",
52
+ "Dependency Track Finding Packaging Format (FPF) Export",
53
+ "Detect-secrets Scan",
54
+ "docker-bench-security Scan",
55
+ "Dockle Scan",
56
+ "DrHeader JSON Importer",
57
+ "DSOP Scan",
58
+ "Edgescan Scan",
59
+ "ESLint Scan",
60
+ "Fortify Scan",
61
+ "Generic Findings Import",
62
+ "Ggshield Scan",
63
+ "Github Vulnerability Scan",
64
+ "GitLab API Fuzzing Report Scan",
65
+ "GitLab Container Scan",
66
+ "GitLab DAST Report",
67
+ "GitLab Dependency Scanning Report",
68
+ "GitLab SAST Report",
69
+ "GitLab Secret Detection Report",
70
+ "Gitleaks Scan",
71
+ "Gosec Scanner",
72
+ "HackerOne Cases",
73
+ "Hadolint Dockerfile check",
74
+ "Harbor Vulnerability Scan",
75
+ "Horusec Scan",
76
+ "HuskyCI Report",
77
+ "Hydra Scan",
78
+ "IBM AppScan DAST",
79
+ "Immuniweb Scan",
80
+ "IntSights Report",
81
+ "JFrog Xray API Summary Artifact Scan",
82
+ "JFrog Xray On Demand Binary Scan",
83
+ "JFrog Xray Scan",
84
+ "JFrog Xray Unified Scan",
85
+ "KICS Scan",
86
+ "Kiuwan Scan",
87
+ "kube-bench Scan",
88
+ "Meterian Scan",
89
+ "Microfocus Webinspect Scan",
90
+ "MobSF Scan",
91
+ "Mobsfscan Scan",
92
+ "Mozilla Observatory Scan",
93
+ "Nessus Scan",
94
+ "Nessus WAS Scan",
95
+ "Netsparker Scan",
96
+ "NeuVector (compliance)",
97
+ "NeuVector (REST)",
98
+ "Nexpose Scan",
99
+ "Nikto Scan",
100
+ "Nmap Scan",
101
+ "Node Security Platform Scan",
102
+ "NPM Audit Scan",
103
+ "Nuclei Scan",
104
+ "Openscap Vulnerability Scan",
105
+ "OpenVAS CSV",
106
+ "ORT evaluated model Importer",
107
+ "OssIndex Devaudit SCA Scan Importer",
108
+ "Outpost24 Scan",
109
+ "PHP Security Audit v2",
110
+ "PHP Symfony Security Check",
111
+ "pip-audit Scan",
112
+ "PMD Scan",
113
+ "PWN SAST",
114
+ "Qualys Infrastructure Scan (WebGUI XML)",
115
+ "Qualys Scan",
116
+ "Qualys Webapp Scan",
117
+ "Retire.js Scan",
118
+ "Risk Recon API Importer",
119
+ "Rubocop Scan",
120
+ "Rusty Hog Scan",
121
+ "SARIF",
122
+ "Scantist Scan",
123
+ "Scout Suite Scan",
124
+ "Semgrep JSON Report",
125
+ "SKF Scan",
126
+ "Snyk Scan",
127
+ "Solar Appscreener Scan",
128
+ "SonarQube API Import",
129
+ "SonarQube Scan",
130
+ "SonarQube Scan detailed",
131
+ "Sonatype Application Scan",
132
+ "SpotBugs Scan",
133
+ "SSL Labs Scan",
134
+ "Sslscan",
135
+ "Sslyze Scan",
136
+ "SSLyze Scan (JSON)",
137
+ "StackHawk HawkScan",
138
+ "Talisman Scan",
139
+ "Terrascan Scan",
140
+ "Testssl Scan",
141
+ "TFSec Scan",
142
+ "Trivy Operator Scan",
143
+ "Trivy Scan",
144
+ "Trufflehog Scan",
145
+ "Trufflehog3 Scan",
146
+ "Trustwave Fusion API Scan",
147
+ "Trustwave Scan (CSV)",
148
+ "Twistlock Image Scan",
149
+ "VCG Scan",
150
+ "Veracode Scan",
151
+ "Veracode SourceClear Scan",
152
+ "Vulners",
153
+ "Wapiti Scan",
154
+ "Wazuh",
155
+ "WFuzz JSON report",
156
+ "Whispers Scan",
157
+ "WhiteHat Sentinel",
158
+ "Whitesource Scan",
159
+ "Wpscan",
160
+ "Xanitizer Scan",
161
+ "Yarn Audit Scan",
162
+ "ZAP Scan",
163
+ ]
164
+ group_by_list = ["component_name", "component_name+component_version", "file_path", "finding_title"]
165
+
166
+
167
+ class ImportScanSerializer(Schema):
168
+ scan_date = fields.Str(required=False)
169
+ minimum_severity = fields.Str(required=False)
170
+ active = fields.Str(required=False, load_default="true")
171
+ verified = fields.Str(required=False, load_default="true")
172
+ scan_type = fields.Str(required=True, validate=validate.OneOf(list_scan_type))
173
+ endpoint_to_add = fields.Str(required=False)
174
+ file = fields.Str(required=False)
175
+ product_type_name = fields.Str(required=False)
176
+ product_name = fields.Str(required=False)
177
+ engagement_name = fields.Str(required=True)
178
+ engagement_end_date = fields.Str(required=False)
179
+ source_code_management_uri = fields.Str(required=False)
180
+ engagement = fields.Int(required=False)
181
+ auto_create_context = fields.Str(required=False, load_default="true")
182
+ deduplication_on_engagement = fields.Str(required=False)
183
+ lead = fields.Str(required=False)
184
+ tags = fields.Str(required=True, validate=validate.OneOf(["cde", "evc"]))
185
+ close_old_findings = fields.Str(required=False, load_default=True)
186
+ close_old_findings_product_scope = fields.Str(required=False)
187
+ push_to_jira = fields.Str(required=False)
188
+ environment = fields.Str(
189
+ required=False,
190
+ validate=validate.OneOf(["Development", "Production", "Default", "Staging", "Test", "Pre-prod", "Lab"]),
191
+ )
192
+ version = fields.Str(required=False)
193
+ build_id = fields.Str(required=False)
194
+ branch_tag = fields.Str(required=False)
195
+ commit_hash = fields.Str(required=False)
196
+ api_scan_configuration = fields.Int(required=False)
197
+ service = fields.Str(required=False)
198
+ group_by = fields.Str(required=False)
199
+ test_title = fields.Str(required=False)
200
+ description_product = fields.Str(required=False)
201
+ create_finding_groups_for_all_findings = fields.Str(required=False)
202
+ tools_configuration = fields.Int(required=False, load_default=1)
203
+ code_app = fields.Str(required=False)
204
+ # defect-dojo credential
205
+ token_cmdb = fields.Str(required=True)
206
+ host_cmdb = fields.Url(required=True)
207
+ token_defect_dojo = fields.Str(required=True)
208
+ host_defect_dojo = fields.Str(required=True)
209
+ cmdb_mapping = fields.Dict(required=True)
210
+ product_type_name_mapping = fields.Dict(required=False)
211
+ # Config remote credential
212
+ compact_remote_config_url = fields.Str(required=False)
213
+ organization_url = fields.Str(required=False)
214
+ personal_access_token = fields.Str(required=False)
215
+ repository_id = fields.Str(required=False)
216
+ remote_config_path = fields.Str(required=False)
217
+ project_remote_config = fields.Str(required=False)
218
+ # regulare expression
219
+ expression = fields.Str(required=True)
220
+
221
+ @post_load
222
+ def make_cmdb(self, data, **kwargs):
223
+ return ImportScanRequest(**data)
@@ -0,0 +1,59 @@
1
+ import re
2
+ from devsecops_engine_tools.engine_utilities.utils.api_error import ApiError
3
+ from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.cmdb import CmdbRestConsumer
4
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.request_objects.import_scan import ImportScanRequest
5
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
6
+ from devsecops_engine_tools.engine_utilities.azuredevops.infrastructure.azure_devops_api import AzureDevopsApi
7
+ from devsecops_engine_tools.engine_utilities.settings import SETTING_LOGGER
8
+
9
+ logger = MyLogger.__call__(**SETTING_LOGGER).get_logger()
10
+
11
+
12
+ class CmdbUserCase:
13
+ def __init__(self, rest_consumer_cmdb: CmdbRestConsumer, utils_azure: AzureDevopsApi, expression) -> None:
14
+ self.__rc_cmdb = rest_consumer_cmdb
15
+ self.__utils_azure = utils_azure
16
+ self.__expression = expression
17
+
18
+ def execute(self, request: ImportScanRequest) -> ImportScanRequest:
19
+ # Connection config map
20
+ connection = self.__utils_azure.get_azure_connection()
21
+ remote_config = self.__utils_azure.get_remote_json_config(connection=connection)
22
+
23
+ # regular exprecion
24
+ request.code_app = self.get_code_app(request.engagement_name)
25
+
26
+ # connect cmdb
27
+ product_data = self.__rc_cmdb.get_product_info(request)
28
+ search_type_product = next(
29
+ (
30
+ key
31
+ for key, list in remote_config.get("products_sync_with_other_productype", {}).items()
32
+ if request.code_app in list
33
+ ),
34
+ None,
35
+ )
36
+ if search_type_product:
37
+ request.product_type_name = search_type_product
38
+ else:
39
+ request.product_type_name = (
40
+ remote_config["types_product"].get(product_data.product_type_name, product_data.product_type_name)
41
+ if product_data.product_type_name
42
+ else remote_config["types_product"].get("ORPHAN_PRODUCT_TYPE", "ORPHAN_PRODUCT_TYPE")
43
+ )
44
+
45
+ request.product_name = product_data.product_name
46
+ request.tags = product_data.tag_product if product_data.tag_product else "ORPHAN"
47
+ request.product_description = product_data.product_description
48
+
49
+ return request
50
+
51
+ def get_code_app(self, engagement_name: str):
52
+ m = re.search(r"" + self.__expression, engagement_name, re.IGNORECASE)
53
+ if m is None:
54
+ e = f"Engagement name {engagement_name} not match whit expression: {self.__expression}"
55
+ logger.error(e)
56
+ raise ApiError(e)
57
+ code_app = m.group(1)
58
+ logger.debug(code_app)
59
+ return code_app.lower()
@@ -0,0 +1,38 @@
1
+ from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.finding import FindingRestConsumer
2
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.serializers.finding import FindingCloseSerializer
3
+ from devsecops_engine_tools.engine_utilities.utils.api_error import ApiError
4
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
5
+ from devsecops_engine_tools.engine_utilities.settings import SETTING_LOGGER
6
+ import datetime
7
+ import pytz
8
+
9
+ logger = MyLogger.__call__(**SETTING_LOGGER).get_logger()
10
+
11
+
12
+ class FindingUserCase:
13
+ def __init__(self, rest_finding: FindingRestConsumer):
14
+ self.__rest_finding = rest_finding
15
+
16
+ def execute(self, request):
17
+ findings = self.__rest_finding.get(request)
18
+ if findings.results == []:
19
+ logger.error("Finding con Id_from_tool {request.get('unique_id_from_tool')} not found")
20
+ raise ApiError(f"Finding con Id_from_tool {request.get('unique_id_from_tool')} not found")
21
+ tz = pytz.timezone("America/Bogota")
22
+ date = datetime.datetime.now(tz=tz).strftime("%Y-%m-%dT%H:%M:%S.%fZ")
23
+ logger.debug(f"date: {date}")
24
+ response = None
25
+ for finding in findings.results:
26
+ request_close = {"is_mitigated": "True", "mitigated": date}
27
+ response = self.__rest_finding.close(request_close, finding.id)
28
+ return response
29
+
30
+
31
+ class FindingGetUserCase:
32
+ def __init__(self, rest_finding: FindingRestConsumer):
33
+ self.__rest_finding = rest_finding
34
+
35
+ def execute(self, request):
36
+ response = self.__rest_finding.get(request)
37
+ logger.debug(f"finding: {response}")
38
+ return response
@@ -0,0 +1,133 @@
1
+ import re
2
+ import os
3
+ from devsecops_engine_tools.engine_utilities.utils.api_error import ApiError
4
+ from devsecops_engine_tools.engine_utilities.settings import SETTING_LOGGER
5
+ from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
6
+ from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.import_scan import ImportScanRestConsumer
7
+ from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.product_type import ProductTypeRestConsumer
8
+ from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.product import ProductRestConsumer
9
+ from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.scan_configurations import (
10
+ ScanConfigrationRestConsumer,
11
+ )
12
+ from devsecops_engine_tools.engine_utilities.defect_dojo.infraestructure.driver_adapters.engagement import EngagementRestConsumer
13
+ from devsecops_engine_tools.engine_utilities.defect_dojo.domain.request_objects.import_scan import ImportScanRequest
14
+ import urllib3
15
+
16
+ logger = MyLogger.__call__(**SETTING_LOGGER).get_logger()
17
+
18
+ urllib3.disable_warnings()
19
+
20
+
21
+ class ImportScanUserCase:
22
+ def __init__(
23
+ self,
24
+ rest_import_scan: ImportScanRestConsumer,
25
+ rest_product_type: ProductTypeRestConsumer,
26
+ rest_product: ProductRestConsumer,
27
+ rest_scan_configuration: ScanConfigrationRestConsumer,
28
+ rest_engagement: EngagementRestConsumer,
29
+ ):
30
+ self.__rest_import_scan = rest_import_scan
31
+ self.__rest_product_type = rest_product_type
32
+ self.__rest_product = rest_product
33
+ self.__rest_scan_configurations = rest_scan_configuration
34
+ self.__rest_engagement = rest_engagement
35
+
36
+ def execute(self, request: ImportScanRequest) -> ImportScanRequest:
37
+ response = None
38
+ product_id = None
39
+
40
+ if (request.product_name or request.product_type_name) == "":
41
+ log = f"Name product {request.product_name} or product type {request.product_type_name} is empty"
42
+ logger.error(log)
43
+ raise ApiError(log)
44
+
45
+ logger.info(f"Match {request.scan_type}")
46
+ products = self.__rest_product.get_products(request)
47
+ if len(products.results) > 0:
48
+ product_id = products.results[0].id
49
+ request.product_name = products.results[0].name
50
+ request.product_type_name = self.__rest_product_type.get_product_type_id(products.results[0].prod_type).name
51
+ logger.info(f"product found: {request.product_name} with id: {product_id}")
52
+ else:
53
+ product_type_id = None
54
+ product_types = self.__rest_product_type.get_product_types(request.product_type_name)
55
+ if product_types.results == []:
56
+ product_type = self.__rest_product_type.post_product_type(request.product_type_name)
57
+ product_type_id = product_type.id
58
+ logger.info(f"product_type created: {product_type.name} with id {product_type.id}")
59
+ else:
60
+ if len(product_types.results) != 1:
61
+ logger.warning(f"there is more than one product type with the name: {product_types.results}")
62
+
63
+ product_type_id = product_types.results[0].id
64
+ logger.info(
65
+ f"product_type found: {product_types.results[0].name}\
66
+ with id {product_type_id}"
67
+ )
68
+
69
+ product = self.__rest_product.post_product(request, product_type_id)
70
+ product_id = product.id
71
+ logger.info(
72
+ f"product created: {product.name}\
73
+ found with id: {product.id}"
74
+ )
75
+
76
+ api_scan_bool = re.search(" API ", request.scan_type)
77
+ if api_scan_bool:
78
+ scan_configuration_list = self.__rest_scan_configurations.get_api_scan_configuration(request)
79
+ if scan_configuration_list.results == []:
80
+ scan_configuration = self.__rest_scan_configurations.post_api_scan_configuration(
81
+ request, product_id, request.tools_configuration
82
+ )
83
+ request.api_scan_configuration = scan_configuration.id
84
+ logger.debug(f"Scan configuration create service_key_1 : {scan_configuration.service_key_1}")
85
+ else:
86
+ logger.debug(
87
+ f"Scan configuration found service_key: {scan_configuration_list.results[0].service_key_1}"
88
+ )
89
+ request.api_scan_configuration = scan_configuration_list.results[0].id
90
+
91
+ logger.debug(f"search Engagement name: {request.engagement_name}")
92
+ engagement = self.__rest_engagement.get_engagements(request.engagement_name)
93
+ if engagement.results == []:
94
+ engagement = self.__rest_engagement.post_engagement(request.engagement_name, product_id)
95
+ logger.debug(f"Egagement created: {engagement.name}")
96
+ else:
97
+ engagement = [engagement for engagement in engagement.results if engagement.product == product_id]
98
+ if engagement:
99
+ logger.debug(f"Engagement found: {engagement[0].name} whit product id: {engagement[0].product}")
100
+ else:
101
+ engagement = self.__rest_engagement.post_engagement(request.engagement_name, product_id)
102
+ logger.debug(f"Egagement created: {engagement.name} whit product id {engagement.product}")
103
+
104
+ if api_scan_bool:
105
+ response = self.__rest_import_scan.import_scan_api(request)
106
+ logger.info(f"End process Succesfull!!!: {response}")
107
+ else:
108
+ try:
109
+ file_type = self.get_file_type(request.file)
110
+ if file_type is None:
111
+ raise ApiError("File format not allowed")
112
+
113
+ with open(request.file, "rb") as file:
114
+ logger.info(f"read {file_type} file successful !!!")
115
+ files = [("file", (request.file, file, file_type))]
116
+ response = self.__rest_import_scan.import_scan(request, files)
117
+
118
+ except Exception as e:
119
+ raise ApiError(e)
120
+
121
+ response.url = f"{request.host_defect_dojo}/engagement/{str(response.engagement_id)}/finding/open"
122
+ return response
123
+
124
+ def get_file_type(self, path_file):
125
+ __, extension = os.path.splitext(path_file)
126
+ dict_rule_type_file = {
127
+ ".csv": "text/csv",
128
+ ".json": "apllication/json",
129
+ ".xml": "aplication/xml",
130
+ ".sarif": "aplication/json",
131
+ }
132
+ file_type = dict_rule_type_file.get(extension)
133
+ return file_type