Browse Source

Fix #1067: absoluteurl changing already-absolute urls

rafalp 6 years ago
parent
commit
7db8234b6c

+ 6 - 2
misago/core/templatetags/misago_absoluteurl.py

@@ -1,5 +1,5 @@
 from django import template
-from django.urls import reverse
+from django.urls import NoReverseMatch, reverse
 
 from misago.conf import settings
 
@@ -13,7 +13,11 @@ def absoluteurl(url_or_name, *args, **kwargs):
 
     absolute_url_prefix = settings.MISAGO_ADDRESS.rstrip('/')
 
-    if '/' not in url_or_name:
+    try:
         url_or_name = reverse(url_or_name, args=args, kwargs=kwargs)
+    except NoReverseMatch:
+        # don't use URLValidator because its too explicit
+        if not url_or_name.startswith('/'):
+            return url_or_name
     
     return u'{}{}'.format(absolute_url_prefix, url_or_name)

+ 8 - 1
misago/core/tests/test_templatetags.py

@@ -25,11 +25,18 @@ class AbsoluteUrlTests(TestCase):
 
     
     @override_settings(MISAGO_ADDRESS=TEST_ADDRESS)
-    def test_rprefix_url_name(self):
+    def test_prefix_url_name(self):
         """template tag reverses url name and prefixes it"""
         result = absoluteurl('misago:index')
         self.assertEqual(result, TEST_ADDRESS)
 
+    @override_settings(MISAGO_ADDRESS=TEST_ADDRESS)
+    def test_dont_change_absolute_url(self):
+        """template tag doesn't change already absolute urls"""
+        absolute_url = "https://github.com/rafalp/Misago/issues/1067"
+        result = absoluteurl(absolute_url)
+        self.assertEqual(result, absolute_url)
+
 
 class CaptureTests(TestCase):
     def setUp(self):