File size: 999 Bytes
8777bc2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
"""Minimal browser identity bootstrap endpoint."""
from fastapi import APIRouter, Depends, Header, Request
from slowapi import Limiter
from slowapi.util import get_remote_address

from app.security import AuthContext, decode_optional_bearer, issue_anonymous_token, require_user

router = APIRouter()
limiter = Limiter(key_func=get_remote_address)


@router.post("/anonymous")
@limiter.limit("12/hour")
async def create_anonymous_identity(
    request: Request, authorization: str | None = Header(default=None)
) -> dict[str, object]:
    """Create an identity or renew a still-valid browser identity."""
    existing = decode_optional_bearer(authorization)
    token, context = issue_anonymous_token(existing.user_id if existing else None)
    return {"access_token": token, "token_type": "bearer", "user_id": context.user_id}


@router.get("/me")
async def me(context: AuthContext = Depends(require_user)) -> dict[str, object]:
    return {"user_id": context.user_id, "is_admin": context.is_admin}