Browse Source

rewrite ember-cli host in emails too

Rafał Pitoń 10 years ago
parent
commit
282bb49c02

+ 8 - 3
misago/core/context_processors.py

@@ -1,4 +1,4 @@
-from django.conf import settings
+from misago.core.embercli import is_ember_cli_request, get_embercli_host
 
 
 
 
 def site_address(request):
 def site_address(request):
@@ -9,10 +9,15 @@ def site_address(request):
         site_protocol = 'http'
         site_protocol = 'http'
         address_template = 'http://%s'
         address_template = 'http://%s'
 
 
+    if is_ember_cli_request(request):
+        host = get_embercli_host()
+    else:
+        host = request.get_host()
+
     return {
     return {
         'SITE_PROTOCOL': site_protocol,
         'SITE_PROTOCOL': site_protocol,
-        'SITE_HOST': request.get_host(),
-        'SITE_ADDRESS': address_template % request.get_host()
+        'SITE_HOST': host,
+        'SITE_ADDRESS': address_template % host
     }
     }
 
 
 
 

+ 9 - 0
misago/core/embercli.py

@@ -1,4 +1,5 @@
 from django.conf import settings
 from django.conf import settings
+from django.utils.six.moves.urllib.parse import urlparse
 
 
 
 
 def is_ember_cli_request(request):
 def is_ember_cli_request(request):
@@ -7,3 +8,11 @@ def is_ember_cli_request(request):
         return http_origin.startswith(settings.MISAGO_EMBER_CLI_ORIGIN)
         return http_origin.startswith(settings.MISAGO_EMBER_CLI_ORIGIN)
     else:
     else:
         return False
         return False
+
+
+def get_embercli_host():
+    if settings.MISAGO_EMBER_CLI_ORIGIN:
+        parsed_url = urlparse(settings.MISAGO_EMBER_CLI_ORIGIN)
+        return '%s:%s' % (parsed_url.hostname, parsed_url.port)
+    else:
+        return None

+ 9 - 1
misago/core/tests/test_embercli.py

@@ -1,7 +1,7 @@
 from django.conf import settings
 from django.conf import settings
 from django.test import TestCase
 from django.test import TestCase
 
 
-from misago.core.embercli import is_ember_cli_request
+from misago.core.embercli import is_ember_cli_request, get_embercli_host
 
 
 
 
 class MockRequest(object):
 class MockRequest(object):
@@ -33,3 +33,11 @@ class EmberCLITests(TestCase):
 
 
             invalid_request = MockRequest('http://somewhere.com/page.html')
             invalid_request = MockRequest('http://somewhere.com/page.html')
             self.assertFalse(is_ember_cli_request(invalid_request))
             self.assertFalse(is_ember_cli_request(invalid_request))
+
+    def test_get_embercli_host(self):
+        """get_embercli_host returns ember-cli host"""
+        with self.settings(MISAGO_EMBER_CLI_ORIGIN='http://somewhere:1234'):
+            self.assertEqual(get_embercli_host(), 'somewhere:1234')
+
+        with self.settings(MISAGO_EMBER_CLI_ORIGIN=''):
+            self.assertIsNone(get_embercli_host())

+ 3 - 4
misago/users/views/auth.py

@@ -8,7 +8,7 @@ from django.views.decorators.cache import never_cache
 from django.views.decorators.csrf import csrf_protect
 from django.views.decorators.csrf import csrf_protect
 from django.views.decorators.debug import sensitive_post_parameters
 from django.views.decorators.debug import sensitive_post_parameters
 
 
-from misago.core.embercli import is_ember_cli_request
+from misago.core.embercli import is_ember_cli_request, get_embercli_host
 
 
 
 
 @sensitive_post_parameters()
 @sensitive_post_parameters()
@@ -22,14 +22,13 @@ def login(request):
                 url=redirect_to, host=request.get_host())
                 url=redirect_to, host=request.get_host())
 
 
             if not is_redirect_safe and is_ember_cli_request(request):
             if not is_redirect_safe and is_ember_cli_request(request):
-                parsed_url = urlparse(settings.MISAGO_EMBER_CLI_ORIGIN)
-                trusted_host = '%s:%s' % (parsed_url.hostname, parsed_url.port)
                 is_redirect_safe = is_safe_url(
                 is_redirect_safe = is_safe_url(
-                    url=redirect_to, host=trusted_host)
+                    url=redirect_to, host=get_embercli_host())
 
 
             if is_redirect_safe:
             if is_redirect_safe:
                 redirect_to_path = urlparse(redirect_to).path
                 redirect_to_path = urlparse(redirect_to).path
                 return redirect(redirect_to_path)
                 return redirect(redirect_to_path)
+
     return redirect(settings.LOGIN_REDIRECT_URL)
     return redirect(settings.LOGIN_REDIRECT_URL)