From 888d2741d633820149bc847efc34986cbf02d91e Mon Sep 17 00:00:00 2001 From: asadeg02 Date: Fri, 4 Apr 2025 15:05:27 -0400 Subject: [PATCH 1/7] feat: refactor mongodb connection urigeneration to get user and password from env variables --- backend/env/.env.dev | 4 ++++ backend/env/.env.example | 4 ++++ backend/secretshare/mpce.py | 16 ++++++++++------ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/backend/env/.env.dev b/backend/env/.env.dev index d67a3ff..6d46b49 100644 --- a/backend/env/.env.dev +++ b/backend/env/.env.dev @@ -12,4 +12,8 @@ POSTGRES_PASSWORD = postgres POSTGRES_DATABASE = bwwc MONGO_HOST = mongo MONGO_PORT = 27017 +MONGO_USER = bwwc +MONGO_PASSWORD = mongo +MONGO_DB = bwwc +MONGO_PARAMS = "" DJANGO_ALLOWED_HOSTS = "" \ No newline at end of file diff --git a/backend/env/.env.example b/backend/env/.env.example index 13ebfd4..39ff4fb 100644 --- a/backend/env/.env.example +++ b/backend/env/.env.example @@ -13,4 +13,8 @@ POSTGRES_PASSWORD = postgres POSTGRES_DATABASE = bwwc MONGO_HOST = localhost MONGO_PORT = 27017 +MONGO_USER = bwwc +MONGO_PASSWORD = mongo +MONGO_DB = bwwc +MONGO_PARAMS = "" DJANGO_ALLOWED_HOSTS = "" \ No newline at end of file diff --git a/backend/secretshare/mpce.py b/backend/secretshare/mpce.py index 2768716..dcd5c85 100644 --- a/backend/secretshare/mpce.py +++ b/backend/secretshare/mpce.py @@ -35,11 +35,14 @@ def __init__(self, protocol: str = "shamirs", prime: int = 180252380737439): self.mongo_host = os.environ.get("MONGO_HOST") self.mongo_port = os.environ.get("MONGO_PORT") - self.mongo_client = MongoClient( - os.environ.get( - "MONGO_HOST", f"mongodb://{self.mongo_host}:{self.mongo_port}/" - ) - ) + self.mongo_user = os.environ.get("MONGO_USER", "bwwc") + self.mongo_password = os.environ.get("MONGO_PASSWORD") + self.mongo_db = os.environ.get("MONGO_DB", "bwwc") + self.mongo_params = os.environ.get("MONGO_PARAMS", "") + mongo_uri = f"mongodb://{self.mongo_user}:{self.mongo_password}@{self.mongo_host}:{self.mongo_port}/?{self.mongo_params}" + + self.mongo_client = MongoClient(mongo_uri) + self.mongo_db = self.mongo_client["bwwc"] self.session_collection = self.mongo_db["wage_gap"] self.participant_collection = self.mongo_db["participant"] @@ -644,4 +647,5 @@ def get_metadata(self, session_id: str) -> dict: file = self.fs.find_one({ "filename" : f"{session_id}_metadata.json"}) if file is None: return None - return json.loads(file.read()) \ No newline at end of file + return json.loads(file.read()) + From 84266edb781789e33ef8dd813657483bd8698557 Mon Sep 17 00:00:00 2001 From: asadeg02 Date: Mon, 7 Apr 2025 14:01:40 -0400 Subject: [PATCH 2/7] fix: URL-encode MongoDB credentials to prevent InvalidURI errors --- backend/secretshare/mpce.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/secretshare/mpce.py b/backend/secretshare/mpce.py index dcd5c85..0d02ebf 100644 --- a/backend/secretshare/mpce.py +++ b/backend/secretshare/mpce.py @@ -3,6 +3,7 @@ import uuid import numbers import logging +import urllib.parse from typing import Any, Dict, List, Optional, Tuple, Union, Callable from itertools import groupby from operator import itemgetter @@ -35,8 +36,8 @@ def __init__(self, protocol: str = "shamirs", prime: int = 180252380737439): self.mongo_host = os.environ.get("MONGO_HOST") self.mongo_port = os.environ.get("MONGO_PORT") - self.mongo_user = os.environ.get("MONGO_USER", "bwwc") - self.mongo_password = os.environ.get("MONGO_PASSWORD") + self.mongo_user = urllib.parse.quote_plus(os.environ.get("MONGO_USER", "bwwc")) + self.mongo_password = urllib.parse.quote_plus(os.environ.get("MONGO_PASSWORD")) self.mongo_db = os.environ.get("MONGO_DB", "bwwc") self.mongo_params = os.environ.get("MONGO_PARAMS", "") mongo_uri = f"mongodb://{self.mongo_user}:{self.mongo_password}@{self.mongo_host}:{self.mongo_port}/?{self.mongo_params}" From 0dd069a92096c1303af35f824c0314cc977f1ae8 Mon Sep 17 00:00:00 2001 From: asadeg02 <32320836+asadeg02@users.noreply.github.com> Date: Mon, 7 Apr 2025 14:25:44 -0400 Subject: [PATCH 3/7] fix: update MongoDB health check to ensure compatibility with AWS task health checks --- backend/backend/apis/bwwc.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/backend/backend/apis/bwwc.py b/backend/backend/apis/bwwc.py index 17f111e..d3a0ada 100644 --- a/backend/backend/apis/bwwc.py +++ b/backend/backend/apis/bwwc.py @@ -305,14 +305,16 @@ def backup(req: HttpRequest) -> HttpResponse: @csrf_exempt -def mongo_health(req: HttpRequest) -> HttpResponse: - if req.method == "GET": - if not engine.is_mongodb_running(): - return HttpResponseBadRequest("MongoDB is down") +def mongo_health(req: HttpRequest) -> JsonResponse: + if req.method != "GET": + return JsonResponse({"status": "Method Not Allowed"}, status=405) + try: + if engine.is_mongodb_running(): + return JsonResponse({"status": "ok"}, status=200) else: - return HttpResponse("MongoDB is up") - else: - return HttpResponseBadRequest("Invalid request method") + return JsonResponse({"status": "error", "message": "MongoDB is down"}, status=503) + except Exception as e: + return JsonResponse({"status": "error", "message": str(e)}, status=503) def get_urlpatterns(): From 7247fda62f1d2aeb8af7044609bbd145cad5914e Mon Sep 17 00:00:00 2001 From: asadeg02 <32320836+asadeg02@users.noreply.github.com> Date: Mon, 7 Apr 2025 15:38:16 -0400 Subject: [PATCH 4/7] Fix syntax error caused by resolving merge conflicts --- backend/secretshare/mpce.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/secretshare/mpce.py b/backend/secretshare/mpce.py index e10f8b9..0d02ebf 100644 --- a/backend/secretshare/mpce.py +++ b/backend/secretshare/mpce.py @@ -37,7 +37,7 @@ def __init__(self, protocol: str = "shamirs", prime: int = 180252380737439): self.mongo_host = os.environ.get("MONGO_HOST") self.mongo_port = os.environ.get("MONGO_PORT") self.mongo_user = urllib.parse.quote_plus(os.environ.get("MONGO_USER", "bwwc")) - self.mongo_password = urllib.parse.quote_plus(os.environ.get("MONGO_PASSWORD") + self.mongo_password = urllib.parse.quote_plus(os.environ.get("MONGO_PASSWORD")) self.mongo_db = os.environ.get("MONGO_DB", "bwwc") self.mongo_params = os.environ.get("MONGO_PARAMS", "") mongo_uri = f"mongodb://{self.mongo_user}:{self.mongo_password}@{self.mongo_host}:{self.mongo_port}/?{self.mongo_params}" From 52770707121dc56cf41fe81a4c147af58b49bd26 Mon Sep 17 00:00:00 2001 From: asadeg02 <32320836+asadeg02@users.noreply.github.com> Date: Tue, 8 Apr 2025 13:36:48 -0400 Subject: [PATCH 5/7] Add relaxed health check endpoint for AWS container and ALB health checks --- backend/backend/apis/bwwc.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/backend/backend/apis/bwwc.py b/backend/backend/apis/bwwc.py index d3a0ada..7c4fe3b 100644 --- a/backend/backend/apis/bwwc.py +++ b/backend/backend/apis/bwwc.py @@ -305,16 +305,18 @@ def backup(req: HttpRequest) -> HttpResponse: @csrf_exempt -def mongo_health(req: HttpRequest) -> JsonResponse: - if req.method != "GET": - return JsonResponse({"status": "Method Not Allowed"}, status=405) - try: - if engine.is_mongodb_running(): - return JsonResponse({"status": "ok"}, status=200) +def mongo_health(req: HttpRequest) -> HttpResponse: + if req.method == "GET": + if not engine.is_mongodb_running(): + return HttpResponseBadRequest("MongoDB is down") else: - return JsonResponse({"status": "error", "message": "MongoDB is down"}, status=503) - except Exception as e: - return JsonResponse({"status": "error", "message": str(e)}, status=503) + return HttpResponse("MongoDB is up") + else: + return HttpResponseBadRequest("Invalid request method") + +@csrf_exempt +def app_health_check(req: HttpRequest) -> HttpResponse: + return HttpResponse("OK") def get_urlpatterns(): @@ -331,4 +333,5 @@ def get_urlpatterns(): path("api/bwwc/get_submission_history/", get_submission_history), path("api/bwwc/backup/", backup), path("api/bwwc/health/", mongo_health), + path("/api/bwwc/healthz/", app_health_check), ] From adfd34d30f70ac0dc76546bc2ef817aa7e75552c Mon Sep 17 00:00:00 2001 From: asadeg02 <32320836+asadeg02@users.noreply.github.com> Date: Tue, 8 Apr 2025 15:19:25 -0400 Subject: [PATCH 6/7] Add option to allow all hosts by setting env variable --- backend/backend/settings.py | 4 ++++ backend/env/.env.dev | 3 ++- backend/env/.env.example | 3 ++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/backend/backend/settings.py b/backend/backend/settings.py index d97cefa..a031b77 100644 --- a/backend/backend/settings.py +++ b/backend/backend/settings.py @@ -37,6 +37,7 @@ SECRET_KEY = os.getenv("SECRET_KEY") DJANGO_ALLOWED_HOSTS = os.getenv("DJANGO_ALLOWED_HOSTS", "") +ALLOW_ALL_HOSTS = os.getenv("ALLOW_ALL_HOSTS", "false") # SECURITY WARNING: don't run with debug turned on in production! DEBUG = DJANGO_ENV == "dev" @@ -56,6 +57,9 @@ if DJANGO_ALLOWED_HOSTS: ALLOWED_HOSTS.extend(DJANGO_ALLOWED_HOSTS.split(",")) +if ALLOW_ALL_HOSTS.lower() == "true": + ALLOWED_HOSTS = ["*"] + CORS_ALLOWED_ORIGINS = [ "http://127.0.0.1:5173", "http://localhost:5173", diff --git a/backend/env/.env.dev b/backend/env/.env.dev index 6d46b49..81110c8 100644 --- a/backend/env/.env.dev +++ b/backend/env/.env.dev @@ -16,4 +16,5 @@ MONGO_USER = bwwc MONGO_PASSWORD = mongo MONGO_DB = bwwc MONGO_PARAMS = "" -DJANGO_ALLOWED_HOSTS = "" \ No newline at end of file +DJANGO_ALLOWED_HOSTS = "" +ALLOW_ALL_HOSTS = false \ No newline at end of file diff --git a/backend/env/.env.example b/backend/env/.env.example index 39ff4fb..f93357e 100644 --- a/backend/env/.env.example +++ b/backend/env/.env.example @@ -17,4 +17,5 @@ MONGO_USER = bwwc MONGO_PASSWORD = mongo MONGO_DB = bwwc MONGO_PARAMS = "" -DJANGO_ALLOWED_HOSTS = "" \ No newline at end of file +DJANGO_ALLOWED_HOSTS = "" +ALLOW_ALL_HOSTS = false \ No newline at end of file From d8ff014a930fb456550b960ab934dc59704b449c Mon Sep 17 00:00:00 2001 From: asadeg02 Date: Tue, 8 Apr 2025 21:16:39 -0400 Subject: [PATCH 7/7] feat: add mongo database name to connection uri --- backend/secretshare/mpce.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/secretshare/mpce.py b/backend/secretshare/mpce.py index 0d02ebf..9ae1902 100644 --- a/backend/secretshare/mpce.py +++ b/backend/secretshare/mpce.py @@ -40,7 +40,8 @@ def __init__(self, protocol: str = "shamirs", prime: int = 180252380737439): self.mongo_password = urllib.parse.quote_plus(os.environ.get("MONGO_PASSWORD")) self.mongo_db = os.environ.get("MONGO_DB", "bwwc") self.mongo_params = os.environ.get("MONGO_PARAMS", "") - mongo_uri = f"mongodb://{self.mongo_user}:{self.mongo_password}@{self.mongo_host}:{self.mongo_port}/?{self.mongo_params}" + mongo_uri = f"mongodb://{self.mongo_user}:{self.mongo_password}@{self.mongo_host}:{self.mongo_port}/{self.mongo_db}?{self.mongo_params}" + self.logger.info(f"Connection URI is: {mongo_uri}") self.mongo_client = MongoClient(mongo_uri)