Admin: Test-Push-Button pro User (nur sichtbar wenn Pushover eingerichtet)
This commit is contained in:
@@ -170,6 +170,25 @@ router.put('/users/:id/hidden', authenticate, requireAdmin, (req, res) => {
|
|||||||
res.json({ hidden: newHidden });
|
res.json({ hidden: newHidden });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Test-Pushover an beliebigen User senden
|
||||||
|
router.post('/users/:id/test-push', authenticate, requireAdmin, async (req, res) => {
|
||||||
|
const user = db.prepare('SELECT * FROM users WHERE id=?').get(req.params.id);
|
||||||
|
if (!user) return res.status(404).json({ error: 'Nicht gefunden' });
|
||||||
|
const poCfg = db.prepare('SELECT user_key, app_token FROM pushover_settings WHERE user_id=?').get(user.id);
|
||||||
|
if (!poCfg?.app_token || !poCfg?.user_key) return res.status(400).json({ error: 'Kein Pushover eingerichtet' });
|
||||||
|
const { message = 'Wat is mit meinen Fische?' } = req.body;
|
||||||
|
try {
|
||||||
|
const r = await 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: '📣 DockStation', message, priority: 0 }),
|
||||||
|
});
|
||||||
|
const d = await r.json();
|
||||||
|
if (d.status === 1) res.json({ ok: true });
|
||||||
|
else res.status(500).json({ error: d.errors?.join(', ') || 'Pushover-Fehler' });
|
||||||
|
} catch(e) { res.status(500).json({ error: e.message }); }
|
||||||
|
});
|
||||||
|
|
||||||
// ── WebDAV / Synology NAS Einstellungen ───────────────────────────────────
|
// ── WebDAV / Synology NAS Einstellungen ───────────────────────────────────
|
||||||
router.get('/webdav', authenticate, requireAdmin, (req, res) => {
|
router.get('/webdav', authenticate, requireAdmin, (req, res) => {
|
||||||
const get = k => db.prepare('SELECT value FROM admin_settings WHERE key=?').get(k)?.value || '';
|
const get = k => db.prepare('SELECT value FROM admin_settings WHERE key=?').get(k)?.value || '';
|
||||||
|
|||||||
@@ -2439,6 +2439,19 @@ function UserManagement({ toast }) {
|
|||||||
</div>
|
</div>
|
||||||
{/* Aktions-Buttons */}
|
{/* Aktions-Buttons */}
|
||||||
<div style={{display:'flex',gap:4,flexShrink:0,flexWrap:'wrap',justifyContent:'flex-end'}}>
|
<div style={{display:'flex',gap:4,flexShrink:0,flexWrap:'wrap',justifyContent:'flex-end'}}>
|
||||||
|
{!!u.has_pushover && (
|
||||||
|
<button
|
||||||
|
onClick={async () => {
|
||||||
|
try {
|
||||||
|
await api(`/admin/users/${u.id}/test-push`, { method:'POST', body:{ message:'Wat is mit meinen Fische?' } });
|
||||||
|
toast(`Push an ${u.username} gesendet ✓`);
|
||||||
|
} catch(e) { toast(e.message, 'error'); }
|
||||||
|
}}
|
||||||
|
title={`Test-Push an ${u.username}`}
|
||||||
|
style={{...S.btn('#ff6b9d',true), fontSize:11, padding:'4px 8px'}}>
|
||||||
|
🔔
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
<button onClick={()=>{setResetId(u.id);setResetPw('');}}
|
<button onClick={()=>{setResetId(u.id);setResetPw('');}}
|
||||||
style={{...S.btn('#ffe66d',true),fontSize:10,padding:'4px 8px'}}>🔑</button>
|
style={{...S.btn('#ffe66d',true),fontSize:10,padding:'4px 8px'}}>🔑</button>
|
||||||
<button
|
<button
|
||||||
|
|||||||
Reference in New Issue
Block a user