diff --git a/backend/open_webui/models/users.py b/backend/open_webui/models/users.py index 43c5a94f81..4a526d03f3 100644 --- a/backend/open_webui/models/users.py +++ b/backend/open_webui/models/users.py @@ -184,6 +184,9 @@ class UserInfoResponse(UserStatus): name: str email: str role: str + bio: Optional[str] = None + groups: Optional[list] = [] + is_active: bool = False class UserIdNameResponse(BaseModel): diff --git a/backend/open_webui/routers/users.py b/backend/open_webui/routers/users.py index 5d8a1057d9..6eca1fcac2 100644 --- a/backend/open_webui/routers/users.py +++ b/backend/open_webui/routers/users.py @@ -484,7 +484,14 @@ async def get_user_info_by_id( ): user = Users.get_user_by_id(user_id, db=db) if user: - return user + groups = Groups.get_groups_by_member_id(user_id, db=db) + return UserInfoResponse( + **{ + **user.model_dump(), + "groups": [{"id": group.id, "name": group.name} for group in groups], + "is_active": Users.is_user_active(user_id, db=db), + } + ) else: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, diff --git a/src/lib/apis/users/index.ts b/src/lib/apis/users/index.ts index cd3b40adcc..ad669c3eb9 100644 --- a/src/lib/apis/users/index.ts +++ b/src/lib/apis/users/index.ts @@ -300,32 +300,6 @@ export const updateUserSettings = async (token: string, settings: object) => { return res; }; -export const getUserById = async (token: string, userId: string) => { - let error = null; - - const res = await fetch(`${WEBUI_API_BASE_URL}/users/${userId}`, { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${token}` - } - }) - .then(async (res) => { - if (!res.ok) throw await res.json(); - return res.json(); - }) - .catch((err) => { - console.error(err); - error = err.detail; - return null; - }); - - if (error) { - throw error; - } - - return res; -}; export const getUserInfoById = async (token: string, userId: string) => { let error = null; diff --git a/src/lib/components/channel/Messages/Message/UserStatusLinkPreview.svelte b/src/lib/components/channel/Messages/Message/UserStatusLinkPreview.svelte index 74b2029266..749ca8df10 100644 --- a/src/lib/components/channel/Messages/Message/UserStatusLinkPreview.svelte +++ b/src/lib/components/channel/Messages/Message/UserStatusLinkPreview.svelte @@ -3,7 +3,7 @@ import { LinkPreview } from 'bits-ui'; const i18n = getContext('i18n'); - import { getUserById } from '$lib/apis/users'; + import { getUserInfoById } from '$lib/apis/users'; import UserStatus from './UserStatus.svelte'; @@ -16,7 +16,7 @@ let user = null; onMount(async () => { if (id) { - user = await getUserById(localStorage.token, id).catch((error) => { + user = await getUserInfoById(localStorage.token, id).catch((error) => { console.error('Error fetching user by ID:', error); return null; }); diff --git a/src/lib/components/workspace/common/MemberSelector.svelte b/src/lib/components/workspace/common/MemberSelector.svelte index 84c700d8f9..d3a49c73f4 100644 --- a/src/lib/components/workspace/common/MemberSelector.svelte +++ b/src/lib/components/workspace/common/MemberSelector.svelte @@ -5,7 +5,7 @@ const i18n = getContext('i18n'); import { user as _user } from '$lib/stores'; - import { getUserById, searchUsers } from '$lib/apis/users'; + import { getUserInfoById, searchUsers } from '$lib/apis/users'; import { WEBUI_API_BASE_URL } from '$lib/constants'; import XMark from '$lib/components/icons/XMark.svelte'; @@ -84,7 +84,7 @@ if (userIds.length > 0) { userIds.forEach(async (id) => { - const res = await getUserById(localStorage.token, id).catch((error) => { + const res = await getUserInfoById(localStorage.token, id).catch((error) => { console.error(error); return null; }); diff --git a/src/routes/s/[id]/+page.svelte b/src/routes/s/[id]/+page.svelte index 39ad1d6ecf..d509798fac 100644 --- a/src/routes/s/[id]/+page.svelte +++ b/src/routes/s/[id]/+page.svelte @@ -12,7 +12,7 @@ import Messages from '$lib/components/chat/Messages.svelte'; - import { getUserById, getUserSettings } from '$lib/apis/users'; + import { getUserInfoById, getUserSettings } from '$lib/apis/users'; import { getModels } from '$lib/apis'; import { toast } from 'svelte-sonner'; import localizedFormat from 'dayjs/plugin/localizedFormat'; @@ -92,7 +92,7 @@ }); if (chat) { - user = await getUserById(localStorage.token, chat.user_id).catch((error) => { + user = await getUserInfoById(localStorage.token, chat.user_id).catch((error) => { console.error(error); return null; });