deepshield / schemas /auth.py
ar07xd's picture
Sync from GitHub via hub-sync
26f3f24 verified
from __future__ import annotations
import re
from datetime import datetime
from pydantic import BaseModel, EmailStr, Field, field_validator
class RegisterBody(BaseModel):
email: EmailStr
password: str = Field(min_length=6, max_length=128)
name: str | None = Field(default=None, max_length=255)
@field_validator("password")
@classmethod
def validate_password_strength(cls, value: str) -> str:
if len(value) < 8:
raise ValueError("Password must be at least 8 characters long")
if not re.search(r"[a-z]", value):
raise ValueError("Password must include a lowercase letter")
if not re.search(r"[A-Z]", value):
raise ValueError("Password must include an uppercase letter")
if not re.search(r"\d", value):
raise ValueError("Password must include a digit")
if not re.search(r"[^A-Za-z0-9]", value):
raise ValueError("Password must include a symbol")
return value
class LoginBody(BaseModel):
email: EmailStr
password: str
class UserOut(BaseModel):
id: int
email: str
name: str | None = None
created_at: datetime
class TokenResponse(BaseModel):
access_token: str
token_type: str = "bearer"
expires_in_minutes: int
user: UserOut