"""Application configuration loaded from environment variables.""" from __future__ import annotations import os import secrets from pathlib import Path # Where persistent data (SQLite DB) lives. Mounted as a volume in Docker. DATA_DIR = Path(os.getenv("DATA_DIR", "./data")).resolve() DATA_DIR.mkdir(parents=True, exist_ok=True) DATABASE_URL = os.getenv("DATABASE_URL", f"sqlite:///{DATA_DIR / 'app.db'}") # Secret used to sign session cookies. Generate a stable one if not provided, # persisting it to disk so sessions survive restarts. _SECRET_FILE = DATA_DIR / "secret.key" def _load_secret() -> str: env = os.getenv("SECRET_KEY") if env: return env if _SECRET_FILE.exists(): return _SECRET_FILE.read_text().strip() value = secrets.token_hex(32) _SECRET_FILE.write_text(value) return value SECRET_KEY = _load_secret() # Defaults used the first time the app starts (before any settings are saved). DEFAULT_NTFY_SERVER = os.getenv("DEFAULT_NTFY_SERVER", "https://ntfy.sh") DEFAULT_CHECK_INTERVAL = int(os.getenv("DEFAULT_CHECK_INTERVAL", "5")) # minutes # Bootstrap admin credentials (only applied when the settings row is created). ADMIN_USERNAME = os.getenv("ADMIN_USERNAME", "admin") ADMIN_PASSWORD = os.getenv("ADMIN_PASSWORD", "admin")