From 90f1ce13cf81cdfd40703575c417632c819e3675 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Gremaud?= Date: Sun, 10 May 2026 03:24:18 +0200 Subject: [PATCH] fix: login with furl --- polylan_submitter/simple_cas_backend.py | 1 + polylan_submitter/simple_cas_views.py | 7 +++--- pyproject.toml | 1 + uv.lock | 29 ++++++++++++++++++++++++- 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/polylan_submitter/simple_cas_backend.py b/polylan_submitter/simple_cas_backend.py index 94b6fa2..43a1782 100644 --- a/polylan_submitter/simple_cas_backend.py +++ b/polylan_submitter/simple_cas_backend.py @@ -7,6 +7,7 @@ import requests from django.conf import settings from django.contrib.auth import get_user_model from django.contrib.auth.backends import BaseBackend +from furl import furl class SimpleCASBackend(BaseBackend): diff --git a/polylan_submitter/simple_cas_views.py b/polylan_submitter/simple_cas_views.py index 531444d..56b8371 100644 --- a/polylan_submitter/simple_cas_views.py +++ b/polylan_submitter/simple_cas_views.py @@ -7,7 +7,7 @@ from django.contrib.auth import authenticate, login, logout from django.shortcuts import redirect from django.http import HttpResponse from django.views import View -import urllib.parse +from furl import furl class SimpleCASLoginView(View): @@ -35,8 +35,9 @@ class SimpleCASLoginView(View): service_url = request.build_absolute_uri().split("?")[ 0 ] # Remove query params - cas_login_url = f"{settings.CAS_SERVER_URL.rstrip('/')}/login?service={urllib.parse.quote(service_url)}" - return redirect(cas_login_url) + cas_login_url = furl(settings.CAS_SERVER_URL) / "login" + cas_login_url.set(args={"service": service_url}) + return redirect(cas_login_url.url) class SimpleCASLogoutView(View): diff --git a/pyproject.toml b/pyproject.toml index 996559a..5706cce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,6 +15,7 @@ dependencies = [ "django-shinobi>=1.4.0", "psycopg>=3.2.13", "sentry-sdk[django]>=2.59.0", + "furl>=2.1.4", ] [dependency-groups] diff --git a/uv.lock b/uv.lock index f910c15..cb600f4 100644 --- a/uv.lock +++ b/uv.lock @@ -293,6 +293,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/76/91/7216b27286936c16f5b4d0c530087e4a54eead683e6b0b73dd0c64844af6/filelock-3.20.0-py3-none-any.whl", hash = "sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2", size = 16054, upload-time = "2025-10-08T18:03:48.35Z" }, ] +[[package]] +name = "furl" +version = "2.1.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "orderedmultidict" }, + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/53/e4/203a76fa2ef46cdb0a618295cc115220cbb874229d4d8721068335eb87f0/furl-2.1.4.tar.gz", hash = "sha256:877657501266c929269739fb5f5980534a41abd6bbabcb367c136d1d3b2a6015", size = 57526, upload-time = "2025-03-09T05:36:21.175Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/8c/dce3b1b7593858eba995b2dfdb833f872c7f863e3da92aab7128a6b11af4/furl-2.1.4-py2.py3-none-any.whl", hash = "sha256:da34d0b34e53ffe2d2e6851a7085a05d96922b5b578620a37377ff1dbeeb11c8", size = 27550, upload-time = "2025-03-09T05:36:19.928Z" }, +] + [[package]] name = "gunicorn" version = "23.0.0" @@ -498,6 +511,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fa/80/eb88edc2e2b11cd2dd2e56f1c80b5784d11d6e6b7f04a1145df64df40065/opencv_python-4.12.0.88-cp37-abi3-win_amd64.whl", hash = "sha256:d98edb20aa932fd8ebd276a72627dad9dc097695b3d435a4257557bbb49a79d2", size = 39000307, upload-time = "2025-07-07T09:14:16.641Z" }, ] +[[package]] +name = "orderedmultidict" +version = "1.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5c/62/61ad51f6c19d495970230a7747147ce7ed3c3a63c2af4ebfdb1f6d738703/orderedmultidict-1.0.2.tar.gz", hash = "sha256:16a7ae8432e02cc987d2d6d5af2df5938258f87c870675c73ee77a0920e6f4a6", size = 13973, upload-time = "2025-11-18T08:00:42.649Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/6c/d8a02ffb24876b5f51fbd781f479fc6525a518553a4196bd0433dae9ff8e/orderedmultidict-1.0.2-py2.py3-none-any.whl", hash = "sha256:ab5044c1dca4226ae4c28524cfc5cc4c939f0b49e978efa46a6ad6468049f79b", size = 11897, upload-time = "2025-11-18T08:00:41.44Z" }, +] + [[package]] name = "packaging" version = "25.0" @@ -699,11 +724,12 @@ wheels = [ [[package]] name = "polylan-submitter" version = "0.1.0" -source = { editable = "." } +source = { virtual = "." } dependencies = [ { name = "django" }, { name = "django-shinobi" }, { name = "django-vite" }, + { name = "furl" }, { name = "gunicorn" }, { name = "opencv-python" }, { name = "pandas" }, @@ -733,6 +759,7 @@ requires-dist = [ { name = "django", specifier = ">=5.2.7" }, { name = "django-shinobi", specifier = ">=1.4.0" }, { name = "django-vite", specifier = ">=3.1.0" }, + { name = "furl", specifier = ">=2.1.4" }, { name = "gunicorn", specifier = ">=23.0.0" }, { name = "opencv-python", specifier = ">=4.12.0.88" }, { name = "pandas", specifier = ">=2.3.3" },