from datetime import datetime from pydantic import BaseModel, ConfigDict, EmailStr, Field class RegisterIn(BaseModel): email: EmailStr # Untergrenze nach BSI/NIST-Empfehlung: Laenge statt Zeichenklassen. password: str = Field(min_length=12, max_length=256) display_name: str | None = Field(default=None, max_length=80) class LoginIn(BaseModel): email: EmailStr password: str = Field(max_length=256) class PasswordResetRequestIn(BaseModel): email: EmailStr class PasswordResetIn(BaseModel): token: str = Field(max_length=128) password: str = Field(min_length=12, max_length=256) class PasswordChangeIn(BaseModel): current_password: str = Field(max_length=256) new_password: str = Field(min_length=12, max_length=256) class ProfileUpdateIn(BaseModel): display_name: str | None = Field(default=None, max_length=80) class UserOut(BaseModel): model_config = ConfigDict(from_attributes=True) id: str email: EmailStr display_name: str | None is_admin: bool verified: bool must_change_password: bool created_at: datetime @classmethod def of(cls, user) -> "UserOut": return cls( id=user.id, email=user.email, display_name=user.display_name, is_admin=user.is_admin, verified=user.verified_at is not None, must_change_password=user.must_change_password, created_at=user.created_at, ) class MessageOut(BaseModel): detail: str class MailCheckOut(BaseModel): ok: bool detail: str host: str port: int security: str envelope_from: str class MailTestIn(BaseModel): to: EmailStr