diff --git a/pyconbalkan/conference/middleware.py b/pyconbalkan/conference/middleware.py new file mode 100644 index 00000000..6566bc6b --- /dev/null +++ b/pyconbalkan/conference/middleware.py @@ -0,0 +1,49 @@ +from urllib.parse import urljoin + +from django.conf import settings +from django.http import HttpResponseRedirect + +from pyconbalkan.conference.models import Conference + + +class ConferenceSelectionMiddleware: + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + """ + Code to be executed for each request before + the view (and later middleware) are called. + Domain format : 2019.pyconbalkan.com + + Every request will have an atribute `conference` in it + `conference` is the conference.models.Conference object for the + respective year fetched from it's domain. + """ + + domain = request.META.get('HTTP_HOST', 'localhost') + try: + domain_year = int(domain.split('.')[0]) + q = { + "year": domain_year + } + if not request.user.is_superuser: + q['active'] = True + + request.conference = Conference.objects.get(**q) + except (Conference.DoesNotExist, ValueError): + request.conference = Conference.objects.filter(active=True).first() + + conference_domain = "{}.{}".format( + request.conference.year, + settings.META_SITE_DOMAIN + ) + + if settings.DEBUG is False and conference_domain != request.META['HTTP_HOST']: + return HttpResponseRedirect( + urljoin( + "{}://{}".format(settings.META_SITE_PROTOCOL, conference_domain + ), "/") + ) + + return self.get_response(request) diff --git a/pyconbalkan/core/context_processors.py b/pyconbalkan/core/context_processors.py deleted file mode 100644 index aac64d4f..00000000 --- a/pyconbalkan/core/context_processors.py +++ /dev/null @@ -1,9 +0,0 @@ -from pyconbalkan.conference.models import Conference - - -def conference(request): - conference = Conference.objects.filter(active=True) - - return { - 'conference': conference.first() if conference else None - } \ No newline at end of file diff --git a/pyconbalkan/core/templates/base.html b/pyconbalkan/core/templates/base.html index e884ae73..09a84458 100644 --- a/pyconbalkan/core/templates/base.html +++ b/pyconbalkan/core/templates/base.html @@ -7,7 +7,7 @@
{% include "meta/meta.html" %} -