From a2f77ab9cfa78aae6886e36f1db9c271aa3ce2e7 Mon Sep 17 00:00:00 2001
From: Ernesto Rico Schmidt <ernesto@helsinki.at>
Date: Wed, 31 Jul 2024 12:10:38 -0400
Subject: [PATCH] feat: read CORS_ALLOWED_ORIGINS, SITE_URL & LOGGING_JSON from
 the env

---
 steering/settings.py | 61 ++++++++++++++++++++++++++------------------
 1 file changed, 36 insertions(+), 25 deletions(-)

diff --git a/steering/settings.py b/steering/settings.py
index 5b5c00f5..084ab4d1 100644
--- a/steering/settings.py
+++ b/steering/settings.py
@@ -1,3 +1,4 @@
+import json
 import os
 import sys
 from pathlib import Path
@@ -26,7 +27,10 @@ SITE_ID = 1
 # Must be set if DEBUG is False
 ALLOWED_HOSTS = os.getenv("ALLOWED_HOSTS", default="127.0.0.1,localhost").split(",")
 
-CORS_ALLOWED_ORIGINS = ["http://localhost:8080", "http://localhost:8040"]
+CORS_ALLOWED_ORIGINS = os.getenv(
+    "CORS_ALLOWED_ORIGINS",
+    default="http://localhost:8080,http://localhost:8040",
+).split(",")
 CORS_ALLOW_CREDENTIALS = True
 CORS_ALLOW_HEADERS = list(default_headers) + [
     "content-disposition",
@@ -206,7 +210,10 @@ AURA_PROTO = os.getenv("AURA_PROTO", default="http")
 AURA_HOST = os.getenv("AURA_HOST", default="localhost")
 
 # SITE_URL is used by django-oidc-provider and openid-configuration will break if not set correctly
-SITE_URL = f"{AURA_PROTO}://{AURA_HOST}:{PORT}" if PORT else f"{AURA_PROTO}://{AURA_HOST}"
+SITE_URL = os.getenv(
+    "SITE_URL",
+    default=f"{AURA_PROTO}://{AURA_HOST}:{PORT}" if PORT else f"{AURA_PROTO}://{AURA_HOST}",
+)
 
 if AURA_PROTO == "https":
     CSRF_TRUSTED_ORIGINS = [f"{AURA_PROTO}://{AURA_HOST}"]
@@ -215,31 +222,35 @@ OPERATION_MODE_TYPE = Literal["default", "tests"]
 OPERATION_MODE: OPERATION_MODE_TYPE
 OPERATION_MODE = cast(OPERATION_MODE_TYPE, os.getenv("OPERATION_MODE", default="default"))
 
-LOGGING = {
-    "version": 1,
-    "disable_existing_loggers": False,
-    "formatters": {
-        "django.server": {
-            "()": "django.utils.log.ServerFormatter",
-            "format": "[{server_time}] {message}",
-            "style": "{",
-        }
-    },
-    "handlers": {
-        "file": {
-            "class": "logging.FileHandler",
-            "filename": os.path.abspath(os.path.join(BASE_DIR, "logs", "steering.log")),
-            "formatter": "django.server",
+# TODO: find a better way. This is limited to settings that can be JSON-encoded.
+if "LOGGING_JSON" in os.environ:
+    LOGGING = json.loads(os.getenv("LOGGING_JSON"))
+else:
+    LOGGING = {
+        "version": 1,
+        "disable_existing_loggers": False,
+        "formatters": {
+            "django.server": {
+                "()": "django.utils.log.ServerFormatter",
+                "format": "[{server_time}] {message}",
+                "style": "{",
+            }
         },
-    },
-    "loggers": {
-        "django": {
-            "handlers": ["file"],
-            "level": os.getenv("STEERING_LOG_LEVEL", "INFO"),
-            "propagate": True,
+        "handlers": {
+            "file": {
+                "class": "logging.FileHandler",
+                "filename": os.path.abspath(os.path.join(BASE_DIR, "logs", "steering.log")),
+                "formatter": "django.server",
+            },
         },
-    },
-}
+        "loggers": {
+            "django": {
+                "handlers": ["file"],
+                "level": os.getenv("STEERING_LOG_LEVEL", "INFO"),
+                "propagate": True,
+            },
+        },
+    }
 
 # ATTENTION:
 # Don’t add any configuration settings after this, so that administrators can override them.
-- 
GitLab