From 69ee531992d50e5e6e41af67265e6951c82eae25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pascal=20Prie=C3=9Fnitz?= Date: Wed, 3 Dec 2025 10:46:37 +0100 Subject: [PATCH] [deploy] filter dashboard guilds to manageable ones --- src/web/routes/api.ts | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/web/routes/api.ts b/src/web/routes/api.ts index 5439391..c1d2fa2 100644 --- a/src/web/routes/api.ts +++ b/src/web/routes/api.ts @@ -30,13 +30,29 @@ router.get('/me', requireAuth, (req, res) => { res.json({ user: { ...req.session.user, isAdmin } }); }); -router.get('/guilds', requireAuth, (_req, res) => { +router.get('/guilds', requireAuth, (req, res) => { + const sessionGuilds = Array.isArray(req.session?.guilds) ? req.session.guilds : []; + // Only allow guilds the user owns or can manage (manage_guild or admin) and where the bot is present + const allowedIds = new Set( + sessionGuilds + .filter((g: any) => { + if (!g) return false; + if (g.owner) return true; + const perms = g.permissions ? BigInt(g.permissions) : 0n; + const hasAdmin = (perms & 0x8n) === 0x8n; + const hasManageGuild = (perms & 0x20n) === 0x20n; + return hasAdmin || hasManageGuild; + }) + .map((g: any) => g.id) + ); const guilds = - context.client?.guilds.cache.map((g) => ({ - id: g.id, - name: g.name, - icon: g.icon - })) ?? []; + context.client?.guilds.cache + .filter((g) => allowedIds.has(g.id)) + .map((g) => ({ + id: g.id, + name: g.name, + icon: g.icon + })) ?? []; res.json({ guilds }); });