fix(config): require PLATFORM_URL explicitly, no hardcoded domain default
Aegis CI / lint-and-test (push) Has been cancelled
Snyk Security Scan / Python vulnerabilities (backend) (push) Has been cancelled
Snyk Security Scan / npm vulnerabilities (frontend) (push) Has been cancelled
Snyk Security Scan / Docker image vulnerabilities (backend) (push) Has been cancelled

The previous fix defaulted PLATFORM_URL to this deployment's own domain
directly in docker-compose.prod.yml — any other deployment of this repo
would silently inherit it if they forgot to set their own. Now there is
no default at all: the compose file requires the env var to be set, and
the backend refuses to start in production if PLATFORM_URL still equals
the dev value, mirroring the existing SECRET_KEY enforcement.
This commit is contained in:
kitos
2026-07-22 16:19:27 +02:00
parent 3cd0f6fd99
commit 545a84b137
3 changed files with 17 additions and 4 deletions
+3 -2
View File
@@ -41,8 +41,9 @@ FRONTEND_PORT=80
# ── Emails ──────────────────────────────────────────────────────────────────── # ── Emails ────────────────────────────────────────────────────────────────────
# Base URL used to build links in outbound emails (set-password, etc). # Base URL used to build links in outbound emails (set-password, etc).
# Must match your real public frontend URL — the app falls back to # REQUIRED in production — must be THIS deployment's real public frontend
# http://localhost:5173 (dev default) if this is not set. # URL. There is no safe default (it's unique per deployment); the backend
# refuses to start without it when AEGIS_ENV=production.
PLATFORM_URL=https://your-domain.com PLATFORM_URL=https://your-domain.com
# ── Environment flag ───────────────────────────────────────────────────────── # ── Environment flag ─────────────────────────────────────────────────────────
+11
View File
@@ -211,3 +211,14 @@ if _is_production:
f"Set a strong value via the {name} environment variable " f"Set a strong value via the {name} environment variable "
f"before running in production." f"before running in production."
) )
# PLATFORM_URL has no safe production default — it's baked into every
# emailed link (set-password, notifications). Falling back silently to
# the dev value (or to some other deployment's hardcoded domain) would
# ship broken/wrong links without anyone noticing.
if settings.PLATFORM_URL == "http://localhost:5173":
raise RuntimeError(
"CRITICAL: PLATFORM_URL is not configured. Set it to this "
"deployment's real public frontend URL via the PLATFORM_URL "
"environment variable before running in production."
)
+3 -2
View File
@@ -91,8 +91,9 @@ services:
REDIS_CACHE_DB: ${REDIS_CACHE_DB:-2} REDIS_CACHE_DB: ${REDIS_CACHE_DB:-2}
CORS_ORIGINS: ${CORS_ORIGINS:-} CORS_ORIGINS: ${CORS_ORIGINS:-}
# Base URL used to build links in outbound emails (set-password, etc). # Base URL used to build links in outbound emails (set-password, etc).
# Must be the real public frontend URL, not the dev default. # No default on purpose — every deployment has a different domain;
PLATFORM_URL: ${PLATFORM_URL:-http://aegis.undiamagico.es} # the backend refuses to start in production without this set.
PLATFORM_URL: ${PLATFORM_URL:?Set PLATFORM_URL in your .env file to this deployment's real public frontend URL}
AEGIS_ENV: ${AEGIS_ENV:-production} AEGIS_ENV: ${AEGIS_ENV:-production}
SECURE_COOKIES: ${SECURE_COOKIES:-false} SECURE_COOKIES: ${SECURE_COOKIES:-false}
ADMIN_USERNAME: ${ADMIN_USERNAME:-admin} ADMIN_USERNAME: ${ADMIN_USERNAME:-admin}