From 2048c65d13abdccd8963d39513aead37343ae864 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 09:46:31 +0100
Subject: [PATCH] add proxy to iiif service

---
 docker-compose.yml          |  2 +-
 poetry.lock                 | 20 +++++++++++++++++++-
 pount/apps/iiif/__init__.py |  0
 pount/apps/iiif/apps.py     |  5 +++++
 pount/apps/iiif/urls.py     | 10 ++++++++++
 pount/apps/iiif/views.py    | 20 ++++++++++++++++++++
 pount/settings/common.py    |  1 +
 pount/urls.py               |  1 +
 pyproject.toml              |  1 +
 9 files changed, 58 insertions(+), 2 deletions(-)
 create mode 100644 pount/apps/iiif/__init__.py
 create mode 100644 pount/apps/iiif/apps.py
 create mode 100644 pount/apps/iiif/urls.py
 create mode 100644 pount/apps/iiif/views.py

diff --git a/docker-compose.yml b/docker-compose.yml
index fa238bc7..bcea88b5 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -39,7 +39,7 @@ services:
       CANTALOUPE_S3SOURCE_SECRET_KEY: ${AWS_SECRET_ACCESS_KEY}
       CANTALOUPE_S3SOURCE_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
       CANTALOUPE_S3SOURCE_BASICLOOKUPSTRATEGY_BUCKET_NAME: ${AWS_STORAGE_BUCKET_NAME}
-      CANTALOUPE_S3SOURCE_BASICLOOKUPSTRATEGY_PATH_PREFIX: ""
+      CANTALOUPE_S3SOURCE_BASICLOOKUPSTRATEGY_PATH_PREFIX: "iiif/"
       CANTALOUPE_S3SOURCE_ENDPOINT: "https://s3.unistra.fr"
 
   kibana:
diff --git a/poetry.lock b/poetry.lock
index c2a6ff02..9cf9875b 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -867,6 +867,24 @@ redis = ">=3,<4.0.0 || >4.0.0,<4.0.1 || >4.0.1"
 [package.extras]
 hiredis = ["redis[hiredis] (>=3,!=4.0.0,!=4.0.1)"]
 
+[[package]]
+name = "django-revproxy"
+version = "0.13.0"
+description = "Yet another Django reverse proxy application"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "django_revproxy-0.13.0-py3-none-any.whl", hash = "sha256:6130d52d5042624c918134369be0a825e9f7e87d15e12b739d6666e5ed1f32ef"},
+]
+
+[package.dependencies]
+Django = ">=3.0"
+urllib3 = ">=1.12"
+
+[package.extras]
+diazo = ["diazo (>=1.0.5)", "lxml (>=3.4)"]
+tests = ["coverage", "diazo", "flake8", "lxml (>=3.4)"]
+
 [[package]]
 name = "django-rich"
 version = "1.13.0"
@@ -2624,4 +2642,4 @@ files = [
 [metadata]
 lock-version = "2.0"
 python-versions = "~3.9"
-content-hash = "be750ea57e28eaf53d9182a915f65e78b7475c24c0463394f24c572724cc624f"
+content-hash = "11f98c82e7582d4ec57e51ddb0c7abede4b73e0414974959150f9ff457649c58"
diff --git a/pount/apps/iiif/__init__.py b/pount/apps/iiif/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/pount/apps/iiif/apps.py b/pount/apps/iiif/apps.py
new file mode 100644
index 00000000..08c5b2d6
--- /dev/null
+++ b/pount/apps/iiif/apps.py
@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class IiifAppConfig(AppConfig):
+    name = "pount.apps.iiif"
diff --git a/pount/apps/iiif/urls.py b/pount/apps/iiif/urls.py
new file mode 100644
index 00000000..f8e01e4e
--- /dev/null
+++ b/pount/apps/iiif/urls.py
@@ -0,0 +1,10 @@
+from django.urls import re_path
+
+from pount.apps.iiif import views
+
+app_name = "iiif"
+
+
+urlpatterns = [
+    re_path(r"(?P<path>.*)", views.TestProxyView.as_view()),
+]
diff --git a/pount/apps/iiif/views.py b/pount/apps/iiif/views.py
new file mode 100644
index 00000000..9915b6cc
--- /dev/null
+++ b/pount/apps/iiif/views.py
@@ -0,0 +1,20 @@
+from os import environ
+
+from django.contrib.auth import get_user_model
+from revproxy.views import ProxyView
+
+User = get_user_model()
+
+
+# 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(request.user)
+        # print(args)
+        # print(kwargs)
+        return super().dispatch(request, *args, **kwargs)
diff --git a/pount/settings/common.py b/pount/settings/common.py
index 6f0611a3..dc19a244 100644
--- a/pount/settings/common.py
+++ b/pount/settings/common.py
@@ -329,6 +329,7 @@ THIRD_PARTY_APPS = [
     "health_check.db",
     "health_check.contrib.s3boto3_storage",
     "health_check.contrib.rabbitmq",
+    "revproxy.apps.RevProxyConfig",
 ]
 
 LOCAL_APPS = [
diff --git a/pount/urls.py b/pount/urls.py
index 5db554e8..b1efcd25 100644
--- a/pount/urls.py
+++ b/pount/urls.py
@@ -15,6 +15,7 @@ urlpatterns = [
     path("cas/", include("django_cas.urls")),
     path("admin/", admin.site.urls),
     path("_hc/", HealthCheckView.as_view()),
+    path("iiif/", include("pount.apps.iiif.urls")),
 ]
 
 if settings.DEBUG and "debug_toolbar" in settings.INSTALLED_APPS:
diff --git a/pyproject.toml b/pyproject.toml
index 8faae896..45d36f4b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -42,6 +42,7 @@ django-filter = "^23.3"
 django-health-check = "3.17.0"
 django-notifications-hq = "^1.8.0"
 django-redis = "^5.4.0"
+django-revproxy = "^0.13.0"
 django-rich = "^1.8.0"
 django-storages = "^1.14.2"
 django-stubs = "^4.2"
-- 
GitLab