"""Pydantic schemas for TOTP setup / enable / disable / status endpoints (M4-T05).""" from __future__ import annotations from pydantic import BaseModel # --------------------------------------------------------------------------- # Setup (POST /api/auth/totp/setup) — response # --------------------------------------------------------------------------- class TotpSetupResponse(BaseModel): """Returned once after a setup call. ``secret`` and ``recovery_codes`` are **one-time plaintext values**. They are never returned again by any subsequent API call. The frontend must display and instruct the user to save them before confirming. """ secret: str otpauth_uri: str recovery_codes: list[str] # --------------------------------------------------------------------------- # Enable (POST /api/auth/totp/enable) — request # --------------------------------------------------------------------------- class TotpEnableRequest(BaseModel): """The user confirms setup by providing the 6-digit TOTP code.""" code: str # --------------------------------------------------------------------------- # Disable (POST /api/auth/totp/disable) — request # --------------------------------------------------------------------------- class TotpDisableRequest(BaseModel): """Disable TOTP by proving identity. Exactly one of ``password`` or ``code`` must be provided. """ password: str | None = None code: str | None = None # --------------------------------------------------------------------------- # Status (GET /api/auth/totp) — response # --------------------------------------------------------------------------- class TotpStatusResponse(BaseModel): """Minimal status response — never exposes secret or recovery codes.""" enabled: bool