diff --git a/prowler/lib/check/check.py b/prowler/lib/check/check.py index b4fd4c9ac4..2db7ac1088 100644 --- a/prowler/lib/check/check.py +++ b/prowler/lib/check/check.py @@ -564,6 +564,7 @@ def execute_checks( audit_progress=0, ) + # Refactor(CLI): This needs to be moved somewhere in the CLI if os.name != "nt": try: from resource import RLIMIT_NOFILE, getrlimit, setrlimit @@ -591,8 +592,7 @@ def execute_checks( check_findings = execute( service, check_name, - global_provider.type, - global_provider.identity, + global_provider, services_executed, checks_executed, custom_checks_metadata, diff --git a/prowler/lib/scan/__init__.py b/prowler/lib/scan/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/prowler/lib/scan/scan.py b/prowler/lib/scan/scan.py new file mode 100644 index 0000000000..84e32187ad --- /dev/null +++ b/prowler/lib/scan/scan.py @@ -0,0 +1,60 @@ +from typing import Any + +from prowler.lib.check.check import execute +from prowler.lib.check.models import Check_Report +from prowler.lib.logger import logger +from prowler.providers.common.models import Audit_Metadata + + +def scan( + checks_to_execute: list, + global_provider: Any, + custom_checks_metadata: Any, +) -> list[Check_Report]: + try: + # List to store all the check's findings + all_findings = [] + # Services and checks executed for the Audit Status + services_executed = set() + checks_executed = set() + + # Initialize the Audit Metadata + # TODO: this should be done in the provider class + # Refactor(Core): Audit manager? + global_provider.audit_metadata = Audit_Metadata( + services_scanned=0, + expected_checks=checks_to_execute, + completed_checks=0, + audit_progress=0, + ) + + for check_name in checks_to_execute: + try: + # Recover service from check name + service = check_name.split("_")[0] + + check_findings = execute( + service, + check_name, + global_provider, + services_executed, + checks_executed, + custom_checks_metadata, + ) + all_findings.extend(check_findings) + + # If check does not exists in the provider or is from another provider + except ModuleNotFoundError: + logger.error( + f"Check '{check_name}' was not found for the {global_provider.type.upper()} provider" + ) + except Exception as error: + logger.error( + f"{check_name} - {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + except Exception as error: + logger.error( + f"{check_name} - {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + + return all_findings