From 36275caf4052c248624e5ec0c150d37ed2f0e25a Mon Sep 17 00:00:00 2001 From: ITQ Date: Mon, 20 Jan 2025 17:29:44 +0300 Subject: [PATCH] chore(login): schema validation improvements --- solution/api/v1/business/schemas.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/solution/api/v1/business/schemas.py b/solution/api/v1/business/schemas.py index 2b79e40..58e6b94 100644 --- a/solution/api/v1/business/schemas.py +++ b/solution/api/v1/business/schemas.py @@ -1,8 +1,9 @@ +import re import uuid from typing import ClassVar from ninja import ModelSchema, Schema -from pydantic import EmailStr +from pydantic import EmailStr, field_validator from apps.business.models import Business @@ -23,14 +24,21 @@ class BusinessSignUpOut(Schema): company_id: uuid.UUID -class BusinessSignInIn(ModelSchema): +class BusinessSignInIn(Schema): email: EmailStr + password: str - class Meta: - model = Business - fields: ClassVar[list[str]] = [ - Business.password.field.name, - ] + @field_validator("password") + def validate_password(cls, value: str) -> str: # noqa: N805 + pattern = r"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,60}$" # noqa: E501 + if not re.match(pattern, value): + e = ( + "Password must contain at least 8 characters, one uppercase " + "letter, one lowercase letter, one number, and one special " + "character (@$!%*?&)." + ) + raise ValueError(e) + return value class BusinessSignInOut(Schema):