Rafał Pitoń 10 лет назад
Родитель
Сommit
a1f5361ead

+ 60 - 1
misago/core/tests/test_utils.py

@@ -3,7 +3,8 @@ from django.core.urlresolvers import reverse
 from django.test import TestCase
 from django.test.client import RequestFactory
 
-from misago.core.utils import is_request_to_misago, slugify, time_amount
+from misago.core.utils import (clean_return_path, is_request_to_misago,
+                               slugify, time_amount)
 
 
 VALID_PATHS = (
@@ -56,6 +57,64 @@ class SlugifyTests(TestCase):
             self.assertEqual(slugify(original), slug)
 
 
+class MockRequest(object):
+    scheme = 'http'
+
+    def __init__(self, method, meta=None, post=None):
+        self.method = method
+        self.META = meta or {}
+        self.POST = post or {}
+
+
+class CleanReturnPathTests(TestCase):
+    def test_get_request(self):
+        """clean_return_path works for GET requests"""
+        bad_request = MockRequest('GET', {
+            'HTTP_REFERER': 'http://cookies.com',
+            'HTTP_HOST': 'misago-project.org'
+        })
+        self.assertIsNone(clean_return_path(bad_request))
+
+        bad_request = MockRequest('GET', {
+            'HTTP_REFERER': 'https://misago-project.org/',
+            'HTTP_HOST': 'misago-project.org/'
+        })
+        self.assertIsNone(clean_return_path(bad_request))
+
+        bad_request = MockRequest('GET', {
+            'HTTP_REFERER': 'https://misago-project.org/',
+            'HTTP_HOST': 'misago-project.org/assadsa/'
+        })
+        self.assertIsNone(clean_return_path(bad_request))
+
+        ok_request = MockRequest('GET', {
+            'HTTP_REFERER': 'http://misago-project.org/',
+            'HTTP_HOST': 'misago-project.org/'
+        })
+        self.assertEqual(clean_return_path(ok_request), '/')
+
+        ok_request = MockRequest('GET', {
+            'HTTP_REFERER': 'http://misago-project.org/',
+            'HTTP_HOST': 'misago-project.org/register/'
+        })
+        self.assertEqual(clean_return_path(ok_request), '/register/')
+
+
+    def test_post_request(self):
+        """clean_return_path works for POST requests"""
+        bad_request = MockRequest('POST', {
+            'HTTP_REFERER': 'http://misago-project.org/',
+            'HTTP_HOST': 'misago-project.org/'
+        }, {'return_path': '/sdasdsa/'})
+        self.assertIsNone(clean_return_path(bad_request))
+
+        ok_request = MockRequest('POST', {
+            'HTTP_REFERER': 'http://misago-project.org/',
+            'HTTP_HOST': 'misago-project.org/'
+        }, {'return_path': '/register/'})
+        self.assertEqual(clean_return_path(ok_request), '/register/')
+
+
 class TimeAmountTests(TestCase):
     def test_single_units(self):
         """time_amount return correct amount of time for 1 precision"""

+ 4 - 5
misago/core/utils.py

@@ -20,11 +20,10 @@ def slugify(string):
 Return path utility
 """
 def clean_return_path(request):
-    post_return_path = _get_return_path_from_post(request)
-    if not post_return_path:
-        return _get_return_path_from_referer(request)
+    if request.method == 'POST':
+        return _get_return_path_from_post(request)
     else:
-        return post_return_path
+        return _get_return_path_from_referer(request)
 
 
 def _get_return_path_from_post(request):
@@ -50,7 +49,7 @@ def _get_return_path_from_referer(request):
         referer = referer[len(request.scheme) + 3:]
         if not referer.startswith(request.META['HTTP_HOST']):
             raise ValueError()
-        referer = referer[len(request.META['HTTP_HOST']):]
+        referer = referer[len(request.META['HTTP_HOST'].rstrip('/')):]
         if not referer.startswith('/'):
             raise ValueError()
         resolve(referer)

+ 0 - 9
misago/users/tests/test_warningadmin_views.py

@@ -31,7 +31,6 @@ class WarningsAdminViewsTests(AdminTestCase):
             reverse('misago:admin:users:warnings:new'),
             data={
                 'name': 'Test Level',
-                'description': 'Lorem ipsum dolor met',
                 'length_in_minutes': 60,
                 'restricts_posting_replies': '1',
                 'restricts_posting_threads': '1',
@@ -48,7 +47,6 @@ class WarningsAdminViewsTests(AdminTestCase):
             reverse('misago:admin:users:warnings:new'),
             data={
                 'name': 'Test Level',
-                'description': 'Lorem ipsum dolor met',
                 'length_in_minutes': 60,
                 'restricts_posting_replies': '1',
                 'restricts_posting_threads': '1',
@@ -61,14 +59,12 @@ class WarningsAdminViewsTests(AdminTestCase):
                     kwargs={'warning_id': test_level.pk}))
         self.assertEqual(response.status_code, 200)
         self.assertIn(test_level.name, response.content)
-        self.assertIn(test_level.description, response.content)
 
         response = self.client.post(
             reverse('misago:admin:users:warnings:edit',
                     kwargs={'warning_id': test_level.pk}),
             data={
                 'name': 'Edited Level',
-                'description': 'Lorem ipsum dolor met',
                 'length_in_minutes': 5,
                 'restricts_posting_replies': '0',
                 'restricts_posting_threads': '0',
@@ -89,7 +85,6 @@ class WarningsAdminViewsTests(AdminTestCase):
             reverse('misago:admin:users:warnings:new'),
             data={
                 'name': 'Level 1',
-                'description': 'Lorem ipsum dolor met',
                 'length_in_minutes': 5,
                 'restricts_posting_replies': '0',
                 'restricts_posting_threads': '0',
@@ -98,7 +93,6 @@ class WarningsAdminViewsTests(AdminTestCase):
             reverse('misago:admin:users:warnings:new'),
             data={
                 'name': 'Level 2',
-                'description': 'Lorem ipsum dolor met',
                 'length_in_minutes': 5,
                 'restricts_posting_replies': '0',
                 'restricts_posting_threads': '0',
@@ -123,7 +117,6 @@ class WarningsAdminViewsTests(AdminTestCase):
             reverse('misago:admin:users:warnings:new'),
             data={
                 'name': 'Level 1',
-                'description': 'Lorem ipsum dolor met',
                 'length_in_minutes': 5,
                 'restricts_posting_replies': '0',
                 'restricts_posting_threads': '0',
@@ -132,7 +125,6 @@ class WarningsAdminViewsTests(AdminTestCase):
             reverse('misago:admin:users:warnings:new'),
             data={
                 'name': 'Level 2',
-                'description': 'Lorem ipsum dolor met',
                 'length_in_minutes': 5,
                 'restricts_posting_replies': '0',
                 'restricts_posting_threads': '0',
@@ -157,7 +149,6 @@ class WarningsAdminViewsTests(AdminTestCase):
             reverse('misago:admin:users:warnings:new'),
             data={
                 'name': 'Test Level',
-                'description': 'Lorem ipsum dolor met',
                 'length_in_minutes': 60,
                 'restricts_posting_replies': '1',
                 'restricts_posting_threads': '1',