|
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 |
|
|