import logging from rest_framework.response import Response from rest_framework.permissions import IsAuthenticated from django.utils.translation import gettext as _ from pingcap_sso.api.base import Endpoint from pingcap_sso.forms import PhoneForm from pingcap_sso.models import SecurityCode from pingcap_sso.exceptions import RateLimitError logger = logging.getLogger(__name__) class SmsCodeEndpoint(Endpoint): permission_classes = (IsAuthenticated, ) def post(self, request, *args, **kwargs): if not request.META.get('HTTP_REFERER'): return Response(status=403) form = PhoneForm(data=request.data) if not form.is_valid(): return Response({ 'detail': _('params error'), 'errors': form.errors }, status=400) try: SecurityCode.send_code( form.cleaned_data['phone'], channel=SecurityCode.DELIVER_BY_PHONE) except RateLimitError: return Response({ 'detail': _('rate limit') }, status=429) else: return Response({'detail': _('success')})