auth.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from pydantic import BaseModel
  2. class GroupBrief(BaseModel):
  3. """Brief group info for embedding in user responses."""
  4. id: int
  5. name: str
  6. class Config:
  7. from_attributes = True
  8. class LoginRequest(BaseModel):
  9. username: str
  10. password: str
  11. class LoginResponse(BaseModel):
  12. access_token: str
  13. token_type: str = "bearer"
  14. user: "UserResponse"
  15. class UserCreate(BaseModel):
  16. username: str
  17. password: str
  18. role: str = "user"
  19. group_ids: list[int] | None = None
  20. class UserUpdate(BaseModel):
  21. username: str | None = None
  22. password: str | None = None
  23. role: str | None = None
  24. is_active: bool | None = None
  25. group_ids: list[int] | None = None
  26. class UserResponse(BaseModel):
  27. id: int
  28. username: str
  29. role: str # Deprecated, kept for backward compatibility
  30. is_active: bool
  31. is_admin: bool # Computed from role and group membership
  32. groups: list[GroupBrief] = []
  33. permissions: list[str] = [] # All permissions from groups
  34. created_at: str
  35. class Config:
  36. from_attributes = True
  37. class ChangePasswordRequest(BaseModel):
  38. current_password: str
  39. new_password: str
  40. class SetupRequest(BaseModel):
  41. auth_enabled: bool
  42. admin_username: str | None = None
  43. admin_password: str | None = None
  44. class SetupResponse(BaseModel):
  45. auth_enabled: bool
  46. admin_created: bool | None = None