diff --git a/server/routes/user/index.ts b/server/routes/user/index.ts index 86ab0961..64766bfa 100644 --- a/server/routes/user/index.ts +++ b/server/routes/user/index.ts @@ -22,6 +22,7 @@ import { getSettings } from '@server/lib/settings'; import logger from '@server/logger'; import { isAuthenticated } from '@server/middleware/auth'; import { getHostname } from '@server/utils/getHostname'; +import { normalizeJellyfinGuid } from '@server/utils/jellyfin'; import { isOwnProfileOrAdmin } from '@server/utils/profileMiddleware'; import { Router } from 'express'; import gravatarUrl from 'gravatar-url'; @@ -679,10 +680,20 @@ router.post( jellyfinClient.setUserId(admin.jellyfinUserId ?? ''); const jellyfinUsers = await jellyfinClient.getUsers(); - for (const jellyfinUserId of body.jellyfinUserIds) { - const jellyfinUser = jellyfinUsers.users.find( - (user) => user.Id === jellyfinUserId - ); + const jellyfinUsersById = new Map( + jellyfinUsers.users.map((user) => [ + normalizeJellyfinGuid(user.Id), + user, + ]) + ); + + for (const rawJellyfinUserId of body.jellyfinUserIds) { + const jellyfinUserId = normalizeJellyfinGuid(rawJellyfinUserId); + if (!jellyfinUserId) { + continue; + } + + const jellyfinUser = jellyfinUsersById.get(jellyfinUserId); const user = await userRepository.findOne({ select: ['id', 'jellyfinUserId'], diff --git a/server/utils/jellyfin.ts b/server/utils/jellyfin.ts new file mode 100644 index 00000000..68d3c3c9 --- /dev/null +++ b/server/utils/jellyfin.ts @@ -0,0 +1,15 @@ +export function normalizeJellyfinGuid( + value: string | null | undefined +): string | null { + if (!value) { + return null; + } + + const normalized = value.replace(/-/g, '').toLowerCase(); + + if (!/^[0-9a-f]{32}$/.test(normalized)) { + return null; + } + + return normalized; +}