135 lines
3.1 KiB
Python
135 lines
3.1 KiB
Python
"""
|
|
Authentication request models.
|
|
"""
|
|
|
|
from typing import TYPE_CHECKING, Dict, Any, Literal, Optional, TypedDict
|
|
from pydantic import BaseModel, Field, model_validator, RootModel, ConfigDict
|
|
from ApiEvents.base_request_model import BaseRequestModel, DictRequestModel
|
|
|
|
if TYPE_CHECKING:
|
|
from fastapi import Request
|
|
|
|
|
|
class TokenObjectBase(BaseModel):
|
|
"""Base model for token objects."""
|
|
|
|
user_type: str = Field(..., description="Type of user")
|
|
user_id: str = Field(..., description="User ID")
|
|
token: str = Field(..., description="Authentication token")
|
|
permissions: Dict[str, Any] = Field(description="User permissions")
|
|
|
|
|
|
class LoginData(TypedDict):
|
|
"""Type for login data."""
|
|
|
|
domain: str
|
|
access_key: str
|
|
password: str
|
|
remember_me: bool
|
|
|
|
|
|
class LoginRequestModel(BaseRequestModel[LoginData]):
|
|
"""Request model for login endpoint."""
|
|
|
|
model_config = ConfigDict(
|
|
json_schema_extra={
|
|
"example": {
|
|
"domain": "example.com",
|
|
"access_key": "user@example",
|
|
"password": "password",
|
|
"remember_me": False,
|
|
}
|
|
}
|
|
)
|
|
|
|
|
|
class LogoutData(TypedDict):
|
|
"""Type for logout data."""
|
|
|
|
token: str
|
|
|
|
|
|
class LogoutRequestModel(BaseRequestModel[LogoutData]):
|
|
"""Request model for logout endpoint."""
|
|
|
|
model_config = ConfigDict(
|
|
json_schema_extra={"example": {"token": "your-token-here"}}
|
|
)
|
|
|
|
|
|
class RememberData(TypedDict):
|
|
"""Type for remember token data."""
|
|
|
|
remember_token: str
|
|
|
|
|
|
class RememberRequestModel(BaseRequestModel[RememberData]):
|
|
"""Request model for remember token endpoint."""
|
|
|
|
model_config = ConfigDict(
|
|
json_schema_extra={"example": {"remember_token": "your-remember-token-here"}}
|
|
)
|
|
|
|
|
|
class ForgotData(TypedDict):
|
|
"""Type for forgot password data."""
|
|
|
|
email: str
|
|
domain: str
|
|
|
|
|
|
class ForgotRequestModel(BaseRequestModel[ForgotData]):
|
|
"""Request model for forgot password endpoint."""
|
|
|
|
model_config = ConfigDict(
|
|
json_schema_extra={
|
|
"example": {"email": "user@example.com", "domain": "example.com"}
|
|
}
|
|
)
|
|
|
|
|
|
class ChangePasswordData(TypedDict):
|
|
"""Type for change password data."""
|
|
|
|
old_password: str
|
|
new_password: str
|
|
|
|
|
|
class ChangePasswordRequestModel(BaseRequestModel[ChangePasswordData]):
|
|
"""Request model for change password endpoint."""
|
|
|
|
model_config = ConfigDict(
|
|
json_schema_extra={
|
|
"example": {"old_password": "old-pass", "new_password": "new-pass"}
|
|
}
|
|
)
|
|
|
|
|
|
class CreatePasswordData(TypedDict):
|
|
"""Type for create password data."""
|
|
|
|
token: str
|
|
password: str
|
|
|
|
|
|
class CreatePasswordRequestModel(BaseRequestModel[CreatePasswordData]):
|
|
"""Request model for create password endpoint."""
|
|
|
|
model_config = ConfigDict(
|
|
json_schema_extra={
|
|
"example": {"token": "password-creation-token", "password": "new-password"}
|
|
}
|
|
)
|
|
|
|
|
|
class SelectionDataOccupant(BaseModel):
|
|
"""Type for selection data."""
|
|
|
|
build_living_space_uu_id: Optional[str]
|
|
|
|
|
|
class SelectionDataEmployee(BaseModel):
|
|
"""Type for selection data."""
|
|
|
|
company_uu_id: Optional[str]
|