diff --git a/backend/open_webui/routers/terminals.py b/backend/open_webui/routers/terminals.py index a66094994e..b2f997cb38 100644 --- a/backend/open_webui/routers/terminals.py +++ b/backend/open_webui/routers/terminals.py @@ -100,6 +100,9 @@ async def proxy_terminal( if connection is None: return JSONResponse({'error': f"Terminal server '{server_id}' not found"}, status_code=404) + if not connection.get('enabled', True): + return JSONResponse({'error': 'Terminal server disabled'}, status_code=403) + user_group_ids = {group.id for group in await Groups.get_groups_by_member_id(user.id)} if not await has_connection_access(user, connection, user_group_ids): return JSONResponse({'error': 'Access denied'}, status_code=403) @@ -248,6 +251,10 @@ async def _resolve_authenticated_connection(ws: WebSocket, server_id: str): await ws.close(code=4004, reason='Terminal server not found') return None + if not connection.get('enabled', True): + await ws.close(code=4003, reason='Terminal server disabled') + return None + user_group_ids = {group.id for group in await Groups.get_groups_by_member_id(user.id)} if not await has_connection_access(user, connection, user_group_ids): await ws.close(code=4003, reason='Access denied') diff --git a/backend/open_webui/utils/tools.py b/backend/open_webui/utils/tools.py index e02570c2f4..3f7d2aa094 100644 --- a/backend/open_webui/utils/tools.py +++ b/backend/open_webui/utils/tools.py @@ -1325,6 +1325,8 @@ async def get_terminal_tools( connection = next((c for c in connections if c.get('id') == terminal_id), None) if connection is None: raise RuntimeError(f"Terminal server '{terminal_id}' not found") + if not connection.get('enabled', True): + raise RuntimeError(f"Terminal server '{terminal_id}' is disabled") user_group_ids = {group.id for group in await Groups.get_groups_by_member_id(user.id)} if not await has_connection_access(user, connection, user_group_ids):