forked from CGM_Public/pretix_original
Splitted URL configuration for main and subdomains
This commit is contained in:
13
src/pretix/multidomain/maindomain_urlconf.py
Normal file
13
src/pretix/multidomain/maindomain_urlconf.py
Normal file
@@ -0,0 +1,13 @@
|
||||
from django.conf.urls import include, url
|
||||
|
||||
from pretix.presale.urls import event_patterns, locale_patterns
|
||||
from pretix.urls import common_patterns
|
||||
|
||||
presale_patterns_main = [
|
||||
url(r'', include(locale_patterns + [
|
||||
url(r'^(?P<organizer>[^/]+)/(?P<event>[^/]+)/', include(event_patterns))
|
||||
], namespace='presale'))
|
||||
]
|
||||
|
||||
# The presale namespace comes last, because it contains a wildcard catch
|
||||
urlpatterns = common_patterns + presale_patterns_main
|
||||
@@ -5,6 +5,7 @@ from django.conf import settings
|
||||
from django.contrib.sessions.middleware import \
|
||||
SessionMiddleware as BaseSessionMiddleware
|
||||
from django.core.exceptions import DisallowedHost
|
||||
from django.core.urlresolvers import set_urlconf
|
||||
from django.http.request import split_domain_port
|
||||
from django.middleware.csrf import CsrfViewMiddleware as BaseCsrfMiddleware
|
||||
from django.utils.cache import patch_vary_headers
|
||||
@@ -37,13 +38,24 @@ class MultiDomainMiddleware:
|
||||
request.domain = kd
|
||||
except:
|
||||
if settings.DEBUG or domain in ('testserver', 'localhost') or domain == default_domain:
|
||||
return # TODO: Select main page
|
||||
raise DisallowedHost("Unknown host: %r" % host)
|
||||
request.urlconf = "pretix.multidomain.maindomain_urlconf"
|
||||
else:
|
||||
raise DisallowedHost("Unknown host: %r" % host)
|
||||
else:
|
||||
request.organizer = kd.organizer
|
||||
request.urlconf = "pretix.multidomain.subdomain_urlconf"
|
||||
else:
|
||||
raise DisallowedHost("Invalid HTTP_HOST header: %r." % host)
|
||||
|
||||
# We need to manually set the urlconf for the whole thread. Normally, Django's basic request
|
||||
# would do this for us, but we already need it in place for the other middlewares.
|
||||
set_urlconf(request.urlconf)
|
||||
|
||||
def process_response(self, request, response):
|
||||
if getattr(request, "urlconf", None):
|
||||
patch_vary_headers(response, ('Host',))
|
||||
return response
|
||||
|
||||
|
||||
class SessionMiddleware(BaseSessionMiddleware):
|
||||
def process_response(self, request, response):
|
||||
|
||||
14
src/pretix/multidomain/subdomain_urlconf.py
Normal file
14
src/pretix/multidomain/subdomain_urlconf.py
Normal file
@@ -0,0 +1,14 @@
|
||||
from django.conf.urls import include, url
|
||||
|
||||
from pretix.presale.urls import event_patterns, locale_patterns
|
||||
from pretix.urls import common_patterns
|
||||
|
||||
print(event_patterns)
|
||||
presale_patterns = [
|
||||
url(r'', include(locale_patterns + [
|
||||
url(r'^(?P<event>[^/]+)/', include(event_patterns))
|
||||
], namespace='presale'))
|
||||
]
|
||||
|
||||
# The presale namespace comes last, because it contains a wildcard catch
|
||||
urlpatterns = common_patterns + presale_patterns
|
||||
@@ -21,20 +21,23 @@ def eventreverse(event, name, kwargs=None):
|
||||
Works similar to django.core.urlresolvers.reverse but takes into account that some
|
||||
organizers might have their own (sub)domain instead of a subpath.
|
||||
"""
|
||||
from pretix.multidomain import subdomain_urlconf, maindomain_urlconf
|
||||
|
||||
kwargs = kwargs or {}
|
||||
kwargs['event'] = event.slug
|
||||
domain = get_domain(event)
|
||||
if domain:
|
||||
if 'organizer' in kwargs:
|
||||
del kwargs['organizer']
|
||||
path = reverse(name, kwargs=kwargs)
|
||||
|
||||
path = reverse(name, kwargs=kwargs, urlconf=subdomain_urlconf)
|
||||
siteurlsplit = urlsplit(settings.SITE_URL)
|
||||
if siteurlsplit.port and siteurlsplit.port not in (80, 443):
|
||||
domain = '%s:%d' % (domain, siteurlsplit.port)
|
||||
return urljoin('%s://%s' % (siteurlsplit.scheme, domain), path)
|
||||
|
||||
kwargs['organizer'] = event.organizer.slug
|
||||
return reverse(name, kwargs=kwargs)
|
||||
return reverse(name, kwargs=kwargs, urlconf=maindomain_urlconf)
|
||||
|
||||
|
||||
def build_absolute_uri(event, urlname, kwargs=None):
|
||||
|
||||
Reference in New Issue
Block a user