Whiteboard: Pushover an alle Zugreifer wenn jemand speichert

This commit is contained in:
2026-06-25 22:24:35 +02:00
parent 4ee72a2113
commit 580b49a0a1

View File

@@ -105,7 +105,7 @@ router.get('/:id/data', authenticate, (req, res) => {
// ── Canvas speichern ────────────────────────────────────────────────────────── // ── Canvas speichern ──────────────────────────────────────────────────────────
// Feste Route vor :id-Routen // Feste Route vor :id-Routen
router.post('/:id/save', authenticate, (req, res) => { router.post('/:id/save', authenticate, async (req, res) => {
const me = uid(req); const me = uid(req);
const role = access(req.params.id, me); const role = access(req.params.id, me);
if (!role || role === 'view') return res.status(403).json({ error: 'Kein Schreibzugriff' }); if (!role || role === 'view') return res.status(403).json({ error: 'Kein Schreibzugriff' });
@@ -115,6 +115,35 @@ router.post('/:id/save', authenticate, (req, res) => {
`).run(JSON.stringify(elements || []), JSON.stringify(viewport || {x:0,y:0,zoom:1}), req.params.id); `).run(JSON.stringify(elements || []), JSON.stringify(viewport || {x:0,y:0,zoom:1}), req.params.id);
db.prepare("UPDATE whiteboards SET updated_at=datetime('now','localtime') WHERE id=?").run(req.params.id); db.prepare("UPDATE whiteboards SET updated_at=datetime('now','localtime') WHERE id=?").run(req.params.id);
res.json({ ok: true }); res.json({ ok: true });
// Pushover an alle anderen mit Zugriff (fire & forget)
try {
const wb = db.prepare('SELECT * FROM whiteboards WHERE id=?').get(req.params.id);
const saver = db.prepare('SELECT username FROM users WHERE id=?').get(me);
const message = `${saver?.username || 'Jemand'} hat das Whiteboard "${wb?.title || ''}" gespeichert.`;
// Alle User mit Zugriff: Owner + alle Permissions — außer dem Speichernden selbst
const notify = [];
if (wb && wb.owner_id !== me) notify.push(wb.owner_id);
const perms = db.prepare('SELECT user_id FROM whiteboard_permissions WHERE whiteboard_id=?').all(req.params.id);
for (const p of perms) { if (p.user_id !== me) notify.push(p.user_id); }
for (const userId of [...new Set(notify)]) {
const poCfg = db.prepare('SELECT user_key, app_token FROM pushover_settings WHERE user_id=?').get(userId);
if (!poCfg?.app_token || !poCfg?.user_key) continue;
fetch('https://api.pushover.net/1/messages.json', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
token: poCfg.app_token,
user: poCfg.user_key,
title: '🖊 Whiteboard aktualisiert',
message,
priority: 0,
}),
}).catch(() => {});
}
} catch {}
}); });
// ── Berechtigungen: alle User für Share-Modal ───────────────────────────────── // ── Berechtigungen: alle User für Share-Modal ─────────────────────────────────