Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(global_provider): Move methods to class as static #3896

Merged
merged 14 commits into from
May 20, 2024
Merged
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions docs/developer-guide/services.md
Original file line number Diff line number Diff line change
Expand Up @@ -225,10 +225,10 @@ Each Prowler service requires a service client to use the service in the checks.
The following is the `<new_service_name>_client.py` containing the initialization of the service's class we have just created so the service's checks can use them:

```python
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider
from prowler.providers.<provider>.services.<new_service_name>.<new_service_name>_service import <Service>

<new_service_name>_client = <Service>(get_global_provider())
<new_service_name>_client = <Service>(Provider.get_global_provider())
```

## Permissions
Expand Down
20 changes: 10 additions & 10 deletions docs/developer-guide/unit-testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ class Test_iam_password_policy_uppercase:
# Prowler for AWS uses a shared object called aws_provider where it stores
# the info related with the provider
with mock.patch(
"prowler.providers.common.common.get_global_provider",
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=aws_provider,
),
# We have to mock also the iam_client from the check to enforce that the iam_client used is the one
Expand Down Expand Up @@ -313,7 +313,7 @@ If the test your are creating belongs to a check that uses more than one provide

```python
with mock.patch(
"prowler.providers.common.common.get_global_provider",
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_aws_provider(
[AWS_REGION_US_EAST_1, AWS_REGION_EU_WEST_1]
),
Expand Down Expand Up @@ -344,10 +344,10 @@ from prowler.providers.<provider>.services.<service>.<service>_client import <se
```
2. `<service>_client.py`:
```python
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider
from prowler.providers.<provider>.services.<service>.<service>_service import <SERVICE>

<service>_client = <SERVICE>(mocked_provider)
<service>_client = <SERVICE>(Provider.get_global_provider())
```

