File size: 1,376 Bytes
365de9c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
from enum import Enum
from pydantic import BaseModel, Field, EmailStr, field_validator
import re
class ThemeOptions(str, Enum):
LIGHT = "light"
DARK = "dark"
class LanguageOptions(str, Enum):
AR = "ar"
EN = "en"
RU = "ru"
class SUser(BaseModel):
email: EmailStr
password: str = Field(default=..., min_length=8, max_length=32)
@field_validator("password", mode="before")
def validate_password(cls, password_to_validate):
"""
Validates the strength of the password.
The password **must** contain:
- At least one digit
- At least one special character
- At least one uppercase character
- At least one lowercase character
"""
if not re.search(r"\d", password_to_validate):
raise ValueError("Password must contain at least one number.")
if not re.search(r"[!@#$%^&*()_+\-=\[\]{};:\'\",.<>?`~]", password_to_validate):
raise ValueError("Password must contain at least one special symbol.")
if not re.search(r"[A-Z]", password_to_validate):
raise ValueError("Password must contain at least one uppercase letter.")
if not re.search(r"[a-z]", password_to_validate):
raise ValueError("Password must contain at least one lowercase letter.")
return password_to_validate
|