auth.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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 | None = None # Optional when advanced auth is enabled
  18. email: str | None = None
  19. role: str = "user"
  20. group_ids: list[int] | None = None
  21. class UserUpdate(BaseModel):
  22. username: str | None = None
  23. password: str | None = None
  24. email: str | None = None
  25. role: str | None = None
  26. is_active: bool | None = None
  27. group_ids: list[int] | None = None
  28. class UserResponse(BaseModel):
  29. id: int
  30. username: str
  31. email: str | None = None
  32. role: str # Deprecated, kept for backward compatibility
  33. is_active: bool
  34. is_admin: bool # Computed from role and group membership
  35. auth_source: str = "local" # "local" or "ldap"
  36. groups: list[GroupBrief] = []
  37. permissions: list[str] = [] # All permissions from groups
  38. created_at: str
  39. class Config:
  40. from_attributes = True
  41. class ChangePasswordRequest(BaseModel):
  42. current_password: str
  43. new_password: str
  44. class SetupRequest(BaseModel):
  45. auth_enabled: bool
  46. admin_username: str | None = None
  47. admin_password: str | None = None
  48. class SetupResponse(BaseModel):
  49. auth_enabled: bool
  50. admin_created: bool | None = None
  51. class ForgotPasswordRequest(BaseModel):
  52. email: str
  53. class ForgotPasswordResponse(BaseModel):
  54. message: str
  55. class ResetPasswordRequest(BaseModel):
  56. user_id: int
  57. class ResetPasswordResponse(BaseModel):
  58. message: str
  59. class SMTPSettings(BaseModel):
  60. smtp_host: str
  61. smtp_port: int
  62. smtp_username: str | None = None # Optional when auth is disabled
  63. smtp_password: str | None = None # Optional for read operations or when auth is disabled
  64. smtp_security: str = "starttls" # 'starttls', 'ssl', 'none'
  65. smtp_auth_enabled: bool = True
  66. smtp_from_email: str
  67. smtp_from_name: str = "BamBuddy"
  68. # Deprecated field for backward compatibility
  69. smtp_use_tls: bool | None = None
  70. class TestSMTPRequest(BaseModel):
  71. test_recipient: str
  72. class TestSMTPResponse(BaseModel):
  73. success: bool
  74. message: str