|
@@ -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}
|