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
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from devsecops_engine_tools.engine_core.src.domain.model.threshold import Threshold
|
|
2
|
+
|
|
3
|
+
class DeserializeConfigTool:
|
|
4
|
+
def __init__(self, json_data, tool):
|
|
5
|
+
self.ignore_search_pattern = json_data["IGNORE_SEARCH_PATTERN"]
|
|
6
|
+
self.message_info_engine_secret = json_data["MESSAGE_INFO_ENGINE_SECRET"]
|
|
7
|
+
self.level_compliance = Threshold(json_data['THRESHOLD'])
|
|
8
|
+
self.scope_pipeline = ''
|
|
9
|
+
self.exclude_path = json_data[tool]["EXCLUDE_PATH"]
|
|
10
|
+
self.number_threads = json_data[tool]["NUMBER_THREADS"]
|
|
11
|
+
self.target_branches = json_data["TARGET_BRANCHES"]
|
|
File without changes
|
|
File without changes
|
devsecops_engine_tools/engine_sast/engine_secret/src/domain/model/gateway/gateway_deserealizator.py
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from abc import ABCMeta, abstractmethod
|
|
2
|
+
from devsecops_engine_tools.engine_core.src.domain.model.finding import Finding
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class DeseralizatorGateway(metaclass=ABCMeta):
|
|
6
|
+
@abstractmethod
|
|
7
|
+
def get_list_vulnerability(self, results_scan_list: list, path_directory: str, os: str) -> "list[Finding]":
|
|
8
|
+
"Deseralizator"
|
|
9
|
+
@abstractmethod
|
|
10
|
+
def get_where_correctly(self, results_scan_list: any):
|
|
11
|
+
"Transform Where"
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from abc import ABCMeta, abstractmethod
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class GitGateway(metaclass=ABCMeta):
|
|
5
|
+
@abstractmethod
|
|
6
|
+
def get_files_pull_request(self, sys_working_dir: str,
|
|
7
|
+
target_branch: str,
|
|
8
|
+
config_target_branch: dict,
|
|
9
|
+
source_branch: str,
|
|
10
|
+
access_token: str,
|
|
11
|
+
collection_uri: str,
|
|
12
|
+
team_project: str,
|
|
13
|
+
repository_name: str,
|
|
14
|
+
repository_provider: str) -> dict:
|
|
15
|
+
"get_files_pull_request"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from abc import ABCMeta, abstractmethod
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ToolGateway(metaclass=ABCMeta):
|
|
5
|
+
@abstractmethod
|
|
6
|
+
def install_tool(self, agent_os: str, agent_temp_dir:str) -> any:
|
|
7
|
+
"install tool"
|
|
8
|
+
@abstractmethod
|
|
9
|
+
def run_tool_secret_scan(self,
|
|
10
|
+
files_pullrequest: dict,
|
|
11
|
+
exclude_path: dict,
|
|
12
|
+
agent_os: str,
|
|
13
|
+
agent_work_folder: str,
|
|
14
|
+
num_threads: int,
|
|
15
|
+
repository_name: str) -> str:
|
|
16
|
+
"run tool secret scan"
|
|
File without changes
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
from devsecops_engine_tools.engine_core.src.domain.model.input_core import InputCore
|
|
2
|
+
from devsecops_engine_tools.engine_sast.engine_secret.src.domain.model.DeserializeConfigTool import (
|
|
3
|
+
DeserializeConfigTool,
|
|
4
|
+
)
|
|
5
|
+
from devsecops_engine_tools.engine_sast.engine_secret.src.domain.model.gateway.tool_gateway import (
|
|
6
|
+
ToolGateway,
|
|
7
|
+
)
|
|
8
|
+
from devsecops_engine_tools.engine_sast.engine_secret.src.domain.model.gateway.gateway_deserealizator import (
|
|
9
|
+
DeseralizatorGateway,
|
|
10
|
+
)
|
|
11
|
+
from devsecops_engine_tools.engine_core.src.domain.model.gateway.devops_platform_gateway import (
|
|
12
|
+
DevopsPlatformGateway,
|
|
13
|
+
)
|
|
14
|
+
from devsecops_engine_tools.engine_sast.engine_secret.src.domain.model.gateway.git_gateway import (
|
|
15
|
+
GitGateway
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
class SecretScan:
|
|
19
|
+
def __init__(
|
|
20
|
+
self,
|
|
21
|
+
tool_gateway: ToolGateway,
|
|
22
|
+
devops_platform_gateway: DevopsPlatformGateway,
|
|
23
|
+
tool_deserialize: DeseralizatorGateway,
|
|
24
|
+
git_gateway: GitGateway
|
|
25
|
+
):
|
|
26
|
+
self.tool_gateway = tool_gateway
|
|
27
|
+
self.devops_platform_gateway = devops_platform_gateway
|
|
28
|
+
self.tool_deserialize = tool_deserialize
|
|
29
|
+
self.git_gateway = git_gateway
|
|
30
|
+
|
|
31
|
+
def process(self, dict_args, tool):
|
|
32
|
+
tool = str(tool).lower()
|
|
33
|
+
init_config_tool = self.devops_platform_gateway.get_remote_config(
|
|
34
|
+
dict_args["remote_config_repo"], "engine_sast/engine_secret/ConfigTool.json"
|
|
35
|
+
)
|
|
36
|
+
config_tool, skip_tool = self.complete_config_tool(
|
|
37
|
+
init_config_tool, tool
|
|
38
|
+
)
|
|
39
|
+
finding_list = []
|
|
40
|
+
if skip_tool == "false":
|
|
41
|
+
self.tool_gateway.install_tool(self.devops_platform_gateway.get_variable("os"), self.devops_platform_gateway.get_variable("temp_directory"))
|
|
42
|
+
files_pullrequest = self.git_gateway.get_files_pull_request(
|
|
43
|
+
self.devops_platform_gateway.get_variable("work_folder"),
|
|
44
|
+
self.devops_platform_gateway.get_variable("target_branch"),
|
|
45
|
+
config_tool.target_branches,
|
|
46
|
+
self.devops_platform_gateway.get_variable("source_branch"),
|
|
47
|
+
self.devops_platform_gateway.get_variable("access_token"),
|
|
48
|
+
self.devops_platform_gateway.get_variable("organization"),
|
|
49
|
+
self.devops_platform_gateway.get_variable("project_name"),
|
|
50
|
+
self.devops_platform_gateway.get_variable("repository"),
|
|
51
|
+
self.devops_platform_gateway.get_variable("repository_provider"))
|
|
52
|
+
finding_list = self.tool_deserialize.get_list_vulnerability(
|
|
53
|
+
self.tool_gateway.run_tool_secret_scan(
|
|
54
|
+
files_pullrequest,
|
|
55
|
+
config_tool.exclude_path,
|
|
56
|
+
self.devops_platform_gateway.get_variable("os"),
|
|
57
|
+
self.devops_platform_gateway.get_variable("work_folder"),
|
|
58
|
+
config_tool.number_threads,
|
|
59
|
+
self.devops_platform_gateway.get_variable("repository")
|
|
60
|
+
),
|
|
61
|
+
self.devops_platform_gateway.get_variable("os"),
|
|
62
|
+
self.devops_platform_gateway.get_variable("path_directory")
|
|
63
|
+
)
|
|
64
|
+
return finding_list, config_tool
|
|
65
|
+
|
|
66
|
+
def complete_config_tool(self, data_file_tool, tool):
|
|
67
|
+
config_tool = DeserializeConfigTool(json_data=data_file_tool, tool=tool)
|
|
68
|
+
config_tool.scope_pipeline = self.devops_platform_gateway.get_variable("pipeline_name")
|
|
69
|
+
skip_tool = "false"
|
|
70
|
+
if config_tool.scope_pipeline in config_tool.ignore_search_pattern:
|
|
71
|
+
skip_tool = "true"
|
|
72
|
+
return config_tool, skip_tool
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
from devsecops_engine_tools.engine_core.src.domain.model.input_core import InputCore
|
|
2
|
+
from devsecops_engine_tools.engine_core.src.domain.model.gateway.devops_platform_gateway import (
|
|
3
|
+
DevopsPlatformGateway,
|
|
4
|
+
)
|
|
5
|
+
from devsecops_engine_tools.engine_sast.engine_secret.src.domain.model.DeserializeConfigTool import (
|
|
6
|
+
DeserializeConfigTool
|
|
7
|
+
)
|
|
8
|
+
from devsecops_engine_tools.engine_core.src.domain.model.exclusions import Exclusions
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class SetInputCore:
|
|
12
|
+
def __init__(self, tool_remote: DevopsPlatformGateway, dict_args, tool, config_tool: DeserializeConfigTool):
|
|
13
|
+
self.tool_remote = tool_remote
|
|
14
|
+
self.dict_args = dict_args
|
|
15
|
+
self.tool = tool
|
|
16
|
+
self.config_tool = config_tool
|
|
17
|
+
|
|
18
|
+
def get_remote_config(self, file_path):
|
|
19
|
+
"""
|
|
20
|
+
Get remote configuration.
|
|
21
|
+
|
|
22
|
+
Returns:
|
|
23
|
+
dict: Remote configuration.
|
|
24
|
+
"""
|
|
25
|
+
return self.tool_remote.get_remote_config(self.dict_args["remote_config_repo"], file_path)
|
|
26
|
+
|
|
27
|
+
def get_variable(self, variable):
|
|
28
|
+
"""
|
|
29
|
+
Get variable.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
dict: Remote variable.
|
|
33
|
+
"""
|
|
34
|
+
return self.tool_remote.get_variable(variable)
|
|
35
|
+
|
|
36
|
+
def get_exclusions(self, exclusions_data, pipeline_name, tool):
|
|
37
|
+
list_exclusions = []
|
|
38
|
+
for key, value in exclusions_data.items():
|
|
39
|
+
if (key == "All") or (key == pipeline_name):
|
|
40
|
+
exclusions = [
|
|
41
|
+
Exclusions(
|
|
42
|
+
id=item.get("id", ""),
|
|
43
|
+
where=item.get("where", ""),
|
|
44
|
+
create_date=item.get("create_date", ""),
|
|
45
|
+
expired_date=item.get("expired_date", ""),
|
|
46
|
+
severity=item.get("severity", ""),
|
|
47
|
+
hu=item.get("hu", ""),
|
|
48
|
+
reason=item.get("reason", "Risk acceptance"),
|
|
49
|
+
)
|
|
50
|
+
for item in value[tool]
|
|
51
|
+
]
|
|
52
|
+
list_exclusions.extend(exclusions)
|
|
53
|
+
return list_exclusions
|
|
54
|
+
|
|
55
|
+
def set_input_core(self, finding_list):
|
|
56
|
+
"""
|
|
57
|
+
Set the input core.
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
dict: Input core.
|
|
61
|
+
"""
|
|
62
|
+
return InputCore(
|
|
63
|
+
totalized_exclusions=self.get_exclusions(
|
|
64
|
+
self.get_remote_config("engine_sast/engine_secret/Exclusions.json"),
|
|
65
|
+
self.get_variable("pipeline_name"),
|
|
66
|
+
self.tool,
|
|
67
|
+
),
|
|
68
|
+
threshold_defined=self.config_tool.level_compliance,
|
|
69
|
+
path_file_results=finding_list,
|
|
70
|
+
custom_message_break_build=self.config_tool.message_info_engine_secret,
|
|
71
|
+
scope_pipeline=self.config_tool.scope_pipeline,
|
|
72
|
+
stage_pipeline=self.tool_remote.get_variable("stage").capitalize()
|
|
73
|
+
)
|
|
File without changes
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/driven_adapters/__init__.py
ADDED
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
import os
|
|
3
|
+
import subprocess
|
|
4
|
+
import git
|
|
5
|
+
from urllib.parse import quote
|
|
6
|
+
from devsecops_engine_tools.engine_sast.engine_secret.src.domain.model.gateway.git_gateway import GitGateway
|
|
7
|
+
|
|
8
|
+
from devsecops_engine_tools.engine_utilities.utils.logger_info import MyLogger
|
|
9
|
+
from devsecops_engine_tools.engine_utilities import settings
|
|
10
|
+
|
|
11
|
+
logger = MyLogger.__call__(**settings.SETTING_LOGGER).get_logger()
|
|
12
|
+
|
|
13
|
+
@dataclass
|
|
14
|
+
class GitRun(GitGateway):
|
|
15
|
+
|
|
16
|
+
def get_files_pull_request(self,
|
|
17
|
+
sys_working_dir,
|
|
18
|
+
target_branch,
|
|
19
|
+
config_target_branch,
|
|
20
|
+
source_branch,
|
|
21
|
+
access_token,
|
|
22
|
+
collection_uri,
|
|
23
|
+
team_project,
|
|
24
|
+
repository_name,
|
|
25
|
+
repository_provider):
|
|
26
|
+
try:
|
|
27
|
+
if repository_provider == 'GitHub' or target_branch not in config_target_branch:
|
|
28
|
+
return []
|
|
29
|
+
base_compact_url = (
|
|
30
|
+
f"https://{collection_uri.rstrip('/').split('/')[-1].replace('.visualstudio.com','')}"
|
|
31
|
+
f".visualstudio.com/{quote(team_project)}/_git/"
|
|
32
|
+
f"{repository_name}"
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
url_without_https = base_compact_url.replace("https://", "")
|
|
36
|
+
url_with_token = f"https://x-access-token:{access_token}@{url_without_https}"
|
|
37
|
+
|
|
38
|
+
path_new_folder = sys_working_dir + '/' + repository_name
|
|
39
|
+
|
|
40
|
+
if os.path.exists(path_new_folder):
|
|
41
|
+
logger.warning(f"Error: folder {repository_name} already exist")
|
|
42
|
+
return []
|
|
43
|
+
os.makedirs(path_new_folder)
|
|
44
|
+
os.chdir(sys_working_dir)
|
|
45
|
+
subprocess.run(["git", "clone", url_with_token, path_new_folder], capture_output=True, text=True)
|
|
46
|
+
os.chdir(path_new_folder)
|
|
47
|
+
|
|
48
|
+
repository = git.Repo(path_new_folder)
|
|
49
|
+
|
|
50
|
+
source_branch = source_branch.replace("refs/heads/", "")
|
|
51
|
+
subprocess.run(["git", "checkout", f"origin/{source_branch}"], capture_output=True, text=True)
|
|
52
|
+
if source_branch != None:
|
|
53
|
+
diff = repository.git.diff(f"origin/{source_branch}..origin/{target_branch}", name_only=True)
|
|
54
|
+
if diff:
|
|
55
|
+
diff_files = diff.strip().split("\n")
|
|
56
|
+
print("Pull Requests Associated Files:",len(diff_files))
|
|
57
|
+
return diff_files
|
|
58
|
+
except Exception as e:
|
|
59
|
+
logger.warning(f"Error getting files PullRequest: {e}")
|
|
60
|
+
return []
|
|
File without changes
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import re
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import List
|
|
5
|
+
from devsecops_engine_tools.engine_core.src.domain.model.finding import Finding, Category
|
|
6
|
+
from devsecops_engine_tools.engine_sast.engine_secret.src.domain.model.gateway.gateway_deserealizator import DeseralizatorGateway
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class SecretScanDeserealizator(DeseralizatorGateway):
|
|
10
|
+
|
|
11
|
+
def get_list_vulnerability(self, results_scan_list: List[dict], os, path_directory) -> List[Finding]:
|
|
12
|
+
list_open_vulnerabilities = []
|
|
13
|
+
for result in results_scan_list:
|
|
14
|
+
where_text, line = self.get_where_correctly(result, os, path_directory)
|
|
15
|
+
vulnerability_open = Finding(
|
|
16
|
+
id="SECRET_SCANNING",
|
|
17
|
+
cvss=None,
|
|
18
|
+
where=f"{where_text}, Line: {line}",
|
|
19
|
+
description="Sensitive information in source code",
|
|
20
|
+
severity="critical",
|
|
21
|
+
identification_date=datetime.now().strftime("%d%m%Y"),
|
|
22
|
+
published_date_cve=None,
|
|
23
|
+
module="engine_secret",
|
|
24
|
+
category=Category.VULNERABILITY,
|
|
25
|
+
requirements=result.get("DetectorName"),
|
|
26
|
+
tool="Trufflehog",
|
|
27
|
+
)
|
|
28
|
+
list_open_vulnerabilities.append(vulnerability_open)
|
|
29
|
+
return list_open_vulnerabilities
|
|
30
|
+
|
|
31
|
+
def get_where_correctly(self, result: dict, os, path_directory):
|
|
32
|
+
line = str(result.get("SourceMetadata").get("Data").get("Filesystem").get("line") or "Multiline")
|
|
33
|
+
original_where = str(result.get("SourceMetadata").get("Data").get("Filesystem").get("file"))
|
|
34
|
+
if re.search(r'Linux', os):
|
|
35
|
+
original_where = original_where.replace("\\", "/")
|
|
36
|
+
|
|
37
|
+
path_remove = path_directory or ""
|
|
38
|
+
where_text = original_where.replace(path_remove, "")
|
|
39
|
+
return where_text, line
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import re
|
|
3
|
+
import subprocess
|
|
4
|
+
import concurrent.futures
|
|
5
|
+
|
|
6
|
+
from devsecops_engine_tools.engine_sast.engine_secret.src.domain.model.gateway.tool_gateway import (
|
|
7
|
+
ToolGateway,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
result = []
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class TrufflehogRun(ToolGateway):
|
|
14
|
+
def install_tool(self, agent_os, agent_temp_dir) -> any:
|
|
15
|
+
reg_exp_os = r"Windows"
|
|
16
|
+
check_os = re.search(reg_exp_os, agent_os)
|
|
17
|
+
if check_os:
|
|
18
|
+
self.run_install_win(agent_temp_dir)
|
|
19
|
+
else:
|
|
20
|
+
command = f"trufflehog --version"
|
|
21
|
+
result = subprocess.run(command, capture_output=True, shell=True)
|
|
22
|
+
output = result.stderr.strip()
|
|
23
|
+
reg_exp = r"not found"
|
|
24
|
+
check_tool = re.search(reg_exp, output.decode("utf-8"))
|
|
25
|
+
if check_tool:
|
|
26
|
+
self.run_install()
|
|
27
|
+
|
|
28
|
+
def run_install(self):
|
|
29
|
+
command = f"curl -sSfL https://raw.githubusercontent.com/trufflesecurity/trufflehog/main/scripts/install.sh | sh -s -- -b /usr/local/bin"
|
|
30
|
+
subprocess.run(command, capture_output=True, shell=True)
|
|
31
|
+
|
|
32
|
+
def run_install_win(self, agent_temp_dir):
|
|
33
|
+
command_complete = f"powershell -Command [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; [Net.ServicePointManager]::SecurityProtocol; New-Item -Path {agent_temp_dir} -ItemType Directory -Force; Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/trufflesecurity/trufflehog/main/scripts/install.sh' -OutFile {agent_temp_dir}\install_trufflehog.sh; bash {agent_temp_dir}\install_trufflehog.sh -b C:/Trufflehog/bin; $env:Path += ';C:/Trufflehog/bin'; C:/Trufflehog/bin/trufflehog.exe --version"
|
|
34
|
+
process = subprocess.Popen(
|
|
35
|
+
command_complete, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True
|
|
36
|
+
)
|
|
37
|
+
process.communicate()
|
|
38
|
+
|
|
39
|
+
def run_tool_secret_scan(
|
|
40
|
+
self,
|
|
41
|
+
files_commits,
|
|
42
|
+
exclude_paths,
|
|
43
|
+
agent_os,
|
|
44
|
+
agent_work_folder,
|
|
45
|
+
num_threads,
|
|
46
|
+
repository_name,
|
|
47
|
+
):
|
|
48
|
+
trufflehog_command = "trufflehog"
|
|
49
|
+
if "Windows" in agent_os:
|
|
50
|
+
trufflehog_command = "C:/Trufflehog/bin/trufflehog.exe"
|
|
51
|
+
with open(f"{agent_work_folder}/excludedPath.txt", "w") as file:
|
|
52
|
+
file.write("\n".join(exclude_paths))
|
|
53
|
+
exclude_path = f"{agent_work_folder}/excludedPath.txt"
|
|
54
|
+
include_paths = self.config_include_path(files_commits, agent_work_folder)
|
|
55
|
+
with concurrent.futures.ThreadPoolExecutor(max_workers=num_threads) as executor:
|
|
56
|
+
results = executor.map(
|
|
57
|
+
self.run_trufflehog,
|
|
58
|
+
[trufflehog_command] * len(include_paths),
|
|
59
|
+
[agent_work_folder] * len(include_paths),
|
|
60
|
+
[exclude_path] * len(include_paths),
|
|
61
|
+
include_paths,
|
|
62
|
+
[repository_name] * len(include_paths),
|
|
63
|
+
)
|
|
64
|
+
return self.decode_output(results)
|
|
65
|
+
|
|
66
|
+
def config_include_path(self, files, agent_work_folder):
|
|
67
|
+
chunks = []
|
|
68
|
+
if len(files) != 0:
|
|
69
|
+
chunk_size = (len(files) + 3) // 4
|
|
70
|
+
chunks = [
|
|
71
|
+
files[i : i + chunk_size] for i in range(0, len(files), chunk_size)
|
|
72
|
+
]
|
|
73
|
+
include_paths = []
|
|
74
|
+
for i, chunk in enumerate(chunks):
|
|
75
|
+
if not chunk:
|
|
76
|
+
continue
|
|
77
|
+
file_path = f"{agent_work_folder}/includePath{i}.txt"
|
|
78
|
+
include_paths.append(file_path)
|
|
79
|
+
with open(file_path, "w") as file:
|
|
80
|
+
for file_pr_path in chunk:
|
|
81
|
+
file.write(f"{file_pr_path.strip()}\n")
|
|
82
|
+
return include_paths
|
|
83
|
+
|
|
84
|
+
def run_trufflehog(
|
|
85
|
+
self,
|
|
86
|
+
trufflehog_command,
|
|
87
|
+
agent_work_folder,
|
|
88
|
+
exclude_path,
|
|
89
|
+
include_path,
|
|
90
|
+
repository_name,
|
|
91
|
+
):
|
|
92
|
+
command = f"{trufflehog_command} filesystem {agent_work_folder + '/' + repository_name} --include-paths {include_path} --exclude-paths {exclude_path} --no-verification --json"
|
|
93
|
+
result = subprocess.run(command, capture_output=True, shell=True, text=True)
|
|
94
|
+
return result.stdout.strip()
|
|
95
|
+
|
|
96
|
+
def decode_output(self, results):
|
|
97
|
+
for decode_output in results:
|
|
98
|
+
if decode_output != "":
|
|
99
|
+
object_json = decode_output.strip().split("\n")
|
|
100
|
+
json_list = [json.loads(object) for object in object_json]
|
|
101
|
+
for json_obj in json_list:
|
|
102
|
+
if json_obj not in result:
|
|
103
|
+
result.append(json_obj)
|
|
104
|
+
return result
|
|
File without changes
|
devsecops_engine_tools/engine_sast/engine_secret/src/infrastructure/entry_points/entry_point_tool.py
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from devsecops_engine_tools.engine_sast.engine_secret.src.domain.usecases.secret_scan import SecretScan
|
|
3
|
+
from devsecops_engine_tools.engine_sast.engine_secret.src.domain.usecases.set_input_core import (
|
|
4
|
+
SetInputCore,
|
|
5
|
+
)
|
|
6
|
+
|
|
7
|
+
def engine_secret_scan(devops_platform_gateway, tool_gateway, dict_args, tool, tool_deserealizator, git_gateway):
|
|
8
|
+
sys.stdout.reconfigure(encoding='utf-8')
|
|
9
|
+
finding_list, config_tool = SecretScan(tool_gateway, devops_platform_gateway, tool_deserealizator, git_gateway).process(dict_args, tool)
|
|
10
|
+
input_core = SetInputCore(devops_platform_gateway, dict_args, tool, config_tool)
|
|
11
|
+
return finding_list, input_core.set_input_core(finding_list)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
from devsecops_engine_tools.engine_sca.engine_container.src.infrastructure.entry_points.entry_point_tool import (
|
|
2
|
+
init_engine_sca_rm,
|
|
3
|
+
)
|
|
4
|
+
from devsecops_engine_tools.engine_sca.engine_container.src.infrastructure.driven_adapters.prisma_cloud.prisma_cloud_manager_scan import (
|
|
5
|
+
PrismaCloudManagerScan,
|
|
6
|
+
)
|
|
7
|
+
from devsecops_engine_tools.engine_sca.engine_container.src.infrastructure.driven_adapters.docker.docker_images import (
|
|
8
|
+
DockerImages,
|
|
9
|
+
)
|
|
10
|
+
from devsecops_engine_tools.engine_sca.engine_container.src.infrastructure.driven_adapters.prisma_cloud.prisma_deserialize_output import (
|
|
11
|
+
PrismaDeserealizator,
|
|
12
|
+
)
|
|
13
|
+
from devsecops_engine_tools.engine_sca.engine_container.src.infrastructure.driven_adapters.trivy_tool.trivy_manager_scan import (
|
|
14
|
+
TrivyScan,
|
|
15
|
+
)
|
|
16
|
+
from devsecops_engine_tools.engine_sca.engine_container.src.infrastructure.driven_adapters.trivy_tool.trivy_deserialize_output import (
|
|
17
|
+
TrivyDeserializator,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def runner_engine_container(dict_args, config_tool, token, tool_remote):
|
|
22
|
+
try:
|
|
23
|
+
if config_tool["ENGINE_CONTAINER"]["TOOL"].lower() == "trivy":
|
|
24
|
+
tool_run = TrivyScan()
|
|
25
|
+
tool_deseralizator = TrivyDeserializator()
|
|
26
|
+
elif config_tool["ENGINE_CONTAINER"]["TOOL"].lower() == "prisma":
|
|
27
|
+
tool_run = PrismaCloudManagerScan()
|
|
28
|
+
tool_deseralizator = PrismaDeserealizator()
|
|
29
|
+
tool_images = DockerImages()
|
|
30
|
+
return init_engine_sca_rm(
|
|
31
|
+
tool_run,
|
|
32
|
+
tool_remote,
|
|
33
|
+
tool_images,
|
|
34
|
+
tool_deseralizator,
|
|
35
|
+
dict_args,
|
|
36
|
+
token,
|
|
37
|
+
config_tool,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
except Exception as e:
|
|
41
|
+
raise Exception(f"Error SCAN engine container : {str(e)}")
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
if __name__ == "__main__":
|
|
45
|
+
runner_engine_container()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
from abc import ABCMeta, abstractmethod
|
|
2
|
+
from devsecops_engine_tools.engine_core.src.domain.model.finding import Finding
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class DeseralizatorGateway(metaclass=ABCMeta):
|
|
6
|
+
@abstractmethod
|
|
7
|
+
def get_list_findings(self, results_scan_list: list) -> "list[Finding]":
|
|
8
|
+
"Deseralizator"
|
|
File without changes
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
from devsecops_engine_tools.engine_core.src.domain.model.gateway.devops_platform_gateway import (
|
|
2
|
+
DevopsPlatformGateway,
|
|
3
|
+
)
|
|
4
|
+
from devsecops_engine_tools.engine_sca.engine_container.src.domain.model.gateways.tool_gateway import (
|
|
5
|
+
ToolGateway,
|
|
6
|
+
)
|
|
7
|
+
from devsecops_engine_tools.engine_sca.engine_container.src.domain.model.gateways.images_gateway import (
|
|
8
|
+
ImagesGateway,
|
|
9
|
+
)
|
|
10
|
+
from devsecops_engine_tools.engine_sca.engine_container.src.domain.model.gateways.deserealizator_gateway import (
|
|
11
|
+
DeseralizatorGateway,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
class ContainerScaScan:
|
|
15
|
+
def __init__(
|
|
16
|
+
self,
|
|
17
|
+
tool_run: ToolGateway,
|
|
18
|
+
tool_remote: DevopsPlatformGateway,
|
|
19
|
+
tool_images: ImagesGateway,
|
|
20
|
+
tool_deseralizator: DeseralizatorGateway,
|
|
21
|
+
dict_args,
|
|
22
|
+
token,
|
|
23
|
+
skip_flag
|
|
24
|
+
):
|
|
25
|
+
self.tool_run = tool_run
|
|
26
|
+
self.tool_remote = tool_remote
|
|
27
|
+
self.tool_images = tool_images
|
|
28
|
+
self.tool_deseralizator = tool_deseralizator
|
|
29
|
+
self.dict_args = dict_args
|
|
30
|
+
self.token = token
|
|
31
|
+
self.skip_flag = skip_flag
|
|
32
|
+
|
|
33
|
+
def get_remote_config(self, file_path):
|
|
34
|
+
"""
|
|
35
|
+
Get remote configuration.
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
dict: Remote configuration.
|
|
39
|
+
"""
|
|
40
|
+
return self.tool_remote.get_remote_config(self.dict_args["remote_config_repo"], file_path)
|
|
41
|
+
|
|
42
|
+
def scan_image(self):
|
|
43
|
+
"""
|
|
44
|
+
Process the list of images.
|
|
45
|
+
|
|
46
|
+
Returns:
|
|
47
|
+
list: List of processed images.
|
|
48
|
+
"""
|
|
49
|
+
return self.tool_images.list_images()
|
|
50
|
+
|
|
51
|
+
def get_variable(self, variable):
|
|
52
|
+
"""
|
|
53
|
+
Get variable.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
dict: Remote variable.
|
|
57
|
+
"""
|
|
58
|
+
return self.tool_remote.get_variable(variable)
|
|
59
|
+
|
|
60
|
+
def process(self):
|
|
61
|
+
"""
|
|
62
|
+
Process SCA scanning.
|
|
63
|
+
|
|
64
|
+
Returns:
|
|
65
|
+
dict: SCA scanning results.
|
|
66
|
+
"""
|
|
67
|
+
return self.tool_run.run_tool_container_sca(
|
|
68
|
+
self.get_remote_config("engine_sca/engine_container/ConfigTool.json"),
|
|
69
|
+
self.token,
|
|
70
|
+
self.scan_image(),
|
|
71
|
+
self.get_variable("build_id"),
|
|
72
|
+
self.skip_flag
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
def deseralizator(self, image_scanned):
|
|
76
|
+
"""
|
|
77
|
+
Process the results deserializer.
|
|
78
|
+
|
|
79
|
+
Returns:
|
|
80
|
+
list: Deserialized list of findings.
|
|
81
|
+
"""
|
|
82
|
+
return self.tool_deseralizator.get_list_findings(image_scanned)
|