From 3cd8ebd0b6c189b5466c68c4125503b9d2bd67a9 Mon Sep 17 00:00:00 2001 From: posimai Date: Mon, 6 Apr 2026 09:09:26 +0900 Subject: [PATCH] fix: Feed API POST auth gate + sanitize e.message in error responses --- server.js | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/server.js b/server.js index 3937b2e9..ea1eed90 100644 --- a/server.js +++ b/server.js @@ -2060,7 +2060,7 @@ ${excerpt} try { const count = await runFeedFetch(); res.json({ ok: true, fetched: count }); - } catch (e) { console.error(e); res.status(500).json({ error: e.message }); } + } catch (e) { console.error(e); res.status(500).json({ error: 'Internal server error' }); } }); // ── TTS (VOICEVOX) ───────────────────────────────────────────── @@ -2382,7 +2382,7 @@ ${excerpt} if (result.rows.length === 0) return res.status(404).json({ error: 'グループが見つかりません' }); res.json(result.rows[0]); } catch (e) { - res.status(500).json({ error: e.message }); + res.status(500).json({ error: 'Internal server error' }); } }); @@ -2395,7 +2395,7 @@ ${excerpt} ); res.json(result.rows); } catch (e) { - res.status(500).json({ error: e.message }); + res.status(500).json({ error: 'Internal server error' }); } }); @@ -2423,7 +2423,7 @@ ${excerpt} if (url) archiveShare(share.id, url); } catch (e) { console.error('[together/share]', e.message); - res.status(500).json({ error: e.message }); + res.status(500).json({ error: 'Internal server error' }); } }); @@ -2440,7 +2440,7 @@ ${excerpt} res.json({ ok: true }); } catch (e) { console.error('[together/share DELETE]', e.message); - res.status(500).json({ error: e.message }); + res.status(500).json({ error: 'Internal server error' }); } }); @@ -2466,7 +2466,7 @@ ${excerpt} res.json(result.rows); } catch (e) { console.error('[together/feed]', e.message); - res.status(500).json({ error: e.message }); + res.status(500).json({ error: 'Internal server error' }); } }); @@ -2480,7 +2480,7 @@ ${excerpt} if (result.rows.length === 0) return res.status(404).json({ error: '見つかりません' }); res.json(result.rows[0]); } catch (e) { - res.status(500).json({ error: e.message }); + res.status(500).json({ error: 'Internal server error' }); } }); @@ -2509,7 +2509,7 @@ ${excerpt} } } catch (e) { console.error('[together/react]', e.message); - res.status(500).json({ error: e.message }); + res.status(500).json({ error: 'Internal server error' }); } }); @@ -2522,7 +2522,7 @@ ${excerpt} ); res.json(result.rows); } catch (e) { - res.status(500).json({ error: e.message }); + res.status(500).json({ error: 'Internal server error' }); } }); @@ -2540,7 +2540,7 @@ ${excerpt} res.json(result.rows[0]); } catch (e) { console.error('[together/comments POST]', e.message); - res.status(500).json({ error: e.message }); + res.status(500).json({ error: 'Internal server error' }); } }); @@ -2564,7 +2564,7 @@ ${excerpt} res.json(result.rows); } catch (e) { console.error('[together/search]', e.message); - res.status(500).json({ error: e.message }); + res.status(500).json({ error: 'Internal server error' }); } }); @@ -2665,7 +2665,7 @@ ${excerpt} }); }); req2.on('timeout', () => { req2.destroy(); res.status(500).json({ error: 'Timeout' }); }); - req2.on('error', (e) => { res.status(500).json({ error: e.message, code: e.code }); }); + req2.on('error', (e) => { console.error('[proxy] error:', e.code, e.message); res.status(500).json({ error: 'Proxy error', code: e.code }); }); req2.end(); }); @@ -2710,7 +2710,7 @@ ${excerpt} req2.on('error', (e) => { console.error('[atlas/tailscale-scan] error:', e.code, e.message); - res.status(500).json({ error: e.message, code: e.code }); + res.status(500).json({ error: 'Scan error', code: e.code }); }); req2.end();