From 186829a07eb9199d28e2b275c70fbf4ca065f9a7 Mon Sep 17 00:00:00 2001 From: Gauthier Date: Tue, 9 Jul 2024 17:31:29 +0200 Subject: [PATCH] fix(jellyfinapi): add migration script for Jellyfin API key --- .../migrations/0002_migrate_apitokens.ts | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 server/lib/settings/migrations/0002_migrate_apitokens.ts diff --git a/server/lib/settings/migrations/0002_migrate_apitokens.ts b/server/lib/settings/migrations/0002_migrate_apitokens.ts new file mode 100644 index 00000000..46340433 --- /dev/null +++ b/server/lib/settings/migrations/0002_migrate_apitokens.ts @@ -0,0 +1,36 @@ +import JellyfinAPI from '@server/api/jellyfin'; +import { MediaServerType } from '@server/constants/server'; +import { getRepository } from '@server/datasource'; +import { User } from '@server/entity/User'; +import type { AllSettings } from '@server/lib/settings'; +import { getHostname } from '@server/utils/getHostname'; + +const migrateApiTokens = async (settings: any): Promise => { + const mediaServerType = settings.main.mediaServerType; + if ( + !settings.jellyfin.apiKey && + (mediaServerType === MediaServerType.JELLYFIN || + mediaServerType === MediaServerType.EMBY) + ) { + const userRepository = getRepository(User); + const admin = await userRepository.findOne({ + where: { id: 1 }, + select: ['id', 'jellyfinAuthToken', 'jellyfinUserId', 'jellyfinDeviceId'], + order: { id: 'ASC' }, + }); + if (!admin) { + return settings; + } + const jellyfinClient = new JellyfinAPI( + getHostname(settings.jellyfin), + admin.jellyfinAuthToken, + admin.jellyfinDeviceId + ); + jellyfinClient.setUserId(admin.jellyfinUserId ?? ''); + const apiKey = await jellyfinClient.createApiToken('Jellyseerr'); + settings.jellyfin.apiKey = apiKey; + } + return settings; +}; + +export default migrateApiTokens;