1cc8fa1abf
Replace legacy signup with start/verify/resend endpoints, add OTP-focused mail templates and auth rate limits, and align compose/env/runbook for local self-hosted Supabase OTP behavior.
74 lines
1.5 KiB
Python
74 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Literal
|
|
|
|
from pydantic import BaseModel, EmailStr, Field
|
|
|
|
|
|
class SignupStartRequest(BaseModel):
|
|
username: str = Field(min_length=3, max_length=30)
|
|
email: EmailStr
|
|
password: str = Field(min_length=6)
|
|
redirect_to: str | None = None
|
|
|
|
|
|
class SignupVerifyRequest(BaseModel):
|
|
email: EmailStr
|
|
token: str = Field(pattern=r"^\d{6}$")
|
|
|
|
|
|
class SignupResendRequest(BaseModel):
|
|
email: EmailStr
|
|
|
|
|
|
class LoginRequest(BaseModel):
|
|
email: EmailStr
|
|
password: str = Field(min_length=6)
|
|
|
|
|
|
class RefreshRequest(BaseModel):
|
|
refresh_token: str = Field(min_length=1)
|
|
|
|
|
|
class LogoutRequest(BaseModel):
|
|
refresh_token: str = Field(min_length=1)
|
|
|
|
|
|
class AuthUser(BaseModel):
|
|
id: str
|
|
email: EmailStr
|
|
|
|
|
|
class AuthTokenResponse(BaseModel):
|
|
access_token: str
|
|
refresh_token: str
|
|
expires_in: int
|
|
token_type: str
|
|
user: AuthUser
|
|
|
|
|
|
class AuthUserByEmailResponse(BaseModel):
|
|
id: str
|
|
email: EmailStr
|
|
created_at: str
|
|
email_confirmed_at: str | None = None
|
|
|
|
|
|
class AuthSignupStartResponse(BaseModel):
|
|
status: Literal["pending_verification"] = "pending_verification"
|
|
email: EmailStr
|
|
message: str = "Verification code sent"
|
|
|
|
|
|
class AuthResendCodeResponse(BaseModel):
|
|
message: str = "If the email exists, a verification code has been sent"
|
|
|
|
|
|
class PasswordResetRequest(BaseModel):
|
|
email: EmailStr
|
|
redirect_to: str | None = None
|
|
|
|
|
|
class PasswordResetResponse(BaseModel):
|
|
message: str = "Password reset email sent"
|