feat: Pushover - Admin bekommt Nachricht wenn User online geht
This commit is contained in:
@@ -16,7 +16,35 @@ app.use((req, res, next) => {
|
|||||||
const jwt = require('jsonwebtoken');
|
const jwt = require('jsonwebtoken');
|
||||||
const p = jwt.verify(auth.slice(7), process.env.JWT_SECRET || 'dev-secret');
|
const p = jwt.verify(auth.slice(7), process.env.JWT_SECRET || 'dev-secret');
|
||||||
if (p?.id) {
|
if (p?.id) {
|
||||||
|
// Prüfen ob User vorher >15 Min inaktiv war → "gerade online gegangen"
|
||||||
|
const user = db.prepare('SELECT last_active_at, role FROM users WHERE id=?').get(p.id);
|
||||||
|
const wasInactive = !user?.last_active_at ||
|
||||||
|
(Date.now() - new Date(user.last_active_at).getTime()) > 15 * 60 * 1000;
|
||||||
|
|
||||||
db.prepare("UPDATE users SET last_active_at=datetime('now','localtime') WHERE id=?").run(p.id);
|
db.prepare("UPDATE users SET last_active_at=datetime('now','localtime') WHERE id=?").run(p.id);
|
||||||
|
|
||||||
|
// Pushover an alle Admins (außer wenn User selbst Admin ist)
|
||||||
|
if (wasInactive && user?.role !== 'admin') {
|
||||||
|
const username = db.prepare('SELECT username FROM users WHERE id=?').get(p.id)?.username || 'Jemand';
|
||||||
|
const admins = db.prepare(`
|
||||||
|
SELECT p.user_key, p.app_token FROM pushover_settings p
|
||||||
|
JOIN users u ON u.id = p.user_id
|
||||||
|
WHERE u.role = 'admin' AND p.user_key IS NOT NULL AND p.app_token IS NOT NULL
|
||||||
|
`).all();
|
||||||
|
for (const admin of admins) {
|
||||||
|
fetch('https://api.pushover.net/1/messages.json', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify({
|
||||||
|
token: admin.app_token,
|
||||||
|
user: admin.user_key,
|
||||||
|
title: '👤 DickenDock',
|
||||||
|
message: `${username} ist gerade online gegangen.`,
|
||||||
|
priority: -1,
|
||||||
|
}),
|
||||||
|
}).catch(() => {});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch {}
|
} catch {}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user