2025-12-07 12:00:00 +00:00
|
|
|
"""Authentication schemas."""
|
|
|
|
|
|
|
|
|
|
from uuid import UUID
|
|
|
|
|
|
|
|
|
|
from pydantic import BaseModel, EmailStr, Field
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RegisterRequest(BaseModel):
|
|
|
|
|
"""Request body for user registration."""
|
|
|
|
|
|
|
|
|
|
email: EmailStr
|
|
|
|
|
password: str = Field(min_length=8, max_length=128)
|
|
|
|
|
org_name: str = Field(min_length=1, max_length=100, description="Name for the default org")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LoginRequest(BaseModel):
|
|
|
|
|
"""Request body for user login."""
|
|
|
|
|
|
|
|
|
|
email: EmailStr
|
|
|
|
|
password: str
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RefreshRequest(BaseModel):
|
|
|
|
|
"""Request body for token refresh."""
|
|
|
|
|
|
|
|
|
|
refresh_token: str
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SwitchOrgRequest(BaseModel):
|
|
|
|
|
"""Request body for switching active organization."""
|
|
|
|
|
|
|
|
|
|
org_id: UUID
|
|
|
|
|
refresh_token: str
|
|
|
|
|
|
|
|
|
|
|
2025-12-29 09:55:30 +00:00
|
|
|
class LogoutRequest(BaseModel):
|
|
|
|
|
"""Request body for logging out and revoking a refresh token."""
|
|
|
|
|
|
|
|
|
|
refresh_token: str
|
|
|
|
|
|
|
|
|
|
|
2025-12-07 12:00:00 +00:00
|
|
|
class TokenResponse(BaseModel):
|
|
|
|
|
"""Response containing access and refresh tokens."""
|
|
|
|
|
|
|
|
|
|
access_token: str
|
|
|
|
|
refresh_token: str
|
|
|
|
|
token_type: str = "bearer"
|
|
|
|
|
expires_in: int = Field(description="Access token expiry in seconds")
|