Files
ScarriffleandClaude Opus 5 bd2c623136 fix: Hinter einem Reverse Proxy zeigte die SSO-Rueckleitung nach innen
Die Adresse, an die der Anmeldedienst zurueckschickt, wurde aus der Anfrage
abgeleitet. Hinter einem Proxy ist das die INTERNE – http://10.0.0.5:8071/… –,
denn uvicorn lief ohne --proxy-headers. Der Anmeldedienst haette die
Rueckleitung abgewiesen, mit einer Meldung, die nicht sagt, woran es liegt.

APP_PUBLIC_BASE_URL sagt es ihm jetzt ausdruecklich. Leer bleiben darf sie
weiterhin: ohne Proxy und in der Entwicklung genuegt die Anfrage.

Die Referenz-Unit bekommt zusaetzlich --proxy-headers. Das hilft neuen
Installationen; bestehende ruehrt update.sh nicht an, deshalb ist die
Einstellung der verlaessliche Weg.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-09 19:39:51 +02:00

70 lines
2.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Konfiguration über Umgebungsvariablen (Präfix ``APP_``).
Beispiel: ``APP_DATA_DIR=/var/lib/certain-finance`` setzt ``data_dir``.
Die Standardwerte sind bewusst entwicklungsfreundlich (relatives Datenverzeichnis,
unsichere Cookies erlaubt). Für den Produktivbetrieb setzt das Install-Skript die
sicheren Werte in ``/etc/certain-finance/env`` (siehe ``deploy/env.example``).
"""
from functools import lru_cache
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
model_config = SettingsConfigDict(env_prefix="APP_", env_file=".env", extra="ignore")
# --- Ablageort für Datenbank und Backups ---------------------------------
# Produktiv per Env auf einen absoluten Pfad setzen (z. B. /var/lib/...).
data_dir: str = "./data"
# Leer = SQLite-Datei unter data_dir/app.db. Sonst vollständige URL.
database_url: str = ""
# --- Sitzungen / Cookies -------------------------------------------------
session_secret: str = "change-me-in-production"
session_ttl_days: int = 30
cookie_name: str = "cf_session"
# Standard False, damit die Anmeldung auch über http://localhost im Dev
# funktioniert. Produktiv hinter HTTPS (Nginx Proxy Manager) auf true setzen.
cookie_secure: bool = False
cookie_samesite: str = "lax"
# --- Erster Admin, nur beim allerersten Start angelegt -------------------
admin_username: str = "admin"
admin_password: str = "changeme"
# --- Währung -------------------------------------------------------------
default_base_currency: str = "EUR"
# Beim Start die aktuellen EZB-Kurse nachladen (benötigt Internet).
ecb_fetch_on_start: bool = True
# --- Oeffentliche Adresse ------------------------------------------------
# Unter welcher Adresse Certain von aussen erreichbar ist, z. B.
# https://certain.example.com – OHNE Pfad am Ende.
#
# Gebraucht fuer die Rueckleit-Adresse der SSO-Anmeldung. Die liesse sich
# zwar aus der Anfrage ableiten, aber hinter einem Reverse Proxy kaeme
# dabei die INTERNE Adresse heraus (http://10.0.0.5:8071/...), und der
# Anmeldedienst weist sie ab – mit einer Fehlermeldung, die nicht sagt,
# woran es liegt. Wer sie hier hinschreibt, hat das Problem nicht.
#
# Leer = aus der Anfrage ableiten. Das genuegt ohne Proxy und in der
# Entwicklung.
public_base_url: str = ""
# --- CORS ----------------------------------------------------------------
# Leer = kein Cross-Origin (gleiche Herkunft, da FastAPI das SPA selbst
# ausliefert). Kommagetrennte Liste oder "*" nur bei Bedarf.
cors_origins: str = ""
@property
def effective_database_url(self) -> str:
if self.database_url:
return self.database_url
return f"sqlite:///{self.data_dir.rstrip('/')}/app.db"
@lru_cache
def get_settings() -> Settings:
return Settings()