"""FastAPI Dependency: Lizenzpruefung vor mutiernden Endpoints.""" from fastapi import Depends, HTTPException, status from auth import get_current_user from database import db_dependency from services.license_service import check_license import aiosqlite async def require_active_license( current_user: dict = Depends(get_current_user), db: aiosqlite.Connection = Depends(db_dependency), ) -> dict: """Dependency die sicherstellt, dass die Lizenz der Org aktiv ist. Blockiert mutierende Operationen bei abgelaufener/widerrufener Lizenz. Gibt den current_user zurueck (angereichert mit Lizenz-Info). """ tenant_id = current_user.get("tenant_id") if not tenant_id: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Keine Organisation zugeordnet", ) lic = await check_license(db, tenant_id) if not lic["valid"]: if lic["status"] == "org_disabled": raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Organisation deaktiviert. Bitte kontaktieren Sie den Support.", ) current_user["license"] = lic return current_user async def require_writable_license( current_user: dict = Depends(require_active_license), ) -> dict: """Dependency die sicherstellt, dass die Lizenz Schreibzugriff erlaubt. Blockiert neue Lagen/Refreshes bei abgelaufener Lizenz, deaktivierter Org oder aufgebrauchtem Token-Budget (Hard-Stop). """ lic = current_user.get("license", {}) if lic.get("read_only"): reason = lic.get("read_only_reason") or "expired" if reason == "budget_exceeded": detail = "Token-Budget aufgebraucht. Für Aufstockung oder Upgrade bitte info@aegis-sight.de kontaktieren." elif reason == "expired": detail = "Lizenz abgelaufen. Nur Lesezugriff moeglich." elif reason == "no_license": detail = "Keine aktive Lizenz. Bitte Verwaltung kontaktieren." elif reason == "org_disabled": detail = "Organisation deaktiviert. Bitte Support kontaktieren." else: detail = lic.get("message") or "Nur Lesezugriff moeglich." raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail=detail, headers={"X-License-Status": reason}, ) return current_user