From 978c2d03acf2e430bdd3c6971f2955f3e1fd5e5c Mon Sep 17 00:00:00 2001 From: Vitor Hideyoshi Date: Wed, 30 Oct 2024 05:40:05 -0300 Subject: [PATCH] Creates a Better Dev Env --- docker/docker-compose.yml | 25 ++++++++++++ storage_service/config/config_s3.py | 1 + storage_service/depends/depend_s3_service.py | 40 +++++++++++-------- .../depends/depend_virus_checker_service.py | 5 +++ .../virus_checker_none_service.py | 11 +++++ .../utils/enums/virus_checker_type.py | 1 + 6 files changed, 66 insertions(+), 17 deletions(-) create mode 100644 docker/docker-compose.yml create mode 100644 storage_service/service/virus_checker/virus_checker_none_service.py diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..0652755 --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,25 @@ +services: + redis: + image: bitnami/redis + container_name: redis + environment: + REDIS_PASSWORD: redis + network_mode: host + volumes: + - redis:/data + + minio: + image: bitnami/minio + container_name: minio + environment: + MINIO_ROOT_USER: minio + MINIO_ROOT_PASSWORD: minio123 + MINIO_DEFAULT_BUCKETS: default + network_mode: host + volumes: + - minio:/bitnami/minio/data + + +volumes: + redis: + minio: \ No newline at end of file diff --git a/storage_service/config/config_s3.py b/storage_service/config/config_s3.py index 3c05e44..71f4a17 100644 --- a/storage_service/config/config_s3.py +++ b/storage_service/config/config_s3.py @@ -9,6 +9,7 @@ def get_config_s3(): load_dotenv() return { + "aws_endpoint_url": os.environ.get("AWS_ENDPOINT_URL", None), "aws_access_key_id": os.environ.get("AWS_ACCESS_KEY_ID", None), "aws_secret_access_key": os.environ.get("AWS_SECRET_ACCESS_KEY", None), "region_name": os.environ.get("AWS_REGION_NAME", None), diff --git a/storage_service/depends/depend_s3_service.py b/storage_service/depends/depend_s3_service.py index d45da2f..a8f8615 100644 --- a/storage_service/depends/depend_s3_service.py +++ b/storage_service/depends/depend_s3_service.py @@ -11,6 +11,28 @@ import os from functools import cache +def build_client_s3(config: dict) -> botocore.client.BaseClient: + if "aws_endpoint_url" not in config: + config["aws_endpoint_url"] = "https://s3.amazonaws.com" + + if "aws_access_key_id" not in config: + raise RuntimeError("Invalid S3 Config: Missing aws_access_key_id") + + if "aws_secret_access_key" not in config: + raise RuntimeError("Invalid S3 Config: Missing aws_secret_access_key") + + if "region_name" not in config: + raise RuntimeError("Invalid S3 Config: Missing region_name") + + return boto3.client( + "s3", + endpoint_url=config["aws_endpoint_url"], + region_name=config["region_name"], + aws_access_key_id=config["aws_access_key_id"], + aws_secret_access_key=config["aws_secret_access_key"], + ) + + @cache def dependency_storage_service() -> StorageService: load_dotenv() @@ -18,24 +40,8 @@ def dependency_storage_service() -> StorageService: if StorageType(os.environ["STORAGE_TYPE"]) == StorageType.S3_STORAGE: s3_config = get_config_s3() - if "aws_access_key_id" not in s3_config: - raise RuntimeError("Invalid S3 Config: Missing aws_access_key_id") - - if "aws_secret_access_key" not in s3_config: - raise RuntimeError("Invalid S3 Config: Missing aws_secret_access_key") - - if "region_name" not in s3_config: - raise RuntimeError("Invalid S3 Config: Missing region_name") - - s3_client = boto3.client( - "s3", - region_name=s3_config["region_name"], - aws_access_key_id=s3_config["aws_access_key_id"], - aws_secret_access_key=s3_config["aws_secret_access_key"], - ) - return AmazonS3Service( - s3_client, + build_client_s3(s3_config), s3_config["bucket_name"], ) diff --git a/storage_service/depends/depend_virus_checker_service.py b/storage_service/depends/depend_virus_checker_service.py index 57fa4cc..fd429aa 100644 --- a/storage_service/depends/depend_virus_checker_service.py +++ b/storage_service/depends/depend_virus_checker_service.py @@ -1,6 +1,9 @@ from storage_service.config.config_virus_checker import ( get_virus_checker_api_key, ) +from storage_service.service.virus_checker.virus_checker_none_service import ( + VirusCheckerNoneService, +) from storage_service.service.virus_checker.virus_checker_service import ( VirusCheckerService, ) @@ -29,3 +32,5 @@ def dependency_virus_checker_service() -> VirusCheckerService: case VirusCheckerType.TOTAL_VIRUS: virus_checker = Virustotal(get_virus_checker_api_key()) return VirusTotalService(virus_checker) + case VirusCheckerType.NONE: + return VirusCheckerNoneService() diff --git a/storage_service/service/virus_checker/virus_checker_none_service.py b/storage_service/service/virus_checker/virus_checker_none_service.py new file mode 100644 index 0000000..bfff2da --- /dev/null +++ b/storage_service/service/virus_checker/virus_checker_none_service.py @@ -0,0 +1,11 @@ +from storage_service.service.virus_checker.virus_checker_service import ( + VirusCheckerService, +) + +from io import BytesIO + + +class VirusCheckerNoneService(VirusCheckerService): + def check_virus(self, file_data: BytesIO) -> bool: + # No virus checker is used, so we assume the file is safe + return True diff --git a/storage_service/utils/enums/virus_checker_type.py b/storage_service/utils/enums/virus_checker_type.py index 83d7c9b..53965e9 100644 --- a/storage_service/utils/enums/virus_checker_type.py +++ b/storage_service/utils/enums/virus_checker_type.py @@ -3,3 +3,4 @@ from enum import Enum class VirusCheckerType(Enum): TOTAL_VIRUS = "total_virus" + NONE = "none"