"""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 (Nur-Lesen-Modus). """ lic = current_user.get("license", {}) if lic.get("read_only"): raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Lizenz abgelaufen oder widerrufen. Nur Lesezugriff moeglich.", ) return current_user