From 822a0768cfb1551639920d77c1bb5df1f26e8198 Mon Sep 17 00:00:00 2001 From: fallenbagel <98979876+Fallenbagel@users.noreply.github.com> Date: Sun, 26 May 2024 19:24:26 +0500 Subject: [PATCH] fix: store req.body jellyfin settings temporarily and store only if valid This should fix the issue where settings are saved even if the url was invalid. Now the settings will only be saved if the url is valid. Sort of like a test connection. --- server/routes/settings/index.ts | 38 ++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/server/routes/settings/index.ts b/server/routes/settings/index.ts index b2da75f8..d4737a3c 100644 --- a/server/routes/settings/index.ts +++ b/server/routes/settings/index.ts @@ -266,33 +266,47 @@ settingsRoutes.post('/jellyfin', async (req, res, next) => { order: { id: 'ASC' }, }); - Object.assign(settings.jellyfin, req.body); + const tempJellyfinSettings = { ...settings.jellyfin, ...req.body }; const jellyfinClient = new JellyfinAPI( - getHostname(), + getHostname(tempJellyfinSettings), admin.jellyfinAuthToken ?? '', admin.jellyfinDeviceId ?? '' ); const result = await jellyfinClient.getSystemInfo(); - if (!result?.data?.Id) { + if (!result?.Id) { throw new ApiError(result?.status, ApiErrorCode.InvalidUrl); } + Object.assign(settings.jellyfin, req.body); settings.jellyfin.serverId = result.Id; settings.jellyfin.name = result.ServerName; - settings.save(); } catch (e) { - logger.error('Something went wrong testing Jellyfin connection', { - label: 'API', - errorMessage: e.message, - }); - return next({ - status: 500, - message: 'Unable to connect to Jellyfin.', - }); + if (e instanceof ApiError) { + logger.error('Something went wrong testing Jellyfin connection', { + label: 'API', + status: e.statusCode, + errorMessage: ApiErrorCode.InvalidUrl, + }); + + return next({ + status: e.statusCode, + message: ApiErrorCode.InvalidUrl, + }); + } else { + logger.error('Something went wrong', { + label: 'API', + errorMessage: e.message, + }); + + return next({ + status: 500, + message: 'Something went wrong', + }); + } } return res.status(200).json(settings.jellyfin);