From af772b6abb5cbf689be2b71a31d01bd1718bd051 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Desfr=C3=AAnes?= <mickael.desfrenes@unicaen.fr> Date: Wed, 11 Dec 2024 21:10:29 +0100 Subject: [PATCH] add auth to iiif endpoint --- pount/apps/iiif/views.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/pount/apps/iiif/views.py b/pount/apps/iiif/views.py index 58b7caca..a765bea6 100644 --- a/pount/apps/iiif/views.py +++ b/pount/apps/iiif/views.py @@ -2,9 +2,16 @@ from os import environ from django.conf import settings from django.contrib.auth import get_user_model +from django.core.exceptions import PermissionDenied +from django.shortcuts import get_object_or_404 +from rest_framework_simplejwt.authentication import JWTAuthentication from revproxy.views import ProxyView +from pount.apps.api.models import MediaFile +from pount.apps.api.rules import ITEM_VIEW + User = get_user_model() +JWT_authenticator = JWTAuthentication() def get_request_headers(self): @@ -46,17 +53,16 @@ def get_request_headers(self): ProxyView.get_request_headers = get_request_headers -# class TestProxyView(LoginRequiredMixin, ProxyView): class TestProxyView(ProxyView): upstream = environ.get("IIIF_UPSTREAM_URL", "http://localhost:8182/iiif/") add_x_forwarded = True def dispatch(self, request, *args, **kwargs): - # for k in request.META.keys(): - # print(k) - # print(args) - # print(kwargs) - # if not request.user.has_perm(rules.ITEM_EDIT, obj): - # print("can't touch dis") - - return super().dispatch(request, *args, **kwargs) + response = JWT_authenticator.authenticate(request) + if response is not None: + user, _ = response + file_id = request.path.lstrip("iiif/3").split(".tiled.tif")[0] + file = get_object_or_404(MediaFile, id=file_id) + if user.has_perm(ITEM_VIEW, file.item): + return super().dispatch(request, *args, **kwargs) + raise PermissionDenied() -- GitLab