File size: 1,204 Bytes
e53c2d7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from pydantic import BaseModel, Field, EmailStr, field_validator
import re

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