File size: 1,224 Bytes
2f1e7ff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
"""Credential-safe, explicit public contracts for authentication endpoints."""

from datetime import datetime
from typing import Literal
from pydantic import BaseModel, Field


class PrincipalResponse(BaseModel):
    authenticated: bool
    kind: Literal["system", "access_token"]
    is_system: bool
    brain_id: str | None
    permissions: list[str]
    legacy: bool = False


class SessionResponse(PrincipalResponse):
    csrf_token: str | None = Field(default=None, description="CSRF proof for unsafe cookie-authenticated requests; never an access credential.")


class LogoutResponse(BaseModel):
    authenticated: Literal[False]


class AccessTokenMetadataResponse(BaseModel):
    id: str
    label: str
    brain_id: str
    token_prefix: str
    permissions: list[str]
    created_at: datetime
    last_used_at: datetime | None
    expires_at: datetime | None
    revoked_at: datetime | None
    legacy: bool
    created_by: str


class IssuedAccessTokenResponse(AccessTokenMetadataResponse):
    token: str = Field(repr=False, description="Shown exactly once at creation. Store securely; listing never reveals this value.")


class AccessTokenListResponse(BaseModel):
    tokens: list[AccessTokenMetadataResponse]