# -*- coding: utf-8 -*- """Zentrale Konfiguration – über Umgebungsvariablen oder .env steuerbar.""" import os import sys import secrets from pathlib import Path from dotenv import load_dotenv load_dotenv() BASE_DIR = Path(__file__).resolve().parent.parent DATABASE_URL = os.getenv( "WP_DATABASE_URL", f"sqlite:///{BASE_DIR / 'workforce_planner.db'}" ) _WEAK_PATTERNS = ("dev", "test", "password", "secret", "changeme", "default", "example", "123") def _reject_weak(pattern: str): print( f"FEHLER: AZA_SECRET_KEY enthält triviales Muster ('{pattern}').\n" "Verwenden Sie einen kryptografisch sicheren Key.", file=sys.stderr, ) sys.exit(1) def _load_secret_key() -> str: """Lädt AZA_SECRET_KEY aus ENV. Fail-Start bei fehlendem oder schwachem Key. Im DEV-Modus (AZA_ENV=dev) wird ein temporärer Key auto-generiert.""" key = os.getenv("AZA_SECRET_KEY", "").strip() env_mode = os.getenv("AZA_ENV", "").strip().lower() if not key: if env_mode == "dev": key = secrets.token_hex(64) print( "WARNUNG: AZA_SECRET_KEY nicht gesetzt. " "Auto-generierter Key (nur gültig für diese Session, AZA_ENV=dev).", file=sys.stderr, ) return key print( "FEHLER: AZA_SECRET_KEY ist nicht gesetzt.\n" "Setzen Sie die Umgebungsvariable mit mindestens 32 Zeichen.\n" "Beispiel: AZA_SECRET_KEY=$(python -c \"import secrets; print(secrets.token_hex(64))\")\n" "Für Entwicklung: AZA_ENV=dev erlaubt auto-generierten Key.", file=sys.stderr, ) sys.exit(1) if len(key) < 32: print( f"FEHLER: AZA_SECRET_KEY ist zu kurz ({len(key)} Zeichen, Minimum: 32).\n" "Generieren Sie einen sicheren Key:\n" " python -c \"import secrets; print(secrets.token_hex(64))\"", file=sys.stderr, ) sys.exit(1) key_lower = key.lower() for pattern in _WEAK_PATTERNS: if key_lower == pattern: _reject_weak(pattern) if key_lower.startswith(pattern) and ( len(key) < 40 or not key[len(pattern):len(pattern)+1].isalnum() ): _reject_weak(pattern) return key SECRET_KEY = _load_secret_key() ACCESS_TOKEN_EXPIRE_MINUTES = int(os.getenv("WP_TOKEN_EXPIRE", "480")) MIN_STAFF_COUNT = int(os.getenv("WP_MIN_STAFF", "2")) DEBUG = os.getenv("WP_DEBUG", "0") == "1"