import json import secrets # Standardfarben des Cores (core/config.py DEFAULT_COLORS) – Basis für neue Tenants DEFAULT_COLORS = { "accent": "#327F24", "accent_dark": "#235A19", "accent_mid": "#3E9130", "accent_light": "#EAF4E7", "accent_xlight": "#F3FAF1", "bg": "#F1F5F0", "surface": "#FFFFFF", "surface2": "#F6FAF5", "border": "#DCE8D9", "border2": "#BDD1B8", "text": "#444444", "text_2": "#666666", "text_3": "#9AA89A", "red": "#DC2626", "progress_to": "#8bbf43", } COLOR_LABELS = { "accent": "Akzent", "accent_dark": "Akzent dunkel", "accent_mid": "Akzent mittel", "accent_light": "Akzent hell", "accent_xlight": "Akzent extra hell", "bg": "Seitenhintergrund", "surface": "Karten", "surface2": "Karten 2", "border": "Rahmen", "border2": "Rahmen 2", "text": "Text", "text_2": "Text sekundär", "text_3": "Text tertiär", "red": "Rot (Hinweis)", "progress_to": "Fortschritt (Verlauf-Ende)", } # Secret-Schlüssel = Env-Namen im Container (siehe infra/deploy.py) REQUIRED_SECRETS = ["OIDC_CLIENT_ID", "OIDC_CLIENT_SECRET", "SESSION_SECRET"] # Rückfall; maßgeblich ist das Schema des Cores (contract.required_secrets) OPTIONAL_SECRETS = ["MISTRAL_API_KEY"] SECRET_HELP = { "OIDC_CLIENT_ID": "Client-ID aus login.onyva.dev (manuell angelegt)", "OIDC_CLIENT_SECRET": "Client-Secret aus login.onyva.dev", "SESSION_SECRET": "Signiert Session-Cookies – kann hier erzeugt werden", "COST_INGEST_KEY": "Optional – Schlüssel für die Kostenerfassung (Cost-API); ohne Key bleibt sie inaktiv", "MISTRAL_API_KEY": "Nur nötig bei STT-Provider „mistral“ (bei „cortecs“ wird der geteilte Key genutzt)", "ADMIN_BUNDLE_TOKEN": "Token, mit dem der Container sein Bundle bei der Admin-Plattform abholt", } def new_token() -> str: return secrets.token_urlsafe(48) def skeleton_config(tenant_id: str, name: str) -> dict: return { "id": tenant_id, "name": name, "title": f"{name} – Gesprächsprotokoll", "description": f"Gesprächsprotokoll-Tool für {name}", "ai_detect_org": name, "org_short": name, "org_profile": "", "flags": {}, "stt": {"provider": "cortecs", "model": "voxtral-mini-transcribe-2602"}, "colors": dict(DEFAULT_COLORS), "office": {"name": name, "subtitle": "", "address": "", "tel": "", "email": "", "website": ""}, }