fix: login with furl

This commit is contained in:
Loïc Gremaud 2026-05-10 03:24:18 +02:00
parent f90377ac69
commit 90f1ce13cf
Signed by: Legrems
GPG Key ID: D4620E6DF3E0121D
4 changed files with 34 additions and 4 deletions

View File

@ -7,6 +7,7 @@ import requests
from django.conf import settings from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.auth.backends import BaseBackend from django.contrib.auth.backends import BaseBackend
from furl import furl
class SimpleCASBackend(BaseBackend): class SimpleCASBackend(BaseBackend):

View File

@ -7,7 +7,7 @@ from django.contrib.auth import authenticate, login, logout
from django.shortcuts import redirect from django.shortcuts import redirect
from django.http import HttpResponse from django.http import HttpResponse
from django.views import View from django.views import View
import urllib.parse from furl import furl
class SimpleCASLoginView(View): class SimpleCASLoginView(View):
@ -35,8 +35,9 @@ class SimpleCASLoginView(View):
service_url = request.build_absolute_uri().split("?")[ service_url = request.build_absolute_uri().split("?")[
0 0
] # Remove query params ] # Remove query params
cas_login_url = f"{settings.CAS_SERVER_URL.rstrip('/')}/login?service={urllib.parse.quote(service_url)}" cas_login_url = furl(settings.CAS_SERVER_URL) / "login"
return redirect(cas_login_url) cas_login_url.set(args={"service": service_url})
return redirect(cas_login_url.url)
class SimpleCASLogoutView(View): class SimpleCASLogoutView(View):

View File

@ -15,6 +15,7 @@ dependencies = [
"django-shinobi>=1.4.0", "django-shinobi>=1.4.0",
"psycopg>=3.2.13", "psycopg>=3.2.13",
"sentry-sdk[django]>=2.59.0", "sentry-sdk[django]>=2.59.0",
"furl>=2.1.4",
] ]
[dependency-groups] [dependency-groups]

29
uv.lock
View File

@ -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" }, { 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]] [[package]]
name = "gunicorn" name = "gunicorn"
version = "23.0.0" 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" }, { 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]] [[package]]
name = "packaging" name = "packaging"
version = "25.0" version = "25.0"
@ -699,11 +724,12 @@ wheels = [
[[package]] [[package]]
name = "polylan-submitter" name = "polylan-submitter"
version = "0.1.0" version = "0.1.0"
source = { editable = "." } source = { virtual = "." }
dependencies = [ dependencies = [
{ name = "django" }, { name = "django" },
{ name = "django-shinobi" }, { name = "django-shinobi" },
{ name = "django-vite" }, { name = "django-vite" },
{ name = "furl" },
{ name = "gunicorn" }, { name = "gunicorn" },
{ name = "opencv-python" }, { name = "opencv-python" },
{ name = "pandas" }, { name = "pandas" },
@ -733,6 +759,7 @@ requires-dist = [
{ name = "django", specifier = ">=5.2.7" }, { name = "django", specifier = ">=5.2.7" },
{ name = "django-shinobi", specifier = ">=1.4.0" }, { name = "django-shinobi", specifier = ">=1.4.0" },
{ name = "django-vite", specifier = ">=3.1.0" }, { name = "django-vite", specifier = ">=3.1.0" },
{ name = "furl", specifier = ">=2.1.4" },
{ name = "gunicorn", specifier = ">=23.0.0" }, { name = "gunicorn", specifier = ">=23.0.0" },
{ name = "opencv-python", specifier = ">=4.12.0.88" }, { name = "opencv-python", specifier = ">=4.12.0.88" },
{ name = "pandas", specifier = ">=2.3.3" }, { name = "pandas", specifier = ">=2.3.3" },