From 0f4388d68ab85049c46e7af566d35f4fbf6e4d02 Mon Sep 17 00:00:00 2001 From: Luca <102960244+Luca-Timo@users.noreply.github.com> Date: Sat, 20 Jun 2026 02:18:16 +0200 Subject: [PATCH] fix(slideshow): read globals from app_settings, not the missing settings table slideshowSettings used settingsService.getSetting, which queries db('settings') - a table that does not exist in this app (globals live in app_settings). Every GET /gallery/:slug/show/:token/session and /state therefore threw and returned 500 INTERNAL_ERROR once a valid token resolved. Switch to getAppSetting (utils/appSettings), which reads app_settings where the slideshow_watermark_* and branding_* values are actually written. --- backend/src/routes/gallery.js | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/backend/src/routes/gallery.js b/backend/src/routes/gallery.js index 5bc70798..3475dc35 100644 --- a/backend/src/routes/gallery.js +++ b/backend/src/routes/gallery.js @@ -26,7 +26,9 @@ const { const { buildContentDisposition } = require('../utils/filenameSanitizer'); const { getStorage } = require('../services/storage'); const { setGalleryAuthCookies } = require('../utils/tokenUtils'); -const { getSetting } = require('../services/settingsService'); +// Read globals from app_settings (the real table) — settingsService.getSetting +// queries a non-existent `settings` table and throws. +const { getAppSetting } = require('../utils/appSettings'); const fs = require('fs'); // Get storage path from environment or default @@ -268,21 +270,21 @@ async function slideshowSettings(event) { const wm = event.show_watermark; const inherit = (wm === null || wm === undefined); const enabled = inherit - ? (await getSetting('slideshow_watermark_enabled', false)) === true + ? (await getAppSetting('slideshow_watermark_enabled', false)) === true : (wm === true || wm === 1 || wm === '1'); let watermark = null; if (enabled) { const source = inherit - ? (await getSetting('slideshow_watermark_source', 'logo')) + ? (await getAppSetting('slideshow_watermark_source', 'logo')) : (event.show_watermark_source || 'logo'); const position = inherit - ? (await getSetting('slideshow_watermark_position', 'bottom-right')) + ? (await getAppSetting('slideshow_watermark_position', 'bottom-right')) : (event.show_watermark_position || 'bottom-right'); const opacity = inherit - ? (await getSetting('slideshow_watermark_opacity', 60)) + ? (await getAppSetting('slideshow_watermark_opacity', 60)) : (event.show_watermark_opacity ?? 60); const style = inherit - ? (await getSetting('slideshow_watermark_style', 'white')) + ? (await getAppSetting('slideshow_watermark_style', 'white')) : (event.show_watermark_style || 'white'); // Resolve the chosen logo to a URL. Branding assets come from settings; // the event source uses the event's own hero logo. @@ -290,11 +292,11 @@ async function slideshowSettings(event) { if (source === 'event') { url = event.hero_logo_url || null; } else if (source === 'logo_dark') { - url = await getSetting('branding_logo_url_dark', null); + url = await getAppSetting('branding_logo_url_dark', null); } else if (source === 'favicon') { - url = await getSetting('branding_favicon_url', null); + url = await getAppSetting('branding_favicon_url', null); } else { - url = await getSetting('branding_logo_url', null); + url = await getAppSetting('branding_logo_url', null); } if (url) { watermark = { url, position: position || 'bottom-right', opacity: opacity ?? 60, style: style || 'white' };