Skip to content

Commit dfa0174

Browse files
committed
refactor: replace homemade 'set_parameter_in_url_query' method by
authlib 'add_params_to_uri'
1 parent 1dc8331 commit dfa0174

File tree

4 files changed

+10
-52
lines changed

4 files changed

+10
-52
lines changed

canaille/app/flask.py

-11
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import datetime
22
import logging
33
from functools import wraps
4-
from urllib.parse import urlsplit
5-
from urllib.parse import urlunsplit
64

75
from flask import abort
86
from flask import current_app
@@ -78,15 +76,6 @@ def decorator(*args, **kwargs):
7876
return wrapper
7977

8078

81-
def set_parameter_in_url_query(url, **kwargs):
82-
split = list(urlsplit(url))
83-
pairs = split[3].split("&")
84-
parameters = {pair.split("=")[0]: pair.split("=")[1] for pair in pairs if pair}
85-
parameters = {**parameters, **kwargs}
86-
split[3] = "&".join(f"{key}={value}" for key, value in parameters.items())
87-
return urlunsplit(split)
88-
89-
9079
def request_is_boosted() -> bool:
9180
"""Whether the request is boosted with HTMX.
9281

canaille/oidc/endpoints/oauth.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import datetime
22
import uuid
33

4+
from authlib.common.urls import add_params_to_uri
45
from authlib.integrations.flask_oauth2 import current_token
56
from authlib.jose import jwt
67
from authlib.jose.errors import JoseError
@@ -21,7 +22,6 @@
2122

2223
from canaille.app import models
2324
from canaille.app.flask import csrf
24-
from canaille.app.flask import set_parameter_in_url_query
2525
from canaille.app.i18n import gettext as _
2626
from canaille.app.session import current_user
2727
from canaille.app.session import logout_user
@@ -403,7 +403,7 @@ def end_session():
403403
):
404404
url = data["post_logout_redirect_uri"]
405405
if "state" in data:
406-
url = set_parameter_in_url_query(url, state=data["state"])
406+
url = add_params_to_uri(url, dict(state=data["state"]))
407407
return redirect(url)
408408

409409
flash(_("You have been disconnected"), "success")
@@ -420,7 +420,7 @@ def end_session_submit():
420420

421421
if request.form["answer"] == "logout":
422422
session["end_session_confirmation"] = True
423-
url = set_parameter_in_url_query(url_for("oidc.endpoints.end_session"), **data)
423+
url = add_params_to_uri(url_for("oidc.endpoints.end_session"), data)
424424
return redirect(url)
425425

426426
flash(_("You have not been disconnected"), "info")

demo/client/__init__.py

+7-20
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
from urllib.parse import urlsplit
2-
from urllib.parse import urlunsplit
3-
41
from authlib.common.errors import AuthlibBaseError
2+
from authlib.common.urls import add_params_to_uri
53
from authlib.integrations.flask_client import OAuth
64
from authlib.oidc.discovery import get_well_known_url
75
from flask import Flask
@@ -66,11 +64,13 @@ def logout():
6664
end_session_endpoint = oauth.canaille.server_metadata.get(
6765
"end_session_endpoint"
6866
)
69-
end_session_url = set_parameter_in_url_query(
67+
end_session_url = add_params_to_uri(
7068
end_session_endpoint,
71-
client_id=current_app.config["OAUTH_CLIENT_ID"],
72-
id_token_hint=session["id_token"],
73-
post_logout_redirect_uri=url_for("logout_callback", _external=True),
69+
dict(
70+
client_id=current_app.config["OAUTH_CLIENT_ID"],
71+
id_token_hint=session["id_token"],
72+
post_logout_redirect_uri=url_for("logout_callback", _external=True),
73+
),
7474
)
7575
return redirect(end_session_url)
7676

@@ -106,16 +106,3 @@ def create_app():
106106
setup_routes(app)
107107
setup_oauth(app)
108108
return app
109-
110-
111-
def set_parameter_in_url_query(url, **kwargs):
112-
split = list(urlsplit(url))
113-
114-
parameters = "&".join(f"{key}={value}" for key, value in kwargs.items())
115-
116-
if split[3]:
117-
split[3] = f"{split[3]}&{parameters}"
118-
else:
119-
split[3] = parameters
120-
121-
return urlunsplit(split)

tests/app/test_flaskutils.py

-18
This file was deleted.

0 commit comments

Comments
 (0)