auth.py 902 B

1234567891011121314151617181920212223242526272829303132
  1. from __future__ import annotations
  2. from typing import Literal
  3. from pydantic import BaseModel, Field
  4. Username = str
  5. Role = Literal["admin", "user"]
  6. UserStatus = Literal["active", "disabled"]
  7. class LoginBody(BaseModel):
  8. username: Username = Field(min_length=3, max_length=64)
  9. password: str = Field(min_length=1, max_length=128)
  10. class CreateAuthUserBody(BaseModel):
  11. username: Username = Field(
  12. min_length=3,
  13. max_length=64,
  14. pattern=r"^[A-Za-z0-9_.-]+$",
  15. )
  16. password: str = Field(min_length=8, max_length=128)
  17. display_name: str = Field(min_length=1, max_length=128)
  18. role: Role = "user"
  19. class UpdateAuthUserBody(BaseModel):
  20. display_name: str | None = Field(default=None, min_length=1, max_length=128)
  21. role: Role | None = None
  22. status: UserStatus | None = None
  23. password: str | None = Field(default=None, min_length=8, max_length=128)