Due to the above import path it's not the same to patch the following objects because if you run a bunch of tests, either in parallel or not, some clients can be already instantiated by another check, hence your test execution will be using another test's service instance:
Expand All @@ -368,7 +368,7 @@ Mocking a service client using the following code ...
Once the needed attributes are set for the mocked provider, you can use the mocked provider:
```python title="Mocking the service_client"
with mock.patch(
"prowler.providers.common.common.get_global_provider",
"prowler.providers.common.provider.Provider.get_global_provider",
new=set_mocked_aws_provider([<region>]),
), mock.patch(
"prowler.providers.<provider>.services.<service>.<check>.<check>.<service>_client",
Expand All @@ -390,7 +390,7 @@ Mocking a service client using the following code ...

```python title="Mocking the service and the service_client"
with mock.patch(
"prowler.providers.common.common.get_global_provider",
"prowler.providers.common.provider.Provider.get_global_provider",
new=set_mocked_aws_provider([<region>]),
), mock.patch(
"prowler.providers.<provider>.services.<service>.<SERVICE>",
Expand Down Expand Up @@ -447,7 +447,7 @@ class Test_compute_project_os_login_enabled:
# In this scenario we have to mock the app_client from the check to enforce that the compute_client used is the one created above
# And also is mocked the return value of get_global_provider function to return our GCP mocked provider defined in fixtures
with mock.patch(
"prowler.providers.common.common.get_global_provider",
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_gcp_provider(),
), mock.patch(
"prowler.providers.gcp.services.compute.compute_project_os_login_enabled.compute_project_os_login_enabled.compute_client",
Expand Down Expand Up @@ -487,7 +487,7 @@ class Test_compute_project_os_login_enabled:
compute_client.projects = [project]

with mock.patch(
"prowler.providers.common.common.get_global_provider",
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_gcp_provider(),
), mock.patch(
"prowler.providers.gcp.services.compute.compute_project_os_login_enabled.compute_project_os_login_enabled.compute_client",
Expand Down Expand Up @@ -655,7 +655,7 @@ class Test_app_ensure_http_is_redirected_to_https:
# In this scenario we have to mock the app_client from the check to enforce that the app_client used is the one created above
# And also is mocked the return value of get_global_provider function to return our Azure mocked provider defined in fixtures
with mock.patch(
"prowler.providers.common.common.get_global_provider",
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_azure_provider(),
), mock.patch(
"prowler.providers.azure.services.app.app_ensure_http_is_redirected_to_https.app_ensure_http_is_redirected_to_https.app_client",
Expand Down Expand Up @@ -705,7 +705,7 @@ class Test_app_ensure_http_is_redirected_to_https:
app_client = mock.MagicMock

with mock.patch(
"prowler.providers.common.common.get_global_provider",
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_azure_provider(),
), mock.patch(
"prowler.providers.azure.services.app.app_ensure_http_is_redirected_to_https.app_ensure_http_is_redirected_to_https.app_client",
Expand Down
6 changes: 4 additions & 2 deletions prowler/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,12 @@
resolve_security_hub_previous_findings,
verify_security_hub_integration_enabled_per_region,
)
from prowler.providers.common.common import set_global_provider_object
from prowler.providers.common.provider import Provider

Check warning on line 51 in prowler/__main__.py

View check run for this annotation

Codecov / codecov/patch

prowler/__main__.py#L51

Added line #L51 was not covered by tests
from prowler.providers.common.quick_inventory import run_provider_quick_inventory


def prowler():

# Parse Arguments
parser = ProwlerArgumentParser()
args = parser.parse()
Expand Down Expand Up @@ -168,7 +169,8 @@
sys.exit()

# Provider to scan
global_provider = set_global_provider_object(args)
Provider.set_global_provider(args)
global_provider = Provider.get_global_provider()

Check warning on line 173 in prowler/__main__.py

View check run for this annotation

Codecov / codecov/patch

prowler/__main__.py#L172-L173

Added lines #L172 - L173 were not covered by tests

# Print Provider Credentials
if not args.only_logs:
Expand Down
14 changes: 0 additions & 14 deletions prowler/config/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import yaml

from prowler.lib.logger import logger
from prowler.providers.common.common import get_global_provider

timestamp = datetime.today()
timestamp_utc = datetime.now(timezone.utc).replace(tzinfo=timezone.utc)
Expand Down Expand Up @@ -96,19 +95,6 @@ def check_current_version():
return f"{prowler_version_string}"


# TODO: revisit this function
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We cannot remove this function, it needs to be moved elsewhere.

def update_provider_config(variable: str, value: str):
try:
global_provider = get_global_provider()
if global_provider.audit_config and variable in global_provider.audit_config:
global_provider.audit_config[variable] = value

except Exception as error:
logger.error(
f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}"
)


def load_and_validate_config_file(provider: str, config_file_path: str) -> dict:
"""
load_and_validate_config_file reads the Prowler config file in YAML format from the default location or the file passed with the --config-file flag
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from prowler.providers.aws.services.accessanalyzer.accessanalyzer_service import (
AccessAnalyzer,
)
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

accessanalyzer_client = AccessAnalyzer(get_global_provider())
accessanalyzer_client = AccessAnalyzer(Provider.get_global_provider())
4 changes: 2 additions & 2 deletions prowler/providers/aws/services/account/account_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.account.account_service import Account
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

account_client = Account(get_global_provider())
account_client = Account(Provider.get_global_provider())
4 changes: 2 additions & 2 deletions prowler/providers/aws/services/acm/acm_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.acm.acm_service import ACM
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

acm_client = ACM(get_global_provider())
acm_client = ACM(Provider.get_global_provider())
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.apigateway.apigateway_service import APIGateway
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

apigateway_client = APIGateway(get_global_provider())
apigateway_client = APIGateway(Provider.get_global_provider())
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from prowler.providers.aws.services.apigatewayv2.apigatewayv2_service import (
ApiGatewayV2,
)
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

apigatewayv2_client = ApiGatewayV2(get_global_provider())
apigatewayv2_client = ApiGatewayV2(Provider.get_global_provider())
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.appstream.appstream_service import AppStream
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

appstream_client = AppStream(get_global_provider())
appstream_client = AppStream(Provider.get_global_provider())
4 changes: 2 additions & 2 deletions prowler/providers/aws/services/athena/athena_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.athena.athena_service import Athena
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

athena_client = Athena(get_global_provider())
athena_client = Athena(Provider.get_global_provider())
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.autoscaling.autoscaling_service import AutoScaling
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

autoscaling_client = AutoScaling(get_global_provider())
autoscaling_client = AutoScaling(Provider.get_global_provider())
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.awslambda.awslambda_service import Lambda
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

awslambda_client = Lambda(get_global_provider())
awslambda_client = Lambda(Provider.get_global_provider())
4 changes: 2 additions & 2 deletions prowler/providers/aws/services/backup/backup_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.backup.backup_service import Backup
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

backup_client = Backup(get_global_provider())
backup_client = Backup(Provider.get_global_provider())
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from prowler.providers.aws.services.cloudformation.cloudformation_service import (
CloudFormation,
)
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

cloudformation_client = CloudFormation(get_global_provider())
cloudformation_client = CloudFormation(Provider.get_global_provider())
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.cloudfront.cloudfront_service import CloudFront
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

cloudfront_client = CloudFront(get_global_provider())
cloudfront_client = CloudFront(Provider.get_global_provider())
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.cloudtrail.cloudtrail_service import Cloudtrail
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

cloudtrail_client = Cloudtrail(get_global_provider())
cloudtrail_client = Cloudtrail(Provider.get_global_provider())
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.cloudwatch.cloudwatch_service import CloudWatch
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

cloudwatch_client = CloudWatch(get_global_provider())
cloudwatch_client = CloudWatch(Provider.get_global_provider())
4 changes: 2 additions & 2 deletions prowler/providers/aws/services/cloudwatch/logs_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.cloudwatch.cloudwatch_service import Logs
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

logs_client = Logs(get_global_provider())
logs_client = Logs(Provider.get_global_provider())
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from prowler.providers.aws.services.codeartifact.codeartifact_service import (
CodeArtifact,
)
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

codeartifact_client = CodeArtifact(get_global_provider())
codeartifact_client = CodeArtifact(Provider.get_global_provider())
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.codebuild.codebuild_service import Codebuild
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

codebuild_client = Codebuild(get_global_provider())
codebuild_client = Codebuild(Provider.get_global_provider())
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.cognito.cognito_service import CognitoIdentity
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

cognito_identity_client = CognitoIdentity(get_global_provider())
cognito_identity_client = CognitoIdentity(Provider.get_global_provider())
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.cognito.cognito_service import CognitoIDP
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

cognito_idp_client = CognitoIDP(get_global_provider())
cognito_idp_client = CognitoIDP(Provider.get_global_provider())
4 changes: 2 additions & 2 deletions prowler/providers/aws/services/config/config_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.config.config_service import Config
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

config_client = Config(get_global_provider())
config_client = Config(Provider.get_global_provider())
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from prowler.providers.aws.services.directoryservice.directoryservice_service import (
DirectoryService,
)
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

directoryservice_client = DirectoryService(get_global_provider())
directoryservice_client = DirectoryService(Provider.get_global_provider())
4 changes: 2 additions & 2 deletions prowler/providers/aws/services/dlm/dlm_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.dlm.dlm_service import DLM
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

dlm_client = DLM(get_global_provider())
dlm_client = DLM(Provider.get_global_provider())
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.documentdb.documentdb_service import DocumentDB
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

documentdb_client = DocumentDB(get_global_provider())
documentdb_client = DocumentDB(Provider.get_global_provider())
4 changes: 2 additions & 2 deletions prowler/providers/aws/services/drs/drs_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.drs.drs_service import DRS
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

drs_client = DRS(get_global_provider())
drs_client = DRS(Provider.get_global_provider())
4 changes: 2 additions & 2 deletions prowler/providers/aws/services/dynamodb/dax_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.dynamodb.dynamodb_service import DAX
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

dax_client = DAX(get_global_provider())
dax_client = DAX(Provider.get_global_provider())
4 changes: 2 additions & 2 deletions prowler/providers/aws/services/dynamodb/dynamodb_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.dynamodb.dynamodb_service import DynamoDB
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

dynamodb_client = DynamoDB(get_global_provider())
dynamodb_client = DynamoDB(Provider.get_global_provider())
4 changes: 2 additions & 2 deletions prowler/providers/aws/services/ec2/ec2_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.ec2.ec2_service import EC2
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

ec2_client = EC2(get_global_provider())
ec2_client = EC2(Provider.get_global_provider())
4 changes: 2 additions & 2 deletions prowler/providers/aws/services/ecr/ecr_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.ecr.ecr_service import ECR
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

ecr_client = ECR(get_global_provider())
ecr_client = ECR(Provider.get_global_provider())
4 changes: 2 additions & 2 deletions prowler/providers/aws/services/ecs/ecs_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.ecs.ecs_service import ECS
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

ecs_client = ECS(get_global_provider())
ecs_client = ECS(Provider.get_global_provider())
4 changes: 2 additions & 2 deletions prowler/providers/aws/services/efs/efs_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.efs.efs_service import EFS
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

efs_client = EFS(get_global_provider())
efs_client = EFS(Provider.get_global_provider())
4 changes: 2 additions & 2 deletions prowler/providers/aws/services/eks/eks_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.eks.eks_service import EKS
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

eks_client = EKS(get_global_provider())
eks_client = EKS(Provider.get_global_provider())
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.elasticache.elasticache_service import ElastiCache
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

elasticache_client = ElastiCache(get_global_provider())
elasticache_client = ElastiCache(Provider.get_global_provider())
4 changes: 2 additions & 2 deletions prowler/providers/aws/services/elb/elb_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.elb.elb_service import ELB
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

elb_client = ELB(get_global_provider())
elb_client = ELB(Provider.get_global_provider())
4 changes: 2 additions & 2 deletions prowler/providers/aws/services/elbv2/elbv2_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from prowler.providers.aws.services.elbv2.elbv2_service import ELBv2
from prowler.providers.common.common import get_global_provider
from prowler.providers.common.provider import Provider

elbv2_client = ELBv2(get_global_provider())
elbv2_client = ELBv2(Provider.get_global_provider())
Loading