Some checks failed
Deploy Development / deploy (push) Successful in 38s
Test Suite / pytest-backend (push) Failing after 7s
Test Suite / k6 /api/health Baseline (push) Has been skipped
Test Suite / playwright-smoke (push) Has been skipped
Test Suite / lint-backend (push) Successful in 2s
Test Suite / compose-smoke (push) Has been skipped
Co-authored-by: Cursor <cursoragent@cursor.com>
50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
"""Current user and tenant context endpoints."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from auth import get_session, require_auth, set_session_active_tenant
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
from pydantic import BaseModel
|
|
from tenant_context import TenantContext, get_tenant_context, list_user_tenants, require_tenant_context, resolve_tenant_context
|
|
|
|
router = APIRouter(prefix="/api/me", tags=["me"])
|
|
|
|
|
|
class SwitchTenantRequest(BaseModel):
|
|
tenant_id: str
|
|
|
|
|
|
@router.get("")
|
|
def get_me(session: dict = Depends(require_auth)):
|
|
tenants = list_user_tenants(str(session["user_id"]))
|
|
return {
|
|
"id": str(session["user_id"]),
|
|
"email": session["email"],
|
|
"display_name": session["display_name"],
|
|
"portal_role": session["portal_role"],
|
|
"active_tenant_id": str(session["active_tenant_id"]) if session.get("active_tenant_id") else None,
|
|
"tenants": tenants,
|
|
}
|
|
|
|
|
|
@router.get("/context")
|
|
def get_my_context(ctx: TenantContext = Depends(get_tenant_context)):
|
|
return ctx.to_dict()
|
|
|
|
|
|
@router.get("/context/required")
|
|
def get_my_context_with_tenant(ctx: TenantContext = Depends(require_tenant_context)):
|
|
"""Example endpoint requiring an active tenant — for tests and AP0.3 prep."""
|
|
return ctx.to_dict()
|
|
|
|
|
|
@router.post("/tenant")
|
|
def switch_tenant(body: SwitchTenantRequest, session: dict = Depends(require_auth)):
|
|
ok = set_session_active_tenant(session["token"], body.tenant_id)
|
|
if not ok:
|
|
raise HTTPException(status_code=403, detail="Tenant nicht erlaubt")
|
|
fresh = get_session(session["token"])
|
|
if not fresh:
|
|
raise HTTPException(status_code=401, detail="Session ungültig")
|
|
return resolve_tenant_context(fresh).to_dict()
|