mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-09-30 19:21:33 +02:00
109 lines
2.3 KiB
Python
109 lines
2.3 KiB
Python
from pydantic import BaseModel
|
|
|
|
|
|
class GroupBrief(BaseModel):
|
|
"""Brief group info for embedding in user responses."""
|
|
|
|
id: int
|
|
name: str
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class LoginRequest(BaseModel):
|
|
username: str
|
|
password: str
|
|
|
|
|
|
class LoginResponse(BaseModel):
|
|
access_token: str
|
|
token_type: str = "bearer"
|
|
user: "UserResponse"
|
|
|
|
|
|
class UserCreate(BaseModel):
|
|
username: str
|
|
password: str | None = None # Optional when advanced auth is enabled
|
|
email: str | None = None
|
|
role: str = "user"
|
|
group_ids: list[int] | None = None
|
|
|
|
|
|
class UserUpdate(BaseModel):
|
|
username: str | None = None
|
|
password: str | None = None
|
|
email: str | None = None
|
|
role: str | None = None
|
|
is_active: bool | None = None
|
|
group_ids: list[int] | None = None
|
|
|
|
|
|
class UserResponse(BaseModel):
|
|
id: int
|
|
username: str
|
|
email: str | None = None
|
|
role: str # Deprecated, kept for backward compatibility
|
|
is_active: bool
|
|
is_admin: bool # Computed from role and group membership
|
|
groups: list[GroupBrief] = []
|
|
permissions: list[str] = [] # All permissions from groups
|
|
created_at: str
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class ChangePasswordRequest(BaseModel):
|
|
current_password: str
|
|
new_password: str
|
|
|
|
|
|
class SetupRequest(BaseModel):
|
|
auth_enabled: bool
|
|
admin_username: str | None = None
|
|
admin_password: str | None = None
|
|
|
|
|
|
class SetupResponse(BaseModel):
|
|
auth_enabled: bool
|
|
admin_created: bool | None = None
|
|
|
|
|
|
class ForgotPasswordRequest(BaseModel):
|
|
email: str
|
|
|
|
|
|
class ForgotPasswordResponse(BaseModel):
|
|
message: str
|
|
|
|
|
|
class ResetPasswordRequest(BaseModel):
|
|
user_id: int
|
|
|
|
|
|
class ResetPasswordResponse(BaseModel):
|
|
message: str
|
|
|
|
|
|
class SMTPSettings(BaseModel):
|
|
smtp_host: str
|
|
smtp_port: int
|
|
smtp_username: str | None = None # Optional when auth is disabled
|
|
smtp_password: str | None = None # Optional for read operations or when auth is disabled
|
|
smtp_security: str = "starttls" # 'starttls', 'ssl', 'none'
|
|
smtp_auth_enabled: bool = True
|
|
smtp_from_email: str
|
|
smtp_from_name: str = "BamBuddy"
|
|
# Deprecated field for backward compatibility
|
|
smtp_use_tls: bool | None = None
|
|
|
|
|
|
class TestSMTPRequest(BaseModel):
|
|
test_recipient: str
|
|
|
|
|
|
class TestSMTPResponse(BaseModel):
|
|
success: bool
|
|
message: str
|