* feat: change user email * chore: optimised the logic * feat: add email change functionality and related modals in profile form * refactor: format checkEmail method for improved readability * chore: added rate limit exceeded validation * feat: implement change email modal with localization support - Added translation support for the change email modal, including titles, descriptions, and error messages. - Integrated the useTranslation hook for dynamic text rendering. - Updated form validation messages to utilize localized strings. - Enhanced user feedback with localized success and error toast messages. - Updated button labels and placeholders to reflect localization changes. * chore: added extra validation in cache key * fix: format files --------- Co-authored-by: b-saikrishnakanth <bsaikrishnakanth97@gmail.com> Co-authored-by: sriramveeraghanta <veeraghanta.sriram@gmail.com>
43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
# Third party imports
|
|
from rest_framework.throttling import AnonRateThrottle, UserRateThrottle
|
|
from rest_framework import status
|
|
from rest_framework.response import Response
|
|
|
|
# Module imports
|
|
from plane.authentication.adapter.error import (
|
|
AuthenticationException,
|
|
AUTHENTICATION_ERROR_CODES,
|
|
)
|
|
|
|
|
|
class AuthenticationThrottle(AnonRateThrottle):
|
|
rate = "30/minute"
|
|
scope = "authentication"
|
|
|
|
def throttle_failure_view(self, request, *args, **kwargs):
|
|
try:
|
|
raise AuthenticationException(
|
|
error_code=AUTHENTICATION_ERROR_CODES["RATE_LIMIT_EXCEEDED"],
|
|
error_message="RATE_LIMIT_EXCEEDED",
|
|
)
|
|
except AuthenticationException as e:
|
|
return Response(e.get_error_dict(), status=status.HTTP_429_TOO_MANY_REQUESTS)
|
|
|
|
|
|
class EmailVerificationThrottle(UserRateThrottle):
|
|
"""
|
|
Throttle for email verification code generation.
|
|
Limits to 3 requests per hour per user to prevent abuse.
|
|
"""
|
|
|
|
rate = "3/hour"
|
|
scope = "email_verification"
|
|
|
|
def throttle_failure_view(self, request, *args, **kwargs):
|
|
try:
|
|
raise AuthenticationException(
|
|
error_code=AUTHENTICATION_ERROR_CODES["RATE_LIMIT_EXCEEDED"],
|
|
error_message="RATE_LIMIT_EXCEEDED",
|
|
)
|
|
except AuthenticationException as e:
|
|
return Response(e.get_error_dict(), status=status.HTTP_429_TOO_MANY_REQUESTS)
|