From c8b2313362ce42476fc5775b6cfa7399b53f58f1 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Mon, 27 Oct 2025 15:38:59 -0700 Subject: [PATCH] refac --- backend/open_webui/main.py | 1 + backend/open_webui/routers/configs.py | 25 +++++++++++++------------ backend/open_webui/utils/oauth.py | 4 +++- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/backend/open_webui/main.py b/backend/open_webui/main.py index 1405a43061..da89fd7de4 100644 --- a/backend/open_webui/main.py +++ b/backend/open_webui/main.py @@ -1941,6 +1941,7 @@ if len(app.state.config.TOOL_SERVER_CONNECTIONS) > 0: if tool_server_connection.get("type", "openapi") == "mcp": server_id = tool_server_connection.get("info", {}).get("id") auth_type = tool_server_connection.get("auth_type", "none") + if server_id and auth_type == "oauth_2.1": oauth_client_info = tool_server_connection.get("info", {}).get( "oauth_client_info", "" diff --git a/backend/open_webui/routers/configs.py b/backend/open_webui/routers/configs.py index 43ef73f29b..5c08fded23 100644 --- a/backend/open_webui/routers/configs.py +++ b/backend/open_webui/routers/configs.py @@ -167,19 +167,19 @@ async def set_tool_servers_config( form_data: ToolServersConfigForm, user=Depends(get_admin_user), ): - mcp_server_ids = [ - conn.get("info", {}).get("id") - for conn in form_data.TOOL_SERVER_CONNECTIONS - if conn.get("type") == "mcp" - ] + for connection in request.app.state.config.TOOL_SERVER_CONNECTIONS: + server_type = connection.get("type", "openapi") + auth_type = connection.get("auth_type", "none") - for server_id in mcp_server_ids: - # Remove existing OAuth clients for MCP tool servers that are no longer present - client_key = f"mcp:{server_id}" - try: - request.app.state.oauth_client_manager.remove_client(client_key) - except: - pass + if auth_type == "oauth_2.1": + # Remove existing OAuth clients for tool servers + server_id = connection.get("info", {}).get("id") + client_key = f"{server_type}:{server_id}" + + try: + request.app.state.oauth_client_manager.remove_client(client_key) + except: + pass # Set new tool server connections request.app.state.config.TOOL_SERVER_CONNECTIONS = [ @@ -193,6 +193,7 @@ async def set_tool_servers_config( if server_type == "mcp": server_id = connection.get("info", {}).get("id") auth_type = connection.get("auth_type", "none") + if auth_type == "oauth_2.1" and server_id: try: oauth_client_info = connection.get("info", {}).get( diff --git a/backend/open_webui/utils/oauth.py b/backend/open_webui/utils/oauth.py index 30939eb20a..03f7337774 100644 --- a/backend/open_webui/utils/oauth.py +++ b/backend/open_webui/utils/oauth.py @@ -582,6 +582,7 @@ class OAuthClientManager: client = self.get_client(client_id) client_info = self.get_client_info(client_id) + if client is None or client_info is None: raise HTTPException(status.HTTP_404_NOT_FOUND) @@ -593,6 +594,7 @@ class OAuthClientManager: "Detected invalid OAuth client %s; attempting re-registration", client_id, ) + re_registered = await self._re_register_client(request, client_id) if not re_registered: raise HTTPException( @@ -799,7 +801,7 @@ class OAuthClientManager: return None async def handle_authorize(self, request, client_id: str) -> RedirectResponse: - await self._ensure_valid_client_registration(request, client_id) + # await self._ensure_valid_client_registration(request, client_id) client = self.get_client(client_id) if client is None: