From aa58014cd79cf2ad8f0cec5baa5a68cdd166e53c Mon Sep 17 00:00:00 2001 From: Mikei386 <44135113+Mikei386@users.noreply.github.com> Date: Tue, 23 Jun 2026 22:18:39 +0200 Subject: [PATCH] Add upload overwrite confirmation --- build-plugin.sh | 2 +- packages/u-navigator-2026.06.23.r048.tgz | Bin 33030 -> 0 bytes packages/u-navigator-2026.06.23.r049.tgz | Bin 0 -> 33370 bytes .../emhttp/plugins/u-navigator/api/upload.php | 38 +++++++++++++++--- server/public/app.js | 28 +++++++++++-- u-navigator.plg | 4 +- 6 files changed, 60 insertions(+), 12 deletions(-) delete mode 100644 packages/u-navigator-2026.06.23.r048.tgz create mode 100644 packages/u-navigator-2026.06.23.r049.tgz diff --git a/build-plugin.sh b/build-plugin.sh index f7f042b..54ab595 100755 --- a/build-plugin.sh +++ b/build-plugin.sh @@ -2,7 +2,7 @@ set -eu PLUGIN="u-navigator" -VERSION="2026.06.23.r048" +VERSION="2026.06.23.r049" PKG_DIR="packages" WORK_DIR=".plugin-build" PKG_NAME="${PLUGIN}-${VERSION}.tgz" diff --git a/packages/u-navigator-2026.06.23.r048.tgz b/packages/u-navigator-2026.06.23.r048.tgz deleted file mode 100644 index 5eee4672f742d5abadcb136610fa135ce5e74463..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33030 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

7c@P%YmJFaNzm-EDOIn-uL!@ zs$l^|ztmuDuNT=Ld=86#lNG?ShnFm{$OC^00@j0p$6tvwX0w3G@-W!Z^gWwaAHo9l ZVt0VpJ-cW3?4ESb{{br&h>`%@0syPUKMVi> diff --git a/packages/u-navigator-2026.06.23.r049.tgz b/packages/u-navigator-2026.06.23.r049.tgz new file mode 100644 index 0000000000000000000000000000000000000000..5fdc6dc7015f2e97ba37400636c9e954ea6d84ce GIT binary patch literal 33370 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 G= $totalChunks) { unav_error(400, 'Invalid upload chunk'); } - $destination = unav_prepare_upload_destination($target['path'], $relativeName); + $destination = unav_prepare_upload_destination($target['path'], $relativeName, $overwrite); $temporary = $destination['path'] . '.u-nav-upload'; if ($chunkIndex === 0) { @unlink($temporary); @@ -30,6 +31,16 @@ if (($_POST['uploadMode'] ?? '') === 'chunk') { unav_error(500, 'Could not write upload chunk'); } $complete = $chunkIndex === $totalChunks - 1; + if ($complete && file_exists($destination['path'])) { + if (!$overwrite) { + @unlink($temporary); + unav_error(409, 'Destination already exists'); + } + if (is_dir($destination['path']) || !@unlink($destination['path'])) { + @unlink($temporary); + unav_error(409, 'Destination cannot be overwritten'); + } + } if ($complete && !rename($temporary, $destination['path'])) { @unlink($temporary); unav_error(500, 'Could not finalize upload'); @@ -47,7 +58,11 @@ if (($_POST['uploadMode'] ?? '') === 'chunk') { if (isset($_GET['relativePath']) || isset($_SERVER['HTTP_X_UNAV_RELATIVE_PATH'])) { $relativeName = (string)($_GET['relativePath'] ?? $_SERVER['HTTP_X_UNAV_RELATIVE_PATH']); - $destination = unav_prepare_upload_destination($target['path'], $relativeName); + $overwrite = unav_upload_bool($_GET['overwrite'] ?? ($_SERVER['HTTP_X_UNAV_OVERWRITE'] ?? false)); + $destination = unav_prepare_upload_destination($target['path'], $relativeName, $overwrite); + if ($overwrite && file_exists($destination['path']) && !is_dir($destination['path']) && !@unlink($destination['path'])) { + unav_error(409, 'Destination cannot be overwritten'); + } $bytes = file_put_contents($destination['path'], file_get_contents('php://input'), LOCK_EX); if ($bytes === false) { unav_error(500, 'Could not store uploaded file'); @@ -61,6 +76,7 @@ if (isset($_GET['relativePath']) || isset($_SERVER['HTTP_X_UNAV_RELATIVE_PATH']) } $uploaded = []; +$overwrite = unav_upload_bool($_POST['overwrite'] ?? false); $names = unav_upload_array($_FILES['files']['name'] ?? []); $errors = unav_upload_array($_FILES['files']['error'] ?? []); $tmpNames = unav_upload_array($_FILES['files']['tmp_name'] ?? []); @@ -70,7 +86,10 @@ foreach ($names as $index => $name) { unav_error(400, 'Upload failed'); } $relativeName = $relativePaths[$index] ?? $name; - $destination = unav_prepare_upload_destination($target['path'], (string)$relativeName); + $destination = unav_prepare_upload_destination($target['path'], (string)$relativeName, $overwrite); + if ($overwrite && file_exists($destination['path']) && !is_dir($destination['path']) && !@unlink($destination['path'])) { + unav_error(409, 'Destination cannot be overwritten'); + } if (!move_uploaded_file($tmpNames[$index] ?? '', $destination['path'])) { unav_error(500, 'Could not store uploaded file'); } @@ -82,7 +101,7 @@ foreach ($names as $index => $name) { unav_json(['uploaded' => $uploaded], 201); -function unav_prepare_upload_destination(string $targetPath, string $relativeName): array { +function unav_prepare_upload_destination(string $targetPath, string $relativeName, bool $overwrite = false): array { $safeName = unav_upload_safe_relative_path($relativeName); $relativeParent = dirname($safeName); if ($relativeParent !== '.') { @@ -94,7 +113,12 @@ function unav_prepare_upload_destination(string $targetPath, string $relativeNam } $destination = unav_destination_path($targetPath . '/' . $safeName); if (file_exists($destination['path'])) { - unav_error(409, 'Destination already exists'); + if (!$overwrite) { + unav_error(409, 'Destination already exists'); + } + if (is_dir($destination['path'])) { + unav_error(409, 'Destination directory already exists'); + } } if (!is_dir(dirname($destination['path']))) { unav_error(500, 'Could not create upload directory'); @@ -126,3 +150,7 @@ function unav_upload_safe_relative_path(string $name): string { } return implode('/', $parts); } + +function unav_upload_bool($value): bool { + return filter_var($value, FILTER_VALIDATE_BOOLEAN); +} diff --git a/server/public/app.js b/server/public/app.js index 69fcb9b..07a95a5 100644 --- a/server/public/app.js +++ b/server/public/app.js @@ -904,13 +904,27 @@ async function uploadFileList(win, files, targetPath) { const uploadItems = normalizeUploadItems(files); for (const [index, item] of uploadItems.entries()) { recordDebug('upload.file.request', { path: item.path, size: item.file.size, index: index + 1, total: uploadItems.length }); - await uploadFileChunked(targetPath, item.file, item.path); - recordDebug('upload.file.done', { path: item.path, index: index + 1, total: uploadItems.length }); + try { + await uploadFileChunked(targetPath, item.file, item.path, false); + recordDebug('upload.file.done', { path: item.path, index: index + 1, total: uploadItems.length, overwrite: false }); + } catch (error) { + if (error.status !== 409) { + throw error; + } + const overwrite = window.confirm(`"${item.path}" existiert bereits.\n\nVorhandene Datei überschreiben?`); + recordDebug('upload.overwrite.prompt', { path: item.path, overwrite }); + if (!overwrite) { + recordDebug('upload.file.skipped', { path: item.path, index: index + 1, total: uploadItems.length }); + continue; + } + await uploadFileChunked(targetPath, item.file, item.path, true); + recordDebug('upload.file.done', { path: item.path, index: index + 1, total: uploadItems.length, overwrite: true }); + } } await loadExplorer(win, targetPath); } -async function uploadFileChunked(targetPath, file, relativePath) { +async function uploadFileChunked(targetPath, file, relativePath, overwrite = false) { const chunkSize = 256 * 1024; const totalChunks = Math.max(1, Math.ceil(file.size / chunkSize)); let finalPayload = null; @@ -924,6 +938,9 @@ async function uploadFileChunked(targetPath, file, relativePath) { body.set('chunkIndex', String(chunkIndex)); body.set('totalChunks', String(totalChunks)); body.set('data', data); + if (overwrite) { + body.set('overwrite', '1'); + } appendCsrf(body); const response = await fetch(apiUrl(`upload.php?path=${encodeURIComponent(targetPath)}`), { method: 'POST', @@ -941,7 +958,10 @@ async function uploadFileChunked(targetPath, file, relativePath) { body: text.slice(0, 1000) }); if (!response.ok) { - throw new Error(text || `${response.status} ${response.statusText}`); + const error = new Error(text || `${response.status} ${response.statusText}`); + error.status = response.status; + error.path = relativePath; + throw error; } try { finalPayload = JSON.parse(text); diff --git a/u-navigator.plg b/u-navigator.plg index bfc5118..7d958bf 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; -45fd0a1c4f8033d9daa56268f48742d4 +3bf3f4752ed9cd8b86fd27f9e17fbe14