update
This commit is contained in:
80
AzA march 2026/workforce_planner/config.py
Normal file
80
AzA march 2026/workforce_planner/config.py
Normal file
@@ -0,0 +1,80 @@
|
||||
# -*- 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"
|
||||
Reference in New Issue
Block a user