From e668c493f611b9cf5f471ee856a34c02008882cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Desfr=C3=AAnes?= <mickael.desfrenes@unicaen.fr> Date: Tue, 10 Dec 2024 15:25:20 +0100 Subject: [PATCH] monkeypatch ProxyView --- pount/apps/iiif/views.py | 44 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/pount/apps/iiif/views.py b/pount/apps/iiif/views.py index 9915b6cc..58b7caca 100644 --- a/pount/apps/iiif/views.py +++ b/pount/apps/iiif/views.py @@ -1,11 +1,51 @@ from os import environ +from django.conf import settings from django.contrib.auth import get_user_model from revproxy.views import ProxyView User = get_user_model() +def get_request_headers(self): + """Return request headers that will be sent to upstream. + + The header REMOTE_USER is set to the current user + if AuthenticationMiddleware is enabled and + the view's add_remote_user property is True. + + .. versionadded:: 0.9.8 + + If the view's add_x_forwarded property is True, the + headers X-Forwarded-For and X-Forwarded-Proto are set to the + IP address of the requestor and the request's protocol (http or https), + respectively. + + .. versionadded:: TODO + + """ + request_headers = self.get_proxy_request_headers(self.request) + + if self.add_remote_user and hasattr(self.request, "user") and self.request.user.is_active: + request_headers["REMOTE_USER"] = self.request.user.get_username() + self.log.info("REMOTE_USER set") + + if self.add_x_forwarded: + request_ip = self.request.META.get("REMOTE_ADDR") + self.log.debug("Proxy request IP: %s", request_ip) + request_headers["X-Forwarded-For"] = request_ip + if settings.DEBUG: + http_port = self.request.META["SERVER_PORT"] + request_headers["X-Forwarded-Port"] = http_port + request_proto = "https" if self.request.is_secure() else "http" + self.log.debug("Proxy request using %s", request_proto) + request_headers["X-Forwarded-Proto"] = request_proto + return request_headers + + +ProxyView.get_request_headers = get_request_headers + + # class TestProxyView(LoginRequiredMixin, ProxyView): class TestProxyView(ProxyView): upstream = environ.get("IIIF_UPSTREAM_URL", "http://localhost:8182/iiif/") @@ -14,7 +54,9 @@ class TestProxyView(ProxyView): def dispatch(self, request, *args, **kwargs): # for k in request.META.keys(): # print(k) - # print(request.user) # 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) -- GitLab