Files
romm/backend/endpoints/responses/client_token.py
nendo e0b25fbc6c feat(client-tokens): add client API tokens with QR pairing flow
Long-lived, revocable, scope-restricted tokens for external clients
(mobile apps, retro handhelds, third-party tools). Includes:

- Backend: model, migration, DB handler, auth integration (rmm_ prefix
  routing in HybridAuthBackend), CRUD + pairing + exchange endpoints,
  rate limiting, scope intersection enforcement, admin oversight
- Frontend: settings page with token management table, stepped
  create/deliver dialog (config -> copy/pair), QR code with RomM logo,
  admin token table, standalone /pair page for QR scan landing
- /pair page supports custom-scheme callbacks for app deep linking,
  falls back to displaying code for manual entry
- 33 backend tests across 5 classes (CRUD, auth, isolation, pairing,
  admin)
2026-03-11 10:56:35 +09:00

30 lines
519 B
Python

from datetime import datetime
from .base import BaseModel
class ClientTokenSchema(BaseModel):
id: int
name: str
scopes: list[str]
expires_at: datetime | None
last_used_at: datetime | None
created_at: datetime
user_id: int
class Config:
from_attributes = True
class ClientTokenCreateSchema(ClientTokenSchema):
raw_token: str
class ClientTokenAdminSchema(ClientTokenSchema):
username: str
class ClientTokenPairSchema(BaseModel):
code: str
expires_in: int