From 522b9f4665d18e3e828fc9389165f76eeff75e62 Mon Sep 17 00:00:00 2001 From: Mikei386 <44135113+Mikei386@users.noreply.github.com> Date: Tue, 23 Jun 2026 15:21:42 +0200 Subject: [PATCH] Add upload buttons and ZIP downloads --- build-plugin.sh | 2 +- packages/u-navigator-2026.06.23.r040.tgz | Bin 29241 -> 0 bytes packages/u-navigator-2026.06.23.r041.tgz | Bin 0 -> 31104 bytes .../plugins/u-navigator/api/download.php | 122 ++++++++++++++++++ .../emhttp/plugins/u-navigator/api/upload.php | 28 +++- server/public/app.js | 72 +++++++++-- server/public/styles.css | 6 +- u-navigator.plg | 4 +- 8 files changed, 219 insertions(+), 15 deletions(-) delete mode 100644 packages/u-navigator-2026.06.23.r040.tgz create mode 100644 packages/u-navigator-2026.06.23.r041.tgz create mode 100644 plugin-root/usr/local/emhttp/plugins/u-navigator/api/download.php diff --git a/build-plugin.sh b/build-plugin.sh index cf862e2..bcbf832 100755 --- a/build-plugin.sh +++ b/build-plugin.sh @@ -2,7 +2,7 @@ set -eu PLUGIN="u-navigator" -VERSION="2026.06.23.r040" +VERSION="2026.06.23.r041" PKG_DIR="packages" WORK_DIR=".plugin-build" PKG_NAME="${PLUGIN}-${VERSION}.tgz" diff --git a/packages/u-navigator-2026.06.23.r040.tgz b/packages/u-navigator-2026.06.23.r040.tgz deleted file mode 100644 index 299a63799c6f8241353561fdffaa3d8e19b7d379..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29241 zcmZs?W0WRM7cAPgZQIkf-P5*h+qSJ~W7@WD+qP{zXTJB|b$*@tnN=ATtJcmPnXz{f zMneIu26I~hfnIgXI^#+u5oxiQSzA}~-R3IOxq(^$6ZO0iOQVG+Y3N?8s7I@~uGX!o zphzZYf+d_yfeAJ_bP z*|YZC;pAa4_)th)jKZZDdSKv%UdJ|P`_O6k>MJ0+4kzaUlyd!_ZvoGk{@=rxj9)dc zR%0Dgy~2_H27sUH)Z)vaS$MNEQVEJS3dfkbC>7v%> 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

Z z-6WKujhkH`G|vq{jzON~+8?@ECjZ*nPkQrDVQkpX@w%VPXnedIe`dz@Y}fp_v3>)( zhw9z8Wzw~-8ol3)hvymbd>rGQ>}B^`VizKyqz#Cb`Ke*5#7h{QUKJyEyi7Z=YjRh} zsM20sV6n(-nw+Jpjy};Ys+h&;0I;zI!eYZq`yftR1$;<(ZXNMUa)ss@msdi&>sKox?)r5W(XRc~isW7UOJzR7oxi1$b>lBjQ1|_oN`-?o z^A*2l+jnJCcgJyXay0bQ?rFKS^2dWlZT;|lyV|*4UMcb0EoT!dH860*iY{VxH@#E) zTfg>0qjtZ3R6D#!?Pu?1%>`ikJ*=}go4uMfw^{2NR%6E_OA`^3_C*_e>Ags|h^p+$ zBh#b}RehONi8y?jy z;uwE1m;Eop_00l+%y0kOZa3E!_CL4sEbM*ogczjO0}8`%FgIt%~LTX}Nqf7`3= z#@ZtO@6Z34dH&yc^`9R9tG&8rum8h7PM+tKMm|h28wvkm_ zbA+hNF`W*P46$A?NCJxd#K#?PvC@WYrrwx1%Tut5NYXHzxLE}SaU6^Xem5wW>VQc0 zZ!!x11Oa|HKx_)s#J(HGjFE?H^U62#q|y?0gshd!m5hAwD4Fbw$mWod)FkNf8-3vB zwUanV=v_nH;YgNAl>c`|er3Njk|EUu&5_@#IUC8V}YPYhJRUK7ptY#Sr- zK;+;B3B71u_SATVYW245ke-(9+%jhry!NK{=j*$tOs|N~Fs{PMJg(9>r?o4GWSVkr zsdY;aiH(>?=~-0M#%vVDtC8|^!uVXWbLBZ+F6PU{i=955M_!$CFzo1yO;c}OMl2*3 z9~*v3%VMqKPR~>o+>7D8cPeXd)3^GRK5yx5p1m%pF|Tu(DVH; z*MZahKMolE{O>1$hy6cbI;QmO-v9H@!zu0m*Lwe-wtw>W+*|*_w)+16DZs~qWSiT3 zRt22O|K(`3Ua!U45Jfp10h&T<33EoPD8DW?0oR$%Y!knnl|>#0JiA5mq|7FongB&+ ztu(N{wpuRBd^o6U)#W`^QM!|wfC5Nil!<&$DNDnR_O%E^qYy%a))243*-98BI`)>y zA#?DUbdiNLa+kT+rV^k@VWaJqh8yiuO*$w5*%K0pT0^`Bz%vM}LA81I&7xX%Nrhb& zU$E^BLN79+@K6yGlp-q|6_7#-j{$vBduu=x##S63<})NSB&x3t>{Oa`U?N8Eh_r7U z$F*97)>ItWBB-u~lX<{Pih8+M05$_7mC#|BB%$t3j%LUTY%tm4F5to??mk_h#{B@I ThaP(9;WYRTN-THj0FnX#R$zi& diff --git a/packages/u-navigator-2026.06.23.r041.tgz b/packages/u-navigator-2026.06.23.r041.tgz new file mode 100644 index 0000000000000000000000000000000000000000..4be5f6b3154bbfa96e95711fee4fcdb822dee158 GIT binary patch literal 31104 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%0AbO6kluJq3B6cmnJzDJq{k{i`6&s~tbkv`qQZ0= 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

