44from pymongo .errors import DuplicateKeyError
55
66from .limiter import limiter , rate_limit_key_for_request
7+ from .limits import Limits
78from utils .logger import get_logger
89from utils .auth_utils import (
910 verify_password ,
4243
4344
4445@auth .route ("/auth/login" , methods = ["POST" ])
45- @limiter .limit ("5/minute" )
46- @limiter .limit ("50/day" )
46+ @limiter .limit (Limits .LOGIN )
4747def login ():
4848 body = request .get_json (silent = True ) or {}
4949 email = (body .get ("email" ) or "" ).strip ().lower ()
@@ -76,7 +76,7 @@ def login():
7676
7777
7878@auth .route ("/auth/refresh" , methods = ["POST" ])
79- @limiter .limit ("20/minute" )
79+ @limiter .limit (Limits . TOKEN_REFRESH )
8080def refresh ():
8181 refresh_token = request .cookies .get ("refresh_token" )
8282 if not refresh_token :
@@ -122,7 +122,7 @@ def refresh():
122122
123123
124124@auth .route ("/auth/logout" , methods = ["POST" ])
125- @limiter .limit ("60/hour" )
125+ @limiter .limit (Limits . LOGOUT )
126126def logout ():
127127 user_id = getattr (g , "user_id" , None )
128128 if user_id :
@@ -136,7 +136,7 @@ def logout():
136136
137137@auth .route ("/auth/me" , methods = ["GET" ])
138138@requires_auth
139- @limiter .limit ("60/minute" , key_func = rate_limit_key_for_request )
139+ @limiter .limit (Limits . AUTH_READ , key_func = rate_limit_key_for_request )
140140def me ():
141141 user_id = g .user_id
142142 user = get_user_by_id (user_id )
@@ -146,8 +146,7 @@ def me():
146146
147147
148148@auth .route ("/auth/register" , methods = ["POST" ])
149- @limiter .limit ("5/minute" )
150- @limiter .limit ("50/day" )
149+ @limiter .limit (Limits .SIGNUP )
151150def register ():
152151 body = request .get_json (silent = True ) or {}
153152 email = (body .get ("email" ) or "" ).strip ().lower ()
@@ -157,7 +156,7 @@ def register():
157156 return jsonify ({"error" : "email and password are required" }), 400
158157
159158 # Validate password with comprehensive checks
160- is_valid , missing_requirements = validate_password (password )
159+ is_valid , missing_requirements , _ = validate_password (password )
161160 if not is_valid :
162161 return jsonify (
163162 {
@@ -240,7 +239,7 @@ def register():
240239
241240@auth .route ("/auth/set-password" , methods = ["POST" ])
242241@requires_auth
243- @limiter .limit ("5/minute" )
242+ @limiter .limit (Limits . SET_PASSWORD )
244243def set_password ():
245244 """Set password for OAuth-only users"""
246245 user = get_user_by_id (g .user_id )
@@ -257,7 +256,7 @@ def set_password():
257256 return jsonify ({"error" : "password is required" }), 400
258257
259258 # Validate password with comprehensive checks
260- is_valid , missing_requirements = validate_password (password )
259+ is_valid , missing_requirements , _ = validate_password (password )
261260 if not is_valid :
262261 return jsonify (
263262 {
@@ -312,7 +311,7 @@ def register_redirect():
312311
313312@auth .route ("/auth/verify" , methods = ["GET" ])
314313@requires_auth
315- @limiter .limit ("60/minute" , key_func = rate_limit_key_for_request )
314+ @limiter .limit (Limits . AUTH_READ , key_func = rate_limit_key_for_request )
316315def verify_page ():
317316 """Email verification page"""
318317 user = get_user_by_id (g .user_id )
@@ -328,7 +327,7 @@ def verify_page():
328327
329328@auth .route ("/auth/send-verification" , methods = ["POST" ])
330329@requires_auth
331- @limiter .limit ("3/hour" , key_func = rate_limit_key_for_request )
330+ @limiter .limit (Limits . RESEND_VERIFICATION , key_func = rate_limit_key_for_request )
332331def send_verification_email ():
333332 """Send email verification OTP to authenticated user"""
334333 user = get_user_by_id (g .user_id )
@@ -379,7 +378,7 @@ def send_verification_email():
379378
380379@auth .route ("/auth/verify-email" , methods = ["POST" ])
381380@requires_auth
382- @limiter .limit ("10/hour" , key_func = rate_limit_key_for_request )
381+ @limiter .limit (Limits . EMAIL_VERIFY , key_func = rate_limit_key_for_request )
383382def verify_email ():
384383 """Verify email using OTP code"""
385384 user = get_user_by_id (g .user_id )
@@ -457,7 +456,7 @@ def verify_email():
457456
458457
459458@auth .route ("/auth/request-password-reset" , methods = ["POST" ])
460- @limiter .limit ("3/hour" )
459+ @limiter .limit (Limits . PASSWORD_RESET_REQUEST )
461460def request_password_reset ():
462461 """Request password reset OTP"""
463462 body = request .get_json (silent = True ) or {}
@@ -543,7 +542,7 @@ def request_password_reset():
543542
544543
545544@auth .route ("/auth/reset-password" , methods = ["POST" ])
546- @limiter .limit ("5/hour" )
545+ @limiter .limit (Limits . PASSWORD_RESET_CONFIRM )
547546def reset_password ():
548547 """Reset password using OTP code"""
549548 body = request .get_json (silent = True ) or {}
@@ -565,7 +564,7 @@ def reset_password():
565564 user_id = str (user ["_id" ])
566565
567566 # Validate new password
568- is_valid , missing_requirements = validate_password (new_password )
567+ is_valid , missing_requirements , _ = validate_password (new_password )
569568 if not is_valid :
570569 return jsonify (
571570 {
0 commit comments