diff --git a/photo21/middleware.py b/photo21/middleware.py deleted file mode 100644 index 29aa5d6..0000000 --- a/photo21/middleware.py +++ /dev/null @@ -1,27 +0,0 @@ -from django.http import HttpResponseRedirect -from django.conf import settings - -import re - - -class LoginRequiredMiddleware: - """ - If user is not accessing the site from an authorized IP, force - authentification. - """ - def __init__(self, get_response): - """Init middleware""" - self.get_response = get_response - self.whitelist_re = re.compile("^/accounts/.*$") - - def __call__(self, request): - """ - If user is not authenticated and external, redirect to login view - before calling the view. - """ - if not request.user.is_authenticated: - if not self.whitelist_re.match(request.path_info): - return HttpResponseRedirect(settings.LOGIN_URL) - - response = self.get_response(request) - return response diff --git a/photo21/settings.py b/photo21/settings.py index 5128667..5188f5c 100644 --- a/photo21/settings.py +++ b/photo21/settings.py @@ -77,7 +77,6 @@ MIDDLEWARE = [ 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.sites.middleware.CurrentSiteMiddleware', - 'photo21.middleware.LoginRequiredMiddleware', ] ROOT_URLCONF = 'photo21.urls' diff --git a/photo21/templates/base.html b/photo21/templates/base.html index 44af685..99248c7 100644 --- a/photo21/templates/base.html +++ b/photo21/templates/base.html @@ -37,7 +37,7 @@ SPDX-License-Identifier: GPL-3.0-or-later {% if perms.photologue.add_gallery %} {% endif %} diff --git a/photo21/urls.py b/photo21/urls.py index 3b6c278..530068a 100644 --- a/photo21/urls.py +++ b/photo21/urls.py @@ -20,17 +20,16 @@ from django.conf.urls.static import static from .views import IndexView, MediaAccess -# photologue_custom overrides some photologue patterns urlpatterns = [ path('', IndexView.as_view(), name='index'), - path('photologue/', include('photologue_custom.urls')), - path('photologue/', include('photologue.urls', namespace='photologue')), + path('', include('photologue_custom.urls', namespace='photologue')), path('accounts/', include('allauth.urls')), path('i18n/', include('django.conf.urls.i18n')), path('admin/', admin.site.urls), path('admin/doc/', include('django.contrib.admindocs.urls')), ] +# In production media are served through NGINX with X-Accel-Redirect if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) else: diff --git a/photologue_custom/templates/photologue/gallery_detail.html b/photologue_custom/templates/photologue/gallery_detail.html index 15c0b32..e26bc9c 100644 --- a/photologue_custom/templates/photologue/gallery_detail.html +++ b/photologue_custom/templates/photologue/gallery_detail.html @@ -39,7 +39,7 @@ SPDX-License-Identifier: GPL-3.0-or-later {% if gallery.extended.tags.all %}

Tags : {% for tag in gallery.extended.tags.all %} - {{ tag }} + {{ tag }} {% endfor %}

{% endif %} @@ -49,14 +49,14 @@ SPDX-License-Identifier: GPL-3.0-or-later
{% endblock %} diff --git a/photologue_custom/urls.py b/photologue_custom/urls.py index c5fbc20..6000e73 100644 --- a/photologue_custom/urls.py +++ b/photologue_custom/urls.py @@ -1,15 +1,19 @@ from django.urls import path, re_path from .views import (CustomGalleryArchiveIndexView, CustomGalleryDetailView, - CustomGalleryYearArchiveView, GalleryDownload, - GalleryUpload, TagDetail) + CustomGalleryYearArchiveView, CustomPhotoDetailView, + GalleryDownload, GalleryUpload, TagDetail) +# Rather than using photologue default router, we redefine our own router +# with login and permission checks. +app_name = 'photologue' urlpatterns = [ path('tag//', TagDetail.as_view(), name='tag-detail'), path('gallery/', CustomGalleryArchiveIndexView.as_view(), name='pl-gallery-archive'), re_path(r'^gallery/(?P\d{4})/$', CustomGalleryYearArchiveView.as_view(), name='pl-gallery-archive-year'), path('gallery//', CustomGalleryDetailView.as_view(), name='pl-gallery'), path('gallery///', CustomGalleryDetailView.as_view(), name='pl-gallery-owner'), - path('gallery//download/', GalleryDownload.as_view(), name='gallery-download'), - path('upload/', GalleryUpload.as_view(), name='gallery-upload'), + path('gallery//download/', GalleryDownload.as_view(), name='pl-gallery-download'), + path('photo//', CustomPhotoDetailView.as_view(), name='pl-photo'), + path('upload/', GalleryUpload.as_view(), name='pl-gallery-upload'), ] diff --git a/photologue_custom/views.py b/photologue_custom/views.py index 5355a28..81df13d 100644 --- a/photologue_custom/views.py +++ b/photologue_custom/views.py @@ -16,7 +16,8 @@ from django.utils.text import slugify from django.views.generic.detail import DetailView from django.views.generic.edit import FormView from photologue.models import Gallery, Photo -from photologue.views import GalleryArchiveIndexView, GalleryYearArchiveView +from photologue.views import (GalleryArchiveIndexView, GalleryYearArchiveView, + PhotoDetailView) from PIL import Image from taggit.models import Tag @@ -39,7 +40,7 @@ class TagDetail(LoginRequiredMixin, DetailView): return context -class CustomGalleryArchiveIndexView(GalleryArchiveIndexView): +class CustomGalleryArchiveIndexView(LoginRequiredMixin, GalleryArchiveIndexView): """ Override to use event date """ @@ -47,7 +48,7 @@ class CustomGalleryArchiveIndexView(GalleryArchiveIndexView): uses_datetime_field = False # Fix related object access -class CustomGalleryYearArchiveView(GalleryYearArchiveView): +class CustomGalleryYearArchiveView(LoginRequiredMixin, GalleryYearArchiveView): """ Override to use event date """ @@ -55,7 +56,7 @@ class CustomGalleryYearArchiveView(GalleryYearArchiveView): uses_datetime_field = False # Fix related object access -class CustomGalleryDetailView(DetailView): +class CustomGalleryDetailView(LoginRequiredMixin, DetailView): """ Custom gallery detail view to filter on photo owner """ @@ -102,13 +103,17 @@ class GalleryDownload(LoginRequiredMixin, DetailView): return response +class CustomPhotoDetailView(LoginRequiredMixin, PhotoDetailView): + pass + + class GalleryUpload(PermissionRequiredMixin, FormView): """ Form to upload new photos in a gallery """ form_class = UploadForm template_name = "photologue/upload.html" - success_url = reverse_lazy("gallery-upload") + success_url = reverse_lazy("photologue:pl-gallery-upload") permission_required = 'photologue.add_gallery' def form_valid(self, form):