diff --git a/backend/src/tools/dateien/upload-share.js b/backend/src/tools/dateien/upload-share.js index 14fdbe7..c1d1e95 100644 --- a/backend/src/tools/dateien/upload-share.js +++ b/backend/src/tools/dateien/upload-share.js @@ -1,5 +1,4 @@ const express = require('express'); -const https = require('https'); const bcrypt = require('bcryptjs'); const crypto = require('crypto'); const multer = require('multer'); @@ -9,19 +8,6 @@ const db = require('../../db'); const { authenticate, requireAdmin } = require('../../middleware/auth'); const router = express.Router(); -// Node-seitige URL-Kürzung (kein CORS-Problem) -function shortenUrl(longUrl) { - return new Promise(resolve => { - const url = `https://is.gd/create.php?format=simple&url=${encodeURIComponent(longUrl)}`; - const req = https.get(url, { headers:{'User-Agent':'DickenDock/1.0'} }, res => { - let data = ''; - res.on('data', d => data += d); - res.on('end', () => resolve(data.trim().startsWith('http') ? data.trim() : null)); - }); - req.on('error', () => resolve(null)); - req.setTimeout(5000, () => { req.destroy(); resolve(null); }); - }); -} const UPLOAD_DIR = process.env.UPLOAD_DIR || '/data/uploads'; @@ -55,7 +41,7 @@ router.get('/', authenticate, (req, res) => { res.json({ shares, folder }); }); -router.post('/', authenticate, async (req, res) => { +router.post('/', authenticate, (req, res) => { if (!canUseUploadShare(req.user.id)) return res.status(403).json({ error:'Keine Berechtigung' }); const { password, expires_hours=24, max_size_mb=10 } = req.body; if (!password?.trim()) return res.status(400).json({ error:'Passwort erforderlich' }); @@ -67,14 +53,7 @@ router.post('/', authenticate, async (req, res) => { INSERT INTO upload_shares (user_id,token,password_hash,expires_at,max_size_mb,folder_id,created_at) VALUES (?,?,?,?,?,?,datetime('now','localtime')) `).run(req.user.id, token, hash, expires, Number(max_size_mb), folder.id); - const share = db.prepare('SELECT * FROM upload_shares WHERE id=?').get(r.lastInsertRowid); - // URL direkt beim Erstellen kürzen (server-seitig, kein CORS) - const baseUrl = `${req.protocol}://${req.get('host')}`; - const fullUrl = `${baseUrl}/u/${token}`; - let shortUrl = null; - try { shortUrl = await shortenUrl(fullUrl); } catch {} - if (shortUrl) db.prepare('UPDATE upload_shares SET short_url=? WHERE id=?').run(shortUrl, share.id); - res.json({ ...share, short_url: shortUrl, url: fullUrl }); + res.json(db.prepare('SELECT * FROM upload_shares WHERE id=?').get(r.lastInsertRowid)); }); router.delete('/:id', authenticate, (req, res) => { diff --git a/frontend/src/tools/dateien.jsx b/frontend/src/tools/dateien.jsx index b3d97b8..9263b24 100644 --- a/frontend/src/tools/dateien.jsx +++ b/frontend/src/tools/dateien.jsx @@ -218,24 +218,20 @@ function UploadShareManager({ toast }) { setShortening(null); }; - const copyLink = (shareId, token, shortUrl) => { - // Kurz-URL vom Server nehmen (bereits beim Erstellen generiert), sonst Original - const url = shortUrl || `${window.location.origin}/u/${token}`; - // Synchron kopieren – kein await nötig + const copyLink = (token) => { + const url = `${window.location.origin}/u/${token}`; if (navigator.clipboard) { - navigator.clipboard.writeText(url).catch(() => fallbackCopy(url)); - } else { fallbackCopy(url); } + navigator.clipboard.writeText(url).catch(() => { + const ta = document.createElement('textarea'); + ta.value = url; ta.style.cssText='position:fixed;opacity:0.01'; + document.body.appendChild(ta); ta.focus(); ta.select(); + try { document.execCommand('copy'); } catch {} + document.body.removeChild(ta); + }); + } setCopied(token); setTimeout(()=>setCopied(null), 2500); }; - const fallbackCopy = (text) => { - const ta = document.createElement('textarea'); - ta.value = text; ta.style.cssText = 'position:fixed;top:0;left:0;opacity:0.01'; - document.body.appendChild(ta); ta.focus(); ta.select(); - try { document.execCommand('copy'); } catch {} - document.body.removeChild(ta); - }; - const loadLogs = () => { api('/upload-shares/logs').then(setLogs).catch(()=>{}); setShowLogs(true); @@ -345,7 +341,7 @@ function UploadShareManager({ toast }) {
{!!s.is_active && !expired && ( <> -