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

View File

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