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