summaryrefslogtreecommitdiffstats
path: root/aurweb/routers/sso.py
diff options
context:
space:
mode:
authorFrédéric Mangano-Tarumi <fmang@mg0.fr>2020-07-14 15:35:05 +0200
committerLukas Fleischer <lfleischer@archlinux.org>2021-02-20 17:24:30 +0100
commit4d0f2d2279ed9fcdf6bb76015ac0da9c6e938d69 (patch)
treee8683431da721c46b95a973ecdeefbbc91170f42 /aurweb/routers/sso.py
parentd12ea08fcaa62211cbf4d83bba91124b90f861cf (diff)
downloadaur-4d0f2d2279ed9fcdf6bb76015ac0da9c6e938d69.tar.gz
aur-4d0f2d2279ed9fcdf6bb76015ac0da9c6e938d69.tar.xz
Implement SSO logout
Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
Diffstat (limited to 'aurweb/routers/sso.py')
-rw-r--r--aurweb/routers/sso.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/aurweb/routers/sso.py b/aurweb/routers/sso.py
index e1ec7efe..a8d4b141 100644
--- a/aurweb/routers/sso.py
+++ b/aurweb/routers/sso.py
@@ -1,6 +1,8 @@
import time
import uuid
+from urllib.parse import urlencode
+
import fastapi
from authlib.integrations.starlette_client import OAuth
@@ -82,3 +84,19 @@ async def authenticate(request: Request, conn=Depends(aurweb.db.connect)):
else:
# We’ve got a severe integrity violation.
raise Exception("Multiple accounts found for SSO account " + sub)
+
+
+@router.get("/sso/logout")
+async def logout():
+ """
+ Disconnect the user from the SSO provider, potentially affecting every
+ other Arch service. AUR logout is performed by `/logout`, before it
+ redirects to `/sso/logout`.
+
+ Based on the OpenID Connect Session Management specification:
+ https://openid.net/specs/openid-connect-session-1_0.html#RPLogout
+ """
+ metadata = await oauth.sso.load_server_metadata()
+ # TODO Supply id_token_hint to the end session endpoint.
+ query = urlencode({'post_logout_redirect_uri': aurweb.config.get('options', 'aur_location')})
+ return RedirectResponse(metadata["end_session_endpoint"] + '?' + query)