Initial commit: AegisSight-Monitor (OSINT-Monitoringsystem)
Dieser Commit ist enthalten in:
0
src/middleware/__init__.py
Normale Datei
0
src/middleware/__init__.py
Normale Datei
51
src/middleware/license_check.py
Normale Datei
51
src/middleware/license_check.py
Normale Datei
@@ -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
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren