feat: enable OAuth signup configuration for signout functionality

This commit is contained in:
Zaiban Ali 2024-12-07 15:21:05 +01:00
parent 9918ec6246
commit 48d604a525
2 changed files with 19 additions and 18 deletions

View File

@ -33,6 +33,7 @@ from fastapi import APIRouter, Depends, HTTPException, Request, status
from fastapi.responses import RedirectResponse, Response
from open_webui.config import (
OPENID_PROVIDER_URL,
ENABLE_OAUTH_SIGNUP,
)
from pydantic import BaseModel
from open_webui.utils.misc import parse_duration, validate_email_format
@ -505,22 +506,23 @@ async def signup(request: Request, response: Response, form_data: SignupForm):
async def signout(request: Request, response: Response):
response.delete_cookie("token")
id_token = request.cookies.get("id_token", None)
if id_token:
async with httpx.AsyncClient() as client:
try:
openid_config = await client.get(OPENID_PROVIDER_URL.value)
openid_config.raise_for_status()
openid_data = openid_config.json()
end_session_endpoint = openid_data.get("end_session_endpoint")
if end_session_endpoint:
logout_url = f"{end_session_endpoint}?id_token_hint={id_token}"
response.delete_cookie("id_token")
return RedirectResponse(url=logout_url)
except httpx.HTTPStatusError as e:
raise HTTPException(status_code=e.response.status_code, detail="Failed to fetch OpenID configuration")
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
if ENABLE_OAUTH_SIGNUP.value:
id_token = request.cookies.get("id_token", None)
if id_token:
async with httpx.AsyncClient() as client:
try:
openid_config = await client.get(OPENID_PROVIDER_URL.value)
openid_config.raise_for_status()
openid_data = openid_config.json()
end_session_endpoint = openid_data.get("end_session_endpoint")
if end_session_endpoint:
logout_url = f"{end_session_endpoint}?id_token_hint={id_token}"
response.delete_cookie("id_token")
return RedirectResponse(url=logout_url)
except httpx.HTTPStatusError as e:
raise HTTPException(status_code=e.response.status_code, detail="Failed to fetch OpenID configuration")
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
# Fall back to the default signout
return {"status": True}

View File

@ -20,7 +20,6 @@ from open_webui.config import (
OAUTH_MERGE_ACCOUNTS_BY_EMAIL,
OAUTH_PROVIDERS,
ENABLE_OAUTH_ROLE_MANAGEMENT,
OAUTH_PROVIDER_NAME,
OAUTH_ROLES_CLAIM,
OAUTH_EMAIL_CLAIM,
OAUTH_PICTURE_CLAIM,
@ -254,7 +253,7 @@ class OAuthManager:
secure=WEBUI_SESSION_COOKIE_SECURE,
)
if OAUTH_PROVIDER_NAME.value:
if ENABLE_OAUTH_SIGNUP.value:
id_token = token.get("id_token")
response.set_cookie(
key="id_token",