93 lines
1.6 KiB
Python

from typing import Optional
from pydantic import BaseModel, EmailStr, Field
import enum
class UserRole(str, enum.Enum):
USER = "user"
ADMIN = "admin"
class UserBase(BaseModel):
email: EmailStr
full_name: Optional[str] = None
is_active: Optional[bool] = True
class UserCreate(UserBase):
password: str
role: Optional[UserRole] = UserRole.USER
class UserUpdate(BaseModel):
email: Optional[EmailStr] = None
full_name: Optional[str] = None
password: Optional[str] = None
is_active: Optional[bool] = None
class UserInDBBase(UserBase):
id: int
is_verified: bool
is_kyc_verified: bool
role: UserRole
is_two_factor_enabled: bool
class Config:
orm_mode = True
class User(UserInDBBase):
pass
class UserInDB(UserInDBBase):
hashed_password: str
class Token(BaseModel):
access_token: str
token_type: str
refresh_token: Optional[str] = None
requires_two_factor: Optional[bool] = False
class TokenPayload(BaseModel):
sub: str
exp: int
role: str
class RefreshToken(BaseModel):
refresh_token: str
class PasswordReset(BaseModel):
email: EmailStr
class PasswordResetConfirm(BaseModel):
token: str
new_password: str
class EmailVerification(BaseModel):
token: str
class TwoFactorSetup(BaseModel):
password: str
class TwoFactorVerify(BaseModel):
code: str = Field(..., min_length=6, max_length=6)
class TwoFactorLogin(BaseModel):
token: str
code: str = Field(..., min_length=6, max_length=6)
class TwoFactorDisable(BaseModel):
password: str
code: str = Field(..., min_length=6, max_length=6)