From b3d5dc6932bf896a909e9871d508654494b34563 Mon Sep 17 00:00:00 2001 From: Nick Pope Date: Sun, 3 May 2015 23:08:28 +0100 Subject: Fixed #24834 -- Fixed get_current_site() when Host header contains port. When the Host header contains a port, looking up the Site record fails as the host will never match the domain. --- tests/sites_tests/tests.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'tests/sites_tests') diff --git a/tests/sites_tests/tests.py b/tests/sites_tests/tests.py index 563ee6a681..7d5dcf10bb 100644 --- a/tests/sites_tests/tests.py +++ b/tests/sites_tests/tests.py @@ -86,6 +86,41 @@ class SitesFrameworkTests(TestCase): site = get_current_site(request) self.assertEqual(site.name, "example.com") + @override_settings(SITE_ID='', ALLOWED_HOSTS=['example.com', 'example.net']) + def test_get_current_site_no_site_id_and_handle_port_fallback(self): + request = HttpRequest() + s1 = self.site + s2 = Site.objects.create(domain='example.com:80', name='example.com:80') + + # Host header without port + request.META = {'HTTP_HOST': 'example.com'} + site = get_current_site(request) + self.assertEqual(site, s1) + + # Host header with port - match, no fallback without port + request.META = {'HTTP_HOST': 'example.com:80'} + site = get_current_site(request) + self.assertEqual(site, s2) + + # Host header with port - no match, fallback without port + request.META = {'HTTP_HOST': 'example.com:81'} + site = get_current_site(request) + self.assertEqual(site, s1) + + # Host header with non-matching domain + request.META = {'HTTP_HOST': 'example.net'} + self.assertRaises(ObjectDoesNotExist, get_current_site, request) + + # Ensure domain for RequestSite always matches host header + with self.modify_settings(INSTALLED_APPS={'remove': 'django.contrib.sites'}): + request.META = {'HTTP_HOST': 'example.com'} + site = get_current_site(request) + self.assertEqual(site.name, 'example.com') + + request.META = {'HTTP_HOST': 'example.com:80'} + site = get_current_site(request) + self.assertEqual(site.name, 'example.com:80') + def test_domain_name_with_whitespaces(self): # Regression for #17320 # Domain names are not allowed contain whitespace characters -- cgit v1.2.1