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.
- devsecops_engine_tools/__init__.py +0 -0
- devsecops_engine_tools/engine_core/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/applications/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/applications/runner_engine_core.py +124 -0
- devsecops_engine_tools/engine_core/src/deployment/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/deployment/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/domain/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/domain/model/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/domain/model/customs_exceptions.py +9 -0
- devsecops_engine_tools/engine_core/src/domain/model/exclusions.py +14 -0
- devsecops_engine_tools/engine_core/src/domain/model/finding.py +20 -0
- devsecops_engine_tools/engine_core/src/domain/model/gateway/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/domain/model/gateway/devops_platform_gateway.py +27 -0
- devsecops_engine_tools/engine_core/src/domain/model/gateway/metrics_manager_gateway.py +7 -0
- devsecops_engine_tools/engine_core/src/domain/model/gateway/printer_table_gateway.py +13 -0
- devsecops_engine_tools/engine_core/src/domain/model/gateway/secrets_manager_gateway.py +7 -0
- devsecops_engine_tools/engine_core/src/domain/model/gateway/vulnerability_management_gateway.py +17 -0
- devsecops_engine_tools/engine_core/src/domain/model/input_core.py +12 -0
- devsecops_engine_tools/engine_core/src/domain/model/level_compliance.py +3 -0
- devsecops_engine_tools/engine_core/src/domain/model/level_vulnerability.py +7 -0
- devsecops_engine_tools/engine_core/src/domain/model/threshold.py +12 -0
- devsecops_engine_tools/engine_core/src/domain/model/vulnerability_management.py +20 -0
- devsecops_engine_tools/engine_core/src/domain/usecases/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/domain/usecases/break_build.py +375 -0
- devsecops_engine_tools/engine_core/src/domain/usecases/handle_scan.py +148 -0
- devsecops_engine_tools/engine_core/src/domain/usecases/metrics_manager.py +59 -0
- devsecops_engine_tools/engine_core/src/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/s3_manager.py +52 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/aws/secrets_manager.py +40 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/azure/azure_devops.py +103 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/defect_dojo/defect_dojo.py +215 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_pretty_table/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/printer_pretty_table/printer_pretty_table.py +84 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/runtime_local/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/driven_adapters/runtime_local/runtime_local.py +71 -0
- devsecops_engine_tools/engine_core/src/infrastructure/entry_points/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/entry_points/entry_point_core.py +50 -0
- devsecops_engine_tools/engine_core/src/infrastructure/helpers/__init__.py +0 -0
- devsecops_engine_tools/engine_core/src/infrastructure/helpers/aws.py +9 -0
- devsecops_engine_tools/engine_core/src/infrastructure/helpers/util.py +15 -0
- devsecops_engine_tools/engine_dast/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/applications/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/deployment/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/deployment/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/domain/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/domain/model/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/domain/usecases/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/infrastructure/driven_adapters/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/infrastructure/entry_points/__init__.py +0 -0
- devsecops_engine_tools/engine_dast/src/infrastructure/helpers/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/applications/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/applications/runner_iac_scan.py +30 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/deployment/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/deployment/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/config_tool.py +24 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/gateways/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/gateways/tool_gateway.py +6 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/usecases/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/usecases/iac_scan.py +130 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_config.py +135 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_deserealizator.py +35 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_tool.py +195 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/entry_points/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/entry_points/entry_point_tool.py +6 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/helpers/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/helpers/file_generator_tool.py +74 -0
- devsecops_engine_tools/engine_sast/engine_secret/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/applications/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/applications/runner_secret_scan.py +34 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/deployment/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/deployment/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/DeserializeConfigTool.py +11 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/gateway_deserealizator.py +11 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/git_gateway.py +15 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/tool_gateway.py +16 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/secret_scan.py +72 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/domain/usecases/set_input_core.py +73 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/git_cli/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/git_cli/git_run.py +60 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_deserealizator.py +39 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/trufflehog/trufflehog_run.py +104 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/__init__.py +0 -0
- devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py +11 -0
- devsecops_engine_tools/engine_sca/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/applications/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/applications/runner_container_scan.py +45 -0
- devsecops_engine_tools/engine_sca/engine_container/src/deployment/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/deployment/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/model/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/deserealizator_gateway.py +8 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/images_gateway.py +7 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/tool_gateway.py +7 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py +82 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/handle_remote_config_patterns.py +67 -0
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/set_input_core.py +76 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/docker/docker_images.py +22 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_cloud_manager_scan.py +123 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_deserialize_output.py +62 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_deserialize_output.py +48 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_manager_scan.py +114 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py +40 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/helpers/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/helpers/images_scanned.py +16 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/applications/runner_dependencies_scan.py +32 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/deployment/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/deployment/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/gateways/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/gateways/deserializator_gateway.py +8 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/model/gateways/tool_gateway.py +9 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/dependencies_sca_scan.py +44 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/find_artifacts.py +95 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/find_mono_repos.py +29 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/handle_remote_config_patterns.py +90 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/domain/usecases/set_input_core.py +65 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_deserialize_output.py +57 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/driven_adapters/xray_tool/xray_manager_scan.py +154 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/__init__.py +0 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/entry_points/entry_point_tool.py +83 -0
- devsecops_engine_tools/engine_sca/engine_dependencies/src/infrastructure/helpers/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/azuredevops/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/azuredevops/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/azuredevops/infrastructure/azure_devops_api.py +67 -0
- devsecops_engine_tools/engine_utilities/azuredevops/models/AzureMessageLoggingPipeline.py +21 -0
- devsecops_engine_tools/engine_utilities/azuredevops/models/AzurePredefinedVariables.py +65 -0
- devsecops_engine_tools/engine_utilities/azuredevops/models/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/__init__.py +5 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/applications/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/applications/connect.py +37 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/applications/defect_dojo.py +40 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/applications/finding.py +40 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/cmdb.py +11 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/engagement.py +55 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/finding.py +96 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/product.py +35 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/product_list.py +12 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/product_type.py +16 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/product_type_list.py +13 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/models/scan_configuration.py +21 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/request_objects/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/request_objects/finding.py +95 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/request_objects/import_scan.py +125 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/finding.py +100 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/serializers/import_scan.py +223 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/cmdb.py +59 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/finding.py +38 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/domain/user_case/import_scan.py +133 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/hello_world.py +2 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/cmdb.py +55 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/engagement.py +55 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/finding.py +37 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/import_scan.py +115 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/product.py +50 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/product_type.py +59 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/scan_configurations.py +65 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/settings/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/settings/settings.py +1 -0
- devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/repository/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/github/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/github/infrastructure/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/github/infrastructure/github_api.py +49 -0
- devsecops_engine_tools/engine_utilities/github/models/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/input_validations/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/input_validations/env_utils.py +10 -0
- devsecops_engine_tools/engine_utilities/input_validations/validate_input_with_regex_letters_number_and_only.py +8 -0
- devsecops_engine_tools/engine_utilities/settings.py +38 -0
- devsecops_engine_tools/engine_utilities/ssh/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/ssh/managment_private_key.py +67 -0
- devsecops_engine_tools/engine_utilities/utils/__init__.py +0 -0
- devsecops_engine_tools/engine_utilities/utils/api_error.py +14 -0
- devsecops_engine_tools/engine_utilities/utils/dataclass_classmethod.py +84 -0
- devsecops_engine_tools/engine_utilities/utils/datetime_parsing.py +10 -0
- devsecops_engine_tools/engine_utilities/utils/logger_info.py +109 -0
- devsecops_engine_tools/engine_utilities/utils/name_conversion.py +12 -0
- devsecops_engine_tools/engine_utilities/utils/printers.py +21 -0
- devsecops_engine_tools/engine_utilities/utils/session_manager.py +14 -0
- devsecops_engine_tools/version.py +1 -0
- devsecops_engine_tools-1.6.7.dist-info/METADATA +156 -0
- devsecops_engine_tools-1.6.7.dist-info/RECORD +231 -0
- devsecops_engine_tools-1.6.7.dist-info/WHEEL +5 -0
- devsecops_engine_tools-1.6.7.dist-info/entry_points.txt +2 -0
- devsecops_engine_tools-1.6.7.dist-info/top_level.txt +1 -0
|
File without changes
|
devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/__init__.py
ADDED
|
File without changes
|
|
@@ -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
|
devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/engagement.py
ADDED
|
@@ -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
|
devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/finding.py
ADDED
|
@@ -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
|
devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/import_scan.py
ADDED
|
@@ -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
|
devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/product.py
ADDED
|
@@ -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
|
devsecops_engine_tools/engine_utilities/defect_dojo/infraestructure/driver_adapters/product_type.py
ADDED
|
@@ -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
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
VERIFY_CERTIFICATE = False
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -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
|
+
)
|
|
File without changes
|
|
File without changes
|
|
@@ -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)
|
|
File without changes
|
|
@@ -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}")
|
|
File without changes
|