diff --git a/backend/src/tools/dateien/routes.js b/backend/src/tools/dateien/routes.js index dfdb304..bfd2f43 100644 --- a/backend/src/tools/dateien/routes.js +++ b/backend/src/tools/dateien/routes.js @@ -196,6 +196,23 @@ router.post('/', authenticate, (req, res) => { }); }); +router.get('/storage', authenticate, (req, res) => { + const uid = req.user.id; + const used = db.prepare('SELECT COALESCE(SUM(size),0) AS s FROM files WHERE user_id=?').get(uid).s; + const maxMb = parseInt(getSetting('file_max_size_mb') || '50'); + const maxCount = parseInt(getSetting('file_max_count') || '20'); + const max = maxMb * maxCount * 1024 * 1024; + let diskFree = null; + try { + const { execSync } = require('child_process'); + const out = execSync(`df -k "${process.env.UPLOAD_DIR || '/data/uploads'}"`, { timeout:3000 }).toString(); + const line = out.trim().split('\n').pop(); + const parts = line.trim().split(/\s+/); + if (parts[3]) diskFree = parseInt(parts[3]) * 1024; + } catch {} + res.json({ used, max, diskFree }); +}); + router.get('/:id/download', authenticate, async (req, res) => { const uid = req.user.id; const file = db.prepare('SELECT * FROM files WHERE id=?').get(req.params.id); @@ -279,22 +296,6 @@ router.delete('/:id/share/:userId', authenticate, (req, res) => { res.json({ success: true }); }); -router.get('/storage', authenticate, (req, res) => { - const uid = req.user.id; - const used = db.prepare('SELECT COALESCE(SUM(size),0) AS s FROM files WHERE user_id=?').get(uid).s; - const max = parseInt(getSetting('file_max_size_mb') || '50') * - parseInt(getSetting('file_max_count') || '20') * 1024 * 1024; - // Disk space via Node - const { execSync } = require('child_process'); - let diskFree = null; - try { - const out = execSync(`df -k "${process.env.UPLOAD_DIR || '/data/uploads'}" | tail -1`).toString(); - const parts = out.trim().split(/\s+/); - diskFree = parseInt(parts[3]) * 1024; // available bytes - } catch {} - res.json({ used, max, diskFree }); -}); - // Settings router.get('/settings', authenticate, requireAdmin, (req, res) => { const s = db.prepare('SELECT * FROM admin_settings').all(); diff --git a/frontend/src/tools/nachrichten.jsx b/frontend/src/tools/nachrichten.jsx index 55bb5c2..7abf1ec 100644 --- a/frontend/src/tools/nachrichten.jsx +++ b/frontend/src/tools/nachrichten.jsx @@ -185,14 +185,15 @@ export default function Nachrichten({ toast, mobile }) { setDecrypted({}); }; - const send = async () => { - if (!text.trim() || !kp || !activeUser) return; + const send = async (overrideText) => { + const msg = (overrideText ?? text).trim(); + if (!msg || !kp || !activeUser) return; if (!activeUser.public_key) { toast('Empfänger hat noch keinen Schlüssel', 'error'); return; } if (sharedKey === 'error') { toast('Schlüssel inkompatibel – Empfänger muss Schlüssel neu generieren', 'error'); return; } if (!sharedKey) { toast('Schlüssel wird vorbereitet…', 'error'); return; } setSending(true); try { - const { encrypted_content, iv } = await encryptMsg(sharedKey, text.trim()); + const { encrypted_content, iv } = await encryptMsg(sharedKey, msg); await api(`/tools/nachrichten/messages/${activeUser.id}`, { body: { encrypted_content, iv } }); setText(''); await loadMessages(activeUser.id); @@ -439,18 +440,19 @@ export default function Nachrichten({ toast, mobile }) { Senden nicht möglich ) : ( -