64 lines
1.7 KiB
Python
64 lines
1.7 KiB
Python
|
|
"""Registration token schemas for API validation."""
|
||
|
|
|
||
|
|
import uuid
|
||
|
|
from datetime import datetime
|
||
|
|
|
||
|
|
from pydantic import BaseModel, ConfigDict, Field
|
||
|
|
|
||
|
|
|
||
|
|
class RegistrationTokenCreate(BaseModel):
|
||
|
|
"""Schema for creating a new registration token."""
|
||
|
|
|
||
|
|
description: str | None = Field(
|
||
|
|
default=None,
|
||
|
|
max_length=255,
|
||
|
|
description="Human-readable description for this token",
|
||
|
|
)
|
||
|
|
max_uses: int = Field(
|
||
|
|
default=1,
|
||
|
|
ge=0,
|
||
|
|
description="Maximum number of times this token can be used (0 = unlimited)",
|
||
|
|
)
|
||
|
|
expires_in_hours: int | None = Field(
|
||
|
|
default=None,
|
||
|
|
ge=1,
|
||
|
|
le=8760, # Max 1 year
|
||
|
|
description="Number of hours until this token expires (optional)",
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
class RegistrationTokenResponse(BaseModel):
|
||
|
|
"""Schema for registration token response (without plaintext token)."""
|
||
|
|
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|
||
|
|
|
||
|
|
id: uuid.UUID
|
||
|
|
tenant_id: uuid.UUID
|
||
|
|
description: str | None
|
||
|
|
max_uses: int
|
||
|
|
use_count: int
|
||
|
|
expires_at: datetime | None
|
||
|
|
revoked: bool
|
||
|
|
created_at: datetime
|
||
|
|
created_by: str | None
|
||
|
|
|
||
|
|
|
||
|
|
class RegistrationTokenCreatedResponse(RegistrationTokenResponse):
|
||
|
|
"""Schema for registration token creation response.
|
||
|
|
|
||
|
|
This is the only time the plaintext token is returned to the client.
|
||
|
|
It must be securely stored as it cannot be retrieved again.
|
||
|
|
"""
|
||
|
|
|
||
|
|
token: str = Field(
|
||
|
|
...,
|
||
|
|
description="The plaintext registration token. Store this securely - it cannot be retrieved again.",
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
class RegistrationTokenList(BaseModel):
|
||
|
|
"""Schema for listing registration tokens."""
|
||
|
|
|
||
|
|
tokens: list[RegistrationTokenResponse]
|
||
|
|
total: int
|