From 51e7cdd85c4dfabf08588d6c04a154d6ad416857 Mon Sep 17 00:00:00 2001 From: elpatron Date: Thu, 29 Jan 2026 14:02:44 +0100 Subject: [PATCH] PUBLIC_URL: Kalender-Link per Umgebungsvariable (HTTPS hinter Proxy) --- README.md | 8 +++++--- app.py | 4 +++- docker-compose.yml | 3 +++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fd4f327..d0b1c96 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,7 @@ Die eigentliche iCal-Datei für Abos und direkten Download ist unter `/calendar. - `KANTINE_BASE_URL` – Basis-URL der Kantine (Standard: `http://kantine-bhz.de`) - `REFRESH_INTERVAL_SECONDS` – Sekunden zwischen Aktualisierungen (Standard: 86400 = 24 h) +- `PUBLIC_URL` – Öffentliche Basis-URL (z. B. `https://kantine.elpatron.me`). Wenn gesetzt, wird diese URL für die Kalender-Abo-URL auf der Startseite verwendet. **Empfohlen hinter HTTPS-Proxy**, falls der Proxy keine `X-Forwarded-Proto`/`X-Forwarded-Host`-Header sendet – sonst erscheint dort weiterhin `http://`. --- @@ -92,11 +93,12 @@ Für den Betrieb als Container (z. B. auf einem Server): **Build und Run:** ```bash docker build -t kantine2ical . -docker run -p 8000:8000 kantine2ical +docker run -p 8000:8000 -e PUBLIC_URL=https://kantine.elpatron.me kantine2ical ``` +(Ersetzen Sie `https://kantine.elpatron.me` durch Ihre öffentliche HTTPS-URL. Dann zeigt die Startseite die Kalender-URL mit `https://`.) -- **Startseite** (Anleitung + Abo-URL): `http://:8000/` -- **iCal-Abo:** `http://:8000/calendar.ics` +- **Startseite** (Anleitung + Abo-URL): `http://:8000/` bzw. Ihre HTTPS-URL +- **iCal-Abo:** `http://:8000/calendar.ics` bzw. `https:///calendar.ics` **Mit Docker Compose:** ```bash diff --git a/app.py b/app.py index 66fab09..f972f29 100644 --- a/app.py +++ b/app.py @@ -19,6 +19,8 @@ from kantine2ical import BASE_URL, empty_ical_bytes, refresh_speiseplan # Konfiguration (Umgebungsvariablen mit Fallback) KANTINE_BASE_URL = os.environ.get("KANTINE_BASE_URL", BASE_URL) REFRESH_INTERVAL_SECONDS = int(os.environ.get("REFRESH_INTERVAL_SECONDS", "86400")) # 24h +# Öffentliche Basis-URL (z. B. https://kantine.elpatron.me), wenn Proxy keine X-Forwarded-* sendet +PUBLIC_URL = os.environ.get("PUBLIC_URL", "").strip().rstrip("/") # Template-Ordner immer relativ zu dieser Datei (funktioniert mit Gunicorn/Docker) _template_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "templates") @@ -90,7 +92,7 @@ def _format_last_refresh() -> str | None: @app.route("/") def index(): """Startseite mit Anleitung zur iCal-Einbettung (Google und andere).""" - base = request.url_root.rstrip("/") + base = PUBLIC_URL or request.url_root.rstrip("/") calendar_url = f"{base}/calendar.ics" last_refresh_str = _format_last_refresh() try: diff --git a/docker-compose.yml b/docker-compose.yml index 36d745b..f2c1096 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,3 +4,6 @@ services: ports: - "8000:8000" restart: unless-stopped + environment: + # Öffentliche HTTPS-URL, damit die Startseite den Kalender-Link mit https anzeigt + - PUBLIC_URL=https://kantine.elpatron.me