Просмотр исходного кода

Move the ip ban check on registration from serializer to API endpoint

Rafał Pitoń 7 лет назад
Родитель
Сommit
071a456a90

+ 6 - 1
misago/users/api/userendpoints/create.py

@@ -7,11 +7,12 @@ from django.utils.translation import ugettext as _
 from django.views.decorators.csrf import csrf_protect
 
 from misago.conf import settings
+from misago.core.exceptions import Banned
 from misago.core.mail import mail_user
+from misago.users.bans import get_ip_ban
 from misago.users.serializers import RegisterUserSerializer
 from misago.users.tokens import make_activation_token
 
-
 UserModel = get_user_model()
 
 
@@ -20,6 +21,10 @@ def create_endpoint(request):
     if settings.account_activation == 'closed':
         raise PermissionDenied(_("New users registrations are currently closed."))
 
+    ban = get_ip_ban(request.user_ip, registration_only=True)
+    if ban:
+        raise Banned(ban)
+
     serializer = RegisterUserSerializer(
         data=request.data,
         context={'request': request},

+ 1 - 8
misago/users/serializers/register.py

@@ -7,7 +7,7 @@ from django.utils import six
 from django.utils.translation import ugettext as _
 
 from misago.users import captcha, validators
-from misago.users.bans import get_email_ban, get_ip_ban, get_username_ban
+from misago.users.bans import get_email_ban, get_username_ban
 
 
 UserModel = get_user_model()
@@ -48,13 +48,6 @@ class RegisterUserSerializer(serializers.Serializer):
     def validate(self, data):
         request = self.context['request']
 
-        ban = get_ip_ban(request.user_ip, registration_only=True)
-        if ban:
-            if ban.user_message:
-                raise ValidationError(ban.user_message)
-            else:
-                raise ValidationError(_("New registrations from this IP address are not allowed."))
-
         self._added_errors = {}
 
         try:

+ 6 - 2
misago/users/tests/test_user_create_api.py

@@ -82,10 +82,14 @@ class UserCreateTests(UserTestCase):
             },
         )
 
-        self.assertEqual(response.status_code, 400)
+        self.assertEqual(response.status_code, 403)
         self.assertEqual(
             response.json(), {
-                'non_field_errors': ["You can't register account like this."],
+                'detail': {
+                    'html': '<p>You can&#39;t register account like this.</p>',
+                    'plain': "You can't register account like this.",
+                },
+                'expires_on': None,
             }
         )