Initial commit: AegisSight-Monitor (OSINT-Monitoringsystem)

Dieser Commit ist enthalten in:
claude-dev
2026-03-04 17:53:18 +01:00
Commit 8312d24912
51 geänderte Dateien mit 19355 neuen und 0 gelöschten Zeilen

0
src/middleware/__init__.py Normale Datei
Datei anzeigen

Datei anzeigen

@@ -0,0 +1,51 @@
"""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