54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
from datetime import datetime, timezone
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from pydantic import BaseModel
|
|
|
|
from app.auth.keycloak_dependencies import get_current_keycloak_payload
|
|
from app.auth.metadata_dependencies import get_current_metadata_user
|
|
from app.auth.project_dependencies import (
|
|
ProjectContext,
|
|
get_project_context,
|
|
)
|
|
from app.auth.permissions import permissions_for_context
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
class AgentAuthContextResponse(BaseModel):
|
|
user_id: str
|
|
keycloak_sub: str
|
|
username: str
|
|
role: str
|
|
is_superuser: bool
|
|
project_id: str
|
|
network: str
|
|
project_role: str
|
|
permissions: list[str]
|
|
token_expires_at: str | None = None
|
|
|
|
|
|
@router.get("/agent/auth/context", response_model=AgentAuthContextResponse)
|
|
async def get_agent_auth_context(
|
|
ctx: ProjectContext = Depends(get_project_context),
|
|
current_user=Depends(get_current_metadata_user),
|
|
keycloak_payload: dict = Depends(get_current_keycloak_payload),
|
|
) -> AgentAuthContextResponse:
|
|
exp = keycloak_payload.get("exp")
|
|
token_expires_at = (
|
|
datetime.fromtimestamp(exp, tz=timezone.utc).isoformat()
|
|
if isinstance(exp, int)
|
|
else None
|
|
)
|
|
return AgentAuthContextResponse(
|
|
user_id=str(current_user.id),
|
|
keycloak_sub=str(current_user.keycloak_id),
|
|
username=current_user.username,
|
|
role=current_user.role,
|
|
is_superuser=current_user.is_superuser,
|
|
project_id=str(ctx.project_id),
|
|
network=ctx.project_code,
|
|
project_role=ctx.project_role,
|
|
permissions=sorted(permissions_for_context(ctx)),
|
|
token_expires_at=token_expires_at,
|
|
)
|