FLD$@CAsKiZa`JB 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, ZipArchive::OVERWRITE) !== true) { + @unlink($zipFile); + unav_download_error(500, 'Could not create ZIP archive'); +} + +$usedNames = []; +foreach ($items as $item) { + $baseName = unav_zip_unique_name(unav_zip_safe_name(basename($item['path'])), $usedNames); + unav_zip_add_path($zip, $item['path'], $baseName); +} +$zip->close(); + +$downloadName = count($items) === 1 ? unav_zip_safe_name(basename($items[0]['path'])) . '.zip' : 'u-navigator-download.zip'; +unav_stream_file($zipFile, $downloadName, true); + +function unav_download_paths(): array { + if (isset($_GET['paths'])) { + $decoded = json_decode((string)$_GET['paths'], true); + if (!is_array($decoded)) { + unav_download_error(400, 'Invalid paths'); + } + $paths = array_values(array_filter($decoded, fn($item) => is_string($item) && $item !== '')); + } else { + $paths = [$_GET['path'] ?? '']; + } + if (!$paths) { + unav_download_error(400, 'Missing path'); + } + return array_slice($paths, 0, 200); +} + +function unav_stream_file(string $path, string $name, bool $deleteAfter = false): void { + if (!is_file($path) || !is_readable($path)) { + if ($deleteAfter) { + @unlink($path); + } + unav_download_error(404, 'Download file not found'); + } + header('Content-Type: application/octet-stream'); + header('Content-Length: ' . filesize($path)); + header('Content-Disposition: attachment; filename="' . addcslashes($name, '"\\') . '"'); + header('X-Content-Type-Options: nosniff'); + readfile($path); + if ($deleteAfter) { + @unlink($path); + } + exit; +} + +function unav_zip_add_path(ZipArchive $zip, string $path, string $zipPath): void { + if (is_link($path)) { + return; + } + $real = realpath($path); + if ($real === false) { + return; + } + unav_root_for_real($real); + + if (is_file($real)) { + $zip->addFile($real, $zipPath); + return; + } + if (!is_dir($real)) { + return; + } + $zip->addEmptyDir($zipPath); + foreach (scandir($real) ?: [] as $entry) { + if ($entry === '.' || $entry === '..') { + continue; + } + unav_zip_add_path($zip, $real . '/' . $entry, $zipPath . '/' . unav_zip_safe_name($entry)); + } +} + +function unav_zip_safe_name(string $name): string { + $safe = trim(str_replace(["\0", '/', '\\'], '-', $name)); + return $safe === '' || $safe === '.' || $safe === '..' ? 'download' : $safe; +} + +function unav_zip_unique_name(string $name, array &$used): string { + $candidate = $name; + $index = 2; + while (isset($used[$candidate])) { + $candidate = $name . ' ' . $index; + $index++; + } + $used[$candidate] = true; + return $candidate; +} + +function unav_download_error(int $status, string $message): void { + http_response_code($status); + header('Content-Type: text/plain; charset=utf-8'); + echo $message; + exit; +} diff --git a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/upload.php b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/upload.php index f22f4e5..cf81f2a 100644 --- a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/upload.php +++ b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/upload.php @@ -12,11 +12,22 @@ foreach ($_FILES['files']['name'] ?? [] as $index => $name) { if ($_FILES['files']['error'][$index] !== UPLOAD_ERR_OK) { unav_error(400, 'Upload failed'); } - $safeName = basename($name); + $safeName = unav_upload_safe_relative_path((string)$name); + $relativeParent = dirname($safeName); + if ($relativeParent !== '.') { + $parentCandidate = $target['path'] . '/' . $relativeParent; + unav_root_for_real($target['path']); + if (!is_dir($parentCandidate) && !mkdir($parentCandidate, 0777, true) && !is_dir($parentCandidate)) { + unav_error(500, 'Could not create upload directory'); + } + } $destination = unav_destination_path($target['path'] . '/' . $safeName); if (file_exists($destination['path'])) { unav_error(409, 'Destination already exists'); } + if (!is_dir(dirname($destination['path']))) { + unav_error(500, 'Could not create upload directory'); + } if (!move_uploaded_file($_FILES['files']['tmp_name'][$index], $destination['path'])) { unav_error(500, 'Could not store uploaded file'); } @@ -27,3 +38,18 @@ foreach ($_FILES['files']['name'] ?? [] as $index => $name) { } unav_json(['uploaded' => $uploaded], 201); + +function unav_upload_safe_relative_path(string $name): string { + $parts = []; + foreach (preg_split('#[/\\\\]+#', $name) ?: [] as $part) { + $part = trim($part); + if ($part === '' || $part === '.' || $part === '..') { + continue; + } + $parts[] = str_replace("\0", '', $part); + } + if (!$parts) { + unav_error(400, 'Invalid upload filename'); + } + return implode('/', $parts); +} diff --git a/server/public/app.js b/server/public/app.js index ee89678..fc659e7 100644 --- a/server/public/app.js +++ b/server/public/app.js @@ -270,6 +270,10 @@ function renderExplorer(body, win) { + + + +
@@ -287,6 +291,19 @@ function renderExplorer(body, win) { body.querySelector('[data-action="up"]').addEventListener('click', () => loadExplorer(win, parentPath(data.path))); body.querySelector('[data-action="view-list"]').addEventListener('click', () => setExplorerView(win, 'list')); body.querySelector('[data-action="view-icons"]').addEventListener('click', () => setExplorerView(win, 'icons')); + body.querySelector('[data-action="upload-files"]').addEventListener('click', () => body.querySelector('[data-upload="files"]').click()); + body.querySelector('[data-action="upload-folder"]').addEventListener('click', () => body.querySelector('[data-upload="folder"]').click()); + for (const inputEl of body.querySelectorAll('.upload-input')) { + inputEl.addEventListener('change', async () => { + try { + await uploadFileList(win, [...inputEl.files], data.path); + } catch (error) { + showError(error); + } finally { + inputEl.value = ''; + } + }); + } const dropZone = body.querySelector('.drop-zone'); dropZone.addEventListener('dragenter', (event) => { @@ -872,19 +889,28 @@ async function handleDrop(event, win, targetPath) { const files = getDroppedFiles(event); if (files.length) { - const form = new FormData(); - for (const file of files) { - form.append('files', file, file.name); - } - appendCsrf(form); - await fetchChecked(apiUrl(`upload.php?path=${encodeURIComponent(targetPath)}`), { - method: 'POST', - body: form - }); - await loadExplorer(win, targetPath); + await uploadFileList(win, files, targetPath); } } +async function uploadFileList(win, files, targetPath) { + if (isReadOnly()) { + showError(new Error('Read-only mode ist aktiv.')); + return; + } + if (!files.length) return; + const form = new FormData(); + for (const file of files) { + form.append('files', file, file.webkitRelativePath || file.name); + } + appendCsrf(form); + await fetchChecked(apiUrl(`upload.php?path=${encodeURIComponent(targetPath)}`), { + method: 'POST', + body: form + }); + await loadExplorer(win, targetPath); +} + async function createJob(type, source, destination = null, refreshWindowIds = [], extra = {}) { if (['move', 'copy', 'permissions'].includes(type) && isReadOnly()) { showError(new Error('Read-only mode ist aktiv.')); @@ -1034,6 +1060,25 @@ function openPermissionsDialog(win, entry) { render(); } +function downloadEntries(win, entry = null) { + const entries = entry && selectedPathSet(win).has(entry.path) ? selectedEntries(win) : (entry ? [entry] : [{ + path: win.data.path, + name: basename(win.data.path), + type: 'directory' + }]); + const paths = entries.map((item) => item.path); + const query = paths.length === 1 + ? `path=${encodeURIComponent(paths[0])}` + : `paths=${encodeURIComponent(JSON.stringify(paths))}`; + recordDebug('download.start', { paths }); + const link = document.createElement('a'); + link.href = apiUrl(`download.php?${query}`); + link.download = ''; + document.body.appendChild(link); + link.click(); + link.remove(); +} + function renderPermissionsDialog() { const dialog = state.permissionsDialog; const overlay = document.createElement('div'); @@ -1250,6 +1295,7 @@ function renderContextMenu() { actions.push(['Vorschau', () => openPreview(entry, win.id)]); } actions.push(['Eigenschaften', () => showPropertiesForEntry(win, entry)]); + actions.push(['Herunterladen', () => downloadEntries(win, entry)]); if (!isReadOnly()) { actions.push(['Umbenennen', () => renameEntry(win, entry)]); actions.push(['Berechtigungen...', () => openPermissionsDialog(win, entry)]); @@ -1257,6 +1303,7 @@ function renderContextMenu() { actions.push(['Verschieben nach...', () => promptTransfer(win, entry, 'move')]); } } else { + actions.push(['Aktuellen Ordner herunterladen', () => downloadEntries(win, null)]); actions.push(['Neu laden', () => loadExplorer(win, win.data.path)]); } @@ -1886,6 +1933,11 @@ function dirname(value) { return `/${parts.slice(0, -1).join('/')}`; } +function basename(value) { + const parts = String(value || '').split('/').filter(Boolean); + return parts[parts.length - 1] || ''; +} + function extensionOf(name) { const value = String(name || ''); const index = value.lastIndexOf('.'); diff --git a/server/public/styles.css b/server/public/styles.css index e0676b2..d68c0e8 100644 --- a/server/public/styles.css +++ b/server/public/styles.css @@ -186,7 +186,7 @@ margin-bottom: 10px; } -.u-nav .pathbar input { +.u-nav .pathbar input:not(.upload-input) { background: var(--surface-2); border: 1px solid var(--line); border-radius: 6px; @@ -209,6 +209,10 @@ flex: 0 0 auto; } +.u-nav .upload-input { + display: none; +} + .u-nav .drop-zone { border: 1px dashed transparent; border-radius: 8px; diff --git a/u-navigator.plg b/u-navigator.plg index b946acc..8f63d42 100644 --- a/u-navigator.plg +++ b/u-navigator.plg @@ -1,7 +1,7 @@ - + @@ -24,7 +24,7 @@ https://git.casaderoll.de/michael/Unraid-Navigator/raw/branch/main/packages/&package; -7c89a55e074a1345cf67197cfcdb54c7 +381ba21ef4664561c9a69ddada5b5b15