Browse Source

removed deflectors decorators, updated tests suite for deny decorators

Rafał Pitoń 9 years ago
parent
commit
682e045727

+ 6 - 29
misago/users/decorators.py

@@ -5,6 +5,7 @@ from django.utils.translation import gettext as _
 from misago.core.exceptions import Banned
 
 from misago.users.bans import get_request_ip_ban
+from misago.users.models import Ban, BAN_IP
 
 
 def deny_authenticated(f):
@@ -31,35 +32,11 @@ def deny_banned_ips(f):
     def decorator(request, *args, **kwargs):
         ban = get_request_ip_ban(request)
         if ban:
-            raise Banned(ban)
-        else:
-            return f(request, *args, **kwargs)
-    return decorator
-
-
-def deflect_authenticated(f):
-    def decorator(request, *args, **kwargs):
-        if request.user.is_authenticated():
-            return redirect('misago:index')
-        else:
-            return f(request, *args, **kwargs)
-    return decorator
-
-
-def deflect_guests(f):
-    def decorator(request, *args, **kwargs):
-        if request.user.is_anonymous():
-            return redirect('misago:index')
-        else:
-            return f(request, *args, **kwargs)
-    return decorator
-
-
-def deflect_banned_ips(f):
-    def decorator(request, *args, **kwargs):
-        ban = get_request_ip_ban(request)
-        if ban:
-            return redirect('misago:index')
+            hydrated_ban = Ban(
+                check_type=BAN_IP,
+                user_message=ban['message'],
+                expires_on=ban['expires_on'])
+            raise Banned(hydrated_ban)
         else:
             return f(request, *args, **kwargs)
     return decorator

+ 29 - 22
misago/users/tests/test_decorators.py

@@ -1,48 +1,55 @@
 from django.core.urlresolvers import reverse
+
+from misago.users.models import Ban, BAN_IP
 from misago.users.testutils import UserTestCase
 
 
 class DenyAuthenticatedTests(UserTestCase):
     def test_success(self):
         """deny_authenticated decorator allowed guest request"""
-        response = self.client.post('/api/auth/')
-        self.assertEqual(response.status_code, 400)
+        response = self.client.post(reverse('misago:request_activation'))
+        self.assertEqual(response.status_code, 200)
 
     def test_fail(self):
         """deny_authenticated decorator denied authenticated request"""
         self.login_user(self.get_authenticated_user())
 
-        response = self.client.post('/api/auth/')
+        response = self.client.post(reverse('misago:request_activation'))
         self.assertEqual(response.status_code, 403)
 
 
-class DeflectAuthenticatedTests(UserTestCase):
+class DenyGuestsTests(UserTestCase):
     def test_success(self):
-        """deflect_authenticated decorator allowed guest request"""
-        response = self.client.get(reverse('misago:forgotten_password'))
-        self.assertEqual(response.status_code, 200)
-
-    def test_fail(self):
-        """deflect_authenticated decorator deflected authenticated request"""
+        """deny_guests decorator allowed authenticated request"""
         self.login_user(self.get_authenticated_user())
 
-        response = self.client.get(reverse('misago:forgotten_password'))
+        response = self.client.post(reverse('misago:options'))
         self.assertEqual(response.status_code, 302)
 
+    def test_fail(self):
+        """deny_guests decorator blocked guest request"""
+        response = self.client.post(reverse('misago:options'))
+        self.assertEqual(response.status_code, 403)
+
 
-class DeflectGuestsTests(UserTestCase):
+class DenyBannedIPTests(UserTestCase):
     def test_success(self):
-        """deflect_guests decorator allowed authenticated request"""
-        self.login_user(self.get_authenticated_user())
+        """deny_banned_ips decorator allowed unbanned request"""
+        Ban.objects.create(
+            check_type=BAN_IP,
+            banned_value='83.*',
+            user_message='Ya got banned!')
 
-        response = self.client.get(
-            reverse('misago:options_form',
-                    kwargs={'form_name': 'forum-options'}))
+        response = self.client.post(reverse('misago:request_activation'))
         self.assertEqual(response.status_code, 200)
 
     def test_fail(self):
-        """deflect_guests decorator deflected authenticated request"""
-        response = self.client.get(
-            reverse('misago:options_form',
-                    kwargs={'form_name': 'forum-options'}))
-        self.assertEqual(response.status_code, 302)
+        """deny_banned_ips decorator denied banned request"""
+        Ban.objects.create(
+            check_type=BAN_IP,
+            banned_value='127.*',
+            user_message='Ya got banned!')
+
+        response = self.client.post(reverse('misago:request_activation'))
+        self.assertEqual(response.status_code, 403)
+        self.assertIn('<p>Ya got banned!</p>', response.content)

+ 3 - 6
misago/users/views/forgottenpassword.py

@@ -1,12 +1,9 @@
 from django.utils.translation import ugettext as _
-from django.views.decorators.debug import sensitive_post_parameters
+from misago.users.decorators import deny_authenticated, deny_banned_ips
 
-from misago.users.decorators import deflect_authenticated, deflect_banned_ips
 
-
-@sensitive_post_parameters()
-@deflect_authenticated
-@deflect_banned_ips
+@deny_authenticated
+@deny_banned_ips
 def forgotten_password_noscript(request, user_id=None, token=None):
     return noscript(request, **{
         'title': _("Change forgotten password"),

+ 4 - 4
misago/users/views/options.py

@@ -1,15 +1,15 @@
 from django.shortcuts import redirect, render
 from django.utils.translation import ugettext as _
 
-from misago.users.decorators import deflect_guests
+from misago.users.decorators import deny_guests
 
 
-@deflect_guests
+@deny_guests
 def index(request):
-    return redirect('misago:options_form', form_name='forum-options')
+    return redirect('misago:index')
 
 
-@deflect_guests
+@deny_guests
 def form(request, form_name, token=None):
     return noscript(request, **{
         'title': _("Options"),