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 %}
- {% url 'gallery-upload' as url %}
+ {% url 'photologue:pl-gallery-upload' as url %}
{% trans 'Upload' %}
{% 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):