22
33from datetime import datetime
44from typing import Any
5+ from typing import Literal
56
6- from pydantic import BaseModel , ConfigDict , Field
7+ from pydantic import BaseModel , ConfigDict , Field , model_validator
78
89
910class SignInResponse (BaseModel ):
@@ -23,22 +24,22 @@ class AuthEmailActionResponse(BaseModel):
2324class AuthEmailVerificationRequest (BaseModel ):
2425 model_config = ConfigDict (extra = "ignore" , populate_by_name = True )
2526
26- email : str
27+ email : str = Field ( min_length = 1 )
2728 redirect_to : str | None = Field (default = None , alias = "redirectTo" )
2829
2930
3031class AuthEmailVerifyRequest (BaseModel ):
3132 model_config = ConfigDict (extra = "ignore" , populate_by_name = True )
3233
33- email : str
34- otp : str
34+ email : str = Field ( min_length = 1 )
35+ otp : str = Field ( min_length = 1 )
3536
3637
3738class AuthResetPasswordExchangeRequest (BaseModel ):
3839 model_config = ConfigDict (extra = "ignore" , populate_by_name = True )
3940
40- email : str
41- code : str
41+ email : str = Field ( min_length = 1 )
42+ code : str = Field ( min_length = 1 )
4243
4344
4445class AuthResetPasswordExchangeResponse (BaseModel ):
@@ -51,8 +52,8 @@ class AuthResetPasswordExchangeResponse(BaseModel):
5152class AuthResetPasswordRequest (BaseModel ):
5253 model_config = ConfigDict (extra = "ignore" , populate_by_name = True )
5354
54- new_password : str = Field (alias = "newPassword" )
55- token : str = Field (alias = "otp" )
55+ new_password : str = Field (min_length = 1 , alias = "newPassword" )
56+ token : str = Field (min_length = 1 , alias = "otp" )
5657
5758
5859class CurrentProfileResponse (BaseModel ):
@@ -68,13 +69,13 @@ class PublicAuthConfigResponse(BaseModel):
6869 o_auth_providers : list [str ] = Field (default_factory = list , alias = "oAuthProviders" )
6970 custom_o_auth_providers : list [str ] = Field (default_factory = list , alias = "customOAuthProviders" )
7071 require_email_verification : bool | None = Field (default = None , alias = "requireEmailVerification" )
71- password_min_length : int | None = Field (default = None , alias = "passwordMinLength" )
72+ password_min_length : int | None = Field (default = None , ge = 4 , le = 128 , alias = "passwordMinLength" )
7273 require_number : bool | None = Field (default = None , alias = "requireNumber" )
7374 require_lowercase : bool | None = Field (default = None , alias = "requireLowercase" )
7475 require_uppercase : bool | None = Field (default = None , alias = "requireUppercase" )
7576 require_special_char : bool | None = Field (default = None , alias = "requireSpecialChar" )
76- verify_email_method : str | None = Field (default = None , alias = "verifyEmailMethod" )
77- reset_password_method : str | None = Field (default = None , alias = "resetPasswordMethod" )
77+ verify_email_method : Literal [ "code" , "link" ] | None = Field (default = None , alias = "verifyEmailMethod" )
78+ reset_password_method : Literal [ "code" , "link" ] | None = Field (default = None , alias = "resetPasswordMethod" )
7879
7980
8081class ProfileResponse (BaseModel ):
@@ -89,13 +90,13 @@ class AuthConfigResponse(BaseModel):
8990
9091 id : str | None = None
9192 require_email_verification : bool | None = Field (default = None , alias = "requireEmailVerification" )
92- password_min_length : int | None = Field (default = None , alias = "passwordMinLength" )
93+ password_min_length : int | None = Field (default = None , ge = 4 , le = 128 , alias = "passwordMinLength" )
9394 require_number : bool | None = Field (default = None , alias = "requireNumber" )
9495 require_lowercase : bool | None = Field (default = None , alias = "requireLowercase" )
9596 require_uppercase : bool | None = Field (default = None , alias = "requireUppercase" )
9697 require_special_char : bool | None = Field (default = None , alias = "requireSpecialChar" )
97- verify_email_method : str | None = Field (default = None , alias = "verifyEmailMethod" )
98- reset_password_method : str | None = Field (default = None , alias = "resetPasswordMethod" )
98+ verify_email_method : Literal [ "code" , "link" ] | None = Field (default = None , alias = "verifyEmailMethod" )
99+ reset_password_method : Literal [ "code" , "link" ] | None = Field (default = None , alias = "resetPasswordMethod" )
99100 allowed_redirect_urls : list [str ] = Field (default_factory = list , alias = "allowedRedirectUrls" )
100101 created_at : datetime | None = Field (default = None , alias = "createdAt" )
101102 updated_at : datetime | None = Field (default = None , alias = "updatedAt" )
@@ -105,15 +106,32 @@ class AuthConfigUpdateRequest(BaseModel):
105106 model_config = ConfigDict (extra = "ignore" , populate_by_name = True )
106107
107108 require_email_verification : bool | None = Field (default = None , alias = "requireEmailVerification" )
108- password_min_length : int | None = Field (default = None , alias = "passwordMinLength" )
109+ password_min_length : int | None = Field (default = None , ge = 4 , le = 128 , alias = "passwordMinLength" )
109110 require_number : bool | None = Field (default = None , alias = "requireNumber" )
110111 require_lowercase : bool | None = Field (default = None , alias = "requireLowercase" )
111112 require_uppercase : bool | None = Field (default = None , alias = "requireUppercase" )
112113 require_special_char : bool | None = Field (default = None , alias = "requireSpecialChar" )
113- verify_email_method : str | None = Field (default = None , alias = "verifyEmailMethod" )
114- reset_password_method : str | None = Field (default = None , alias = "resetPasswordMethod" )
114+ verify_email_method : Literal [ "code" , "link" ] | None = Field (default = None , alias = "verifyEmailMethod" )
115+ reset_password_method : Literal [ "code" , "link" ] | None = Field (default = None , alias = "resetPasswordMethod" )
115116 allowed_redirect_urls : list [str ] | None = Field (default = None , alias = "allowedRedirectUrls" )
116117
118+ @model_validator (mode = "before" )
119+ def require_field (cls , values ):
120+ fields = (
121+ "requireEmailVerification" , "require_email_verification" ,
122+ "passwordMinLength" , "password_min_length" ,
123+ "requireNumber" , "require_number" ,
124+ "requireLowercase" , "require_lowercase" ,
125+ "requireUppercase" , "require_uppercase" ,
126+ "requireSpecialChar" , "require_special_char" ,
127+ "verifyEmailMethod" , "verify_email_method" ,
128+ "resetPasswordMethod" , "reset_password_method" ,
129+ "allowedRedirectUrls" , "allowed_redirect_urls" ,
130+ )
131+ if not any (values .get (f ) is not None for f in fields ):
132+ raise ValueError ("update_config requires at least one field" )
133+ return values
134+
117135
118136class UserResponse (BaseModel ):
119137 model_config = ConfigDict (extra = "ignore" , populate_by_name = True )
@@ -131,8 +149,8 @@ class UserResponse(BaseModel):
131149class AuthUserCreateRequest (BaseModel ):
132150 model_config = ConfigDict (extra = "ignore" , populate_by_name = True )
133151
134- email : str
135- password : str
152+ email : str = Field ( min_length = 1 )
153+ password : str = Field ( min_length = 1 )
136154 name : str | None = None
137155 redirect_to : str | None = Field (default = None , alias = "redirectTo" )
138156
@@ -155,7 +173,7 @@ class AuthUsersResponse(BaseModel):
155173class AuthDeleteUsersRequest (BaseModel ):
156174 model_config = ConfigDict (extra = "ignore" , populate_by_name = True )
157175
158- user_ids : list [str ] = Field (alias = "userIds" )
176+ user_ids : list [str ] = Field (min_length = 1 , alias = "userIds" )
159177
160178
161179class AuthDeleteUsersResponse (BaseModel ):
@@ -192,13 +210,13 @@ class AuthSessionResponse(BaseModel):
192210class RefreshRequest (BaseModel ):
193211 model_config = ConfigDict (extra = "ignore" , populate_by_name = True )
194212
195- refresh_token : str = Field (alias = "refreshToken" )
213+ refresh_token : str = Field (min_length = 1 , alias = "refreshToken" )
196214
197215
198216class AdminSessionExchangeRequest (BaseModel ):
199217 model_config = ConfigDict (extra = "ignore" , populate_by_name = True )
200218
201- code : str
219+ code : str = Field ( min_length = 1 )
202220
203221
204222class LogoutResponse (BaseModel ):
0 commit comments