From eb05dad2b8e25424db06d2d041c314261ce80925 Mon Sep 17 00:00:00 2001 From: Vishvajit Pathak Date: Sun, 6 Jan 2019 15:49:12 +0530 Subject: [PATCH 1/8] [middleware] Removed unused imports --- pyconbalkan/news/views.py | 2 -- pyconbalkan/organizers/views.py | 1 - 2 files changed, 3 deletions(-) diff --git a/pyconbalkan/news/views.py b/pyconbalkan/news/views.py index ba77eb07..48a99c0f 100644 --- a/pyconbalkan/news/views.py +++ b/pyconbalkan/news/views.py @@ -4,10 +4,8 @@ from meta.views import Meta from rest_framework import viewsets -from pyconbalkan.conference.models import Conference from pyconbalkan.news.models import Post from pyconbalkan.news.serializers import PostSerializer -from pyconbalkan.organizers.models import Volunteer class PostViewSet(viewsets.ModelViewSet): diff --git a/pyconbalkan/organizers/views.py b/pyconbalkan/organizers/views.py index 08de2969..58f82a82 100644 --- a/pyconbalkan/organizers/views.py +++ b/pyconbalkan/organizers/views.py @@ -1,7 +1,6 @@ from django.shortcuts import render, get_object_or_404 from rest_framework import viewsets -from pyconbalkan.conference.models import Conference from pyconbalkan.organizers.forms import VolunteerCreateForm from pyconbalkan.organizers.models import Volunteer from pyconbalkan.organizers.serializers import VolunteerSerializer From ae6ddf557bd69fed457ad382acdb815143ea82b8 Mon Sep 17 00:00:00 2001 From: Vishvajit Pathak Date: Sun, 6 Jan 2019 15:49:43 +0530 Subject: [PATCH 2/8] [middleware] Added ConferenceSelectionMiddleware in settings --- pyconbalkan/settings.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyconbalkan/settings.py b/pyconbalkan/settings.py index c0c2c49e..7d1d27af 100644 --- a/pyconbalkan/settings.py +++ b/pyconbalkan/settings.py @@ -67,6 +67,10 @@ ] MIDDLEWARE = [ + # Custom middlewares + 'pyconbalkan.conference.middleware.ConferenceSelectionMiddleware', + + # Django middlewares 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', @@ -74,6 +78,7 @@ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + ] ROOT_URLCONF = 'pyconbalkan.urls' From 2119578c723b146e80c0679ad73c9f3a20f1fba8 Mon Sep 17 00:00:00 2001 From: Vishvajit Pathak Date: Sun, 6 Jan 2019 15:50:14 +0530 Subject: [PATCH 3/8] [middleware] Added middleware --- pyconbalkan/conference/middleware.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 pyconbalkan/conference/middleware.py diff --git a/pyconbalkan/conference/middleware.py b/pyconbalkan/conference/middleware.py new file mode 100644 index 00000000..24e39517 --- /dev/null +++ b/pyconbalkan/conference/middleware.py @@ -0,0 +1,20 @@ +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 + domain = request.META['HTTP_HOST'] + conference = Conference.objects.get(year=domain.split('.')[0]) + # 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 + request.conference = conference + response = self.get_response(request) + return response \ No newline at end of file From fe22749b42166c0fb0404196f9120fe4d6166729 Mon Sep 17 00:00:00 2001 From: Vishvajit Pathak Date: Sun, 6 Jan 2019 15:50:40 +0530 Subject: [PATCH 4/8] [middleware] Added changes in views which were using conference objects --- pyconbalkan/core/views.py | 4 ++-- pyconbalkan/timetable/views.py | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/pyconbalkan/core/views.py b/pyconbalkan/core/views.py index 3656c67f..3ed5c032 100644 --- a/pyconbalkan/core/views.py +++ b/pyconbalkan/core/views.py @@ -6,7 +6,7 @@ def home(request): - conference = Conference.objects.filter(active=True) + conference = request.conference count_down = CountDown.objects.filter(active=True) keynotes = Speaker.objects.filter(active=True, keynote=True).order_by('full_name') @@ -27,6 +27,6 @@ def home(request): 'partners': partners, 'count_down': count_down.first() if count_down else None, 'mission_statement': mission_statement.first() if mission_statement else None, - 'meta': conference.first().as_meta(), + 'meta': conference.as_meta(), } return render(request, 'home.html', context) diff --git a/pyconbalkan/timetable/views.py b/pyconbalkan/timetable/views.py index 900164c6..64a1de16 100644 --- a/pyconbalkan/timetable/views.py +++ b/pyconbalkan/timetable/views.py @@ -13,9 +13,10 @@ class TimetableViewSet(viewsets.ModelViewSet): def timetable_pdf_view(request): - conference = Conference.objects.filter(active=True) - if conference and conference.first().timetable_pdf: - return redirect(conference.first().timetable_pdf.url) + + conference = request.conference + if conference and conference.timetable_pdf: + return redirect(conference.timetable_pdf.url) return redirect('/') From b858435d8734445ae295424d8e818165cd71e1ec Mon Sep 17 00:00:00 2001 From: Vishvajit Pathak Date: Sun, 6 Jan 2019 15:53:56 +0530 Subject: [PATCH 5/8] [middleware] PEP8 changes --- pyconbalkan/conference/middleware.py | 2 +- pyconbalkan/timetable/views.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/pyconbalkan/conference/middleware.py b/pyconbalkan/conference/middleware.py index 24e39517..3d91f53d 100644 --- a/pyconbalkan/conference/middleware.py +++ b/pyconbalkan/conference/middleware.py @@ -17,4 +17,4 @@ def __call__(self, request): # respective year fetched from it's domain request.conference = conference response = self.get_response(request) - return response \ No newline at end of file + return response diff --git a/pyconbalkan/timetable/views.py b/pyconbalkan/timetable/views.py index 64a1de16..336d91a3 100644 --- a/pyconbalkan/timetable/views.py +++ b/pyconbalkan/timetable/views.py @@ -13,7 +13,6 @@ class TimetableViewSet(viewsets.ModelViewSet): def timetable_pdf_view(request): - conference = request.conference if conference and conference.timetable_pdf: return redirect(conference.timetable_pdf.url) From 054546ae25cf7aab84852af8573235c63118afb9 Mon Sep 17 00:00:00 2001 From: Bojan Jovanovic Date: Tue, 15 Jan 2019 09:38:46 +0100 Subject: [PATCH 6/8] Started adding some logic to how conference should be decyphered --- pyconbalkan/conference/middleware.py | 24 +++++++++++++++++++++++- pyconbalkan/settings.py | 6 ++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/pyconbalkan/conference/middleware.py b/pyconbalkan/conference/middleware.py index 3d91f53d..28247665 100644 --- a/pyconbalkan/conference/middleware.py +++ b/pyconbalkan/conference/middleware.py @@ -1,3 +1,8 @@ +from urllib.parse import urljoin + +from django.conf import settings +from django.http import HttpResponseRedirect + from pyconbalkan.conference.models import Conference @@ -11,7 +16,24 @@ def __call__(self, request): # Domain format : 2019.pyconbalkan.com domain = request.META['HTTP_HOST'] - conference = Conference.objects.get(year=domain.split('.')[0]) + try: + domain_year = int(domain.split('.')[0]) + q = { + "year": domain_year + } + if not request.user.is_superuser: + q['active'] = True + + conference = Conference.objects.get(**q) + except (Conference.DoesNotExist, ValueError): + conference = Conference.objects.filter(active=True).first() + + conference_domain = conference.year + "." + settings.META_SITE_DOMAIN + if conference_domain != request.META['HTTP_HOST']: + return HttpResponseRedirect( + urljoin() + ) + # 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 diff --git a/pyconbalkan/settings.py b/pyconbalkan/settings.py index 7d1d27af..68ff4943 100644 --- a/pyconbalkan/settings.py +++ b/pyconbalkan/settings.py @@ -67,9 +67,6 @@ ] MIDDLEWARE = [ - # Custom middlewares - 'pyconbalkan.conference.middleware.ConferenceSelectionMiddleware', - # Django middlewares 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', @@ -78,7 +75,8 @@ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', - + # Custom middlewares + 'pyconbalkan.conference.middleware.ConferenceSelectionMiddleware', ] ROOT_URLCONF = 'pyconbalkan.urls' From 4cef4911e7217bcecede888fd11c8e14e5a45245 Mon Sep 17 00:00:00 2001 From: Bojan Jovanovic Date: Tue, 15 Jan 2019 09:43:48 +0100 Subject: [PATCH 7/8] Removed context_processor, and replaced fetching the conference from the request object --- pyconbalkan/core/context_processors.py | 9 -------- pyconbalkan/core/templates/base.html | 2 +- .../templates/includes/event_sidebar.html | 22 +++++++++---------- .../core/templates/includes/header.html | 2 +- pyconbalkan/settings.py | 1 - .../sponsors/templates/sponsoring.html | 4 ++-- 6 files changed, 15 insertions(+), 25 deletions(-) delete mode 100644 pyconbalkan/core/context_processors.py 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" %} - {{ conference.event }} {{ conference.name }} {{ conference.year }} + {{ request.conference.event }} {{ request.conference.name }} {{ request.conference.year }} diff --git a/pyconbalkan/core/templates/includes/event_sidebar.html b/pyconbalkan/core/templates/includes/event_sidebar.html index 8ec5265d..b3a69766 100644 --- a/pyconbalkan/core/templates/includes/event_sidebar.html +++ b/pyconbalkan/core/templates/includes/event_sidebar.html @@ -1,34 +1,34 @@ {% load static %}