mirror of
https://github.com/open-webui/open-webui
synced 2024-12-28 23:02:25 +00:00
feat: enable OAuth signup configuration for signout functionality
This commit is contained in:
parent
9918ec6246
commit
48d604a525
@ -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}
|
||||||
|
@ -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",
|
||||||
|
Loading…
Reference in New Issue
Block a user