From 1e20799499048e16c11e558dd4f85a1e1d31e937 Mon Sep 17 00:00:00 2001 From: Mikei386 <44135113+Mikei386@users.noreply.github.com> Date: Tue, 23 Jun 2026 14:35:33 +0200 Subject: [PATCH] Add permission update jobs --- build-plugin.sh | 2 +- packages/u-navigator-2026.06.23.r037.tgz | Bin 26322 -> 0 bytes packages/u-navigator-2026.06.23.r038.tgz | Bin 0 -> 27403 bytes .../emhttp/plugins/u-navigator/api/common.php | 27 +++++++++ .../emhttp/plugins/u-navigator/api/job.php | 7 ++- .../plugins/u-navigator/api/job_worker.php | 53 ++++++++++++++++++ server/public/app.js | 53 ++++++++++++++++-- u-navigator.plg | 4 +- 8 files changed, 137 insertions(+), 9 deletions(-) delete mode 100644 packages/u-navigator-2026.06.23.r037.tgz create mode 100644 packages/u-navigator-2026.06.23.r038.tgz diff --git a/build-plugin.sh b/build-plugin.sh index 783970d..fe9af14 100755 --- a/build-plugin.sh +++ b/build-plugin.sh @@ -2,7 +2,7 @@ set -eu PLUGIN="u-navigator" -VERSION="2026.06.23.r037" +VERSION="2026.06.23.r038" PKG_DIR="packages" WORK_DIR=".plugin-build" PKG_NAME="${PLUGIN}-${VERSION}.tgz" diff --git a/packages/u-navigator-2026.06.23.r037.tgz b/packages/u-navigator-2026.06.23.r037.tgz deleted file mode 100644 index 07f3ed58b1c21006310c4fcc9cb42067942f0a71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26322 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 H9PEDpM4?S0 literal 0 HcmV?d00001 diff --git a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/common.php b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/common.php index 7661240..ea1fde8 100644 --- a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/common.php +++ b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/common.php @@ -211,6 +211,33 @@ function unav_guard_destination(string $source, string $destination): void { } } +function unav_permission_options(array $data): array { + $mode = trim((string)($data['mode'] ?? '')); + $owner = trim((string)($data['owner'] ?? '')); + $group = trim((string)($data['group'] ?? '')); + $recursive = filter_var($data['recursive'] ?? false, FILTER_VALIDATE_BOOLEAN); + + if ($mode === '' && $owner === '' && $group === '') { + unav_error(400, 'No permission changes requested'); + } + if ($mode !== '' && !preg_match('/^[0-7]{3,4}$/', $mode)) { + unav_error(400, 'Invalid permission mode'); + } + if ($owner !== '' && !preg_match('/^[A-Za-z0-9._-]+$/', $owner)) { + unav_error(400, 'Invalid owner'); + } + if ($group !== '' && !preg_match('/^[A-Za-z0-9._-]+$/', $group)) { + unav_error(400, 'Invalid group'); + } + + return [ + 'mode' => $mode === '' ? null : $mode, + 'owner' => $owner === '' ? null : $owner, + 'group' => $group === '' ? null : $group, + 'recursive' => $recursive, + ]; +} + function unav_job_dir(): string { if (!is_dir(UNAV_JOB_DIR) && !mkdir(UNAV_JOB_DIR, 0777, true) && !is_dir(UNAV_JOB_DIR)) { unav_error(500, 'Could not create job directory'); diff --git a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/job.php b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/job.php index 062989b..685cf9b 100644 --- a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/job.php +++ b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/job.php @@ -6,17 +6,21 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { } $action = $_GET['action'] ?? ''; -if (!in_array($action, ['move', 'copy', 'size'], true)) { +if (!in_array($action, ['move', 'copy', 'size', 'permissions'], true)) { unav_error(404, 'Unknown job action'); } $data = unav_request_data(); $source = unav_existing_path($data['source'] ?? null); $destination = null; +$permissions = null; if (in_array($action, ['move', 'copy'], true)) { unav_assert_writable(); $destination = unav_destination_path($data['destination'] ?? null); unav_guard_destination($source['path'], $destination['path']); +} elseif ($action === 'permissions') { + unav_assert_writable(); + $permissions = unav_permission_options($data); } $id = str_replace('.', '', uniqid($action . '-', true)); @@ -30,6 +34,7 @@ $job = [ 'error' => null, 'source' => $source['path'], 'destination' => $destination['path'] ?? null, + 'permissions' => $permissions, 'createdAt' => $now, 'updatedAt' => $now, ]; diff --git a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/job_worker.php b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/job_worker.php index 04b364e..59cd125 100644 --- a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/job_worker.php +++ b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/job_worker.php @@ -19,6 +19,8 @@ function unav_run_job(string $id): void { } elseif ($job['type'] === 'size') { $result = unav_worker_size($job['source'], $job); $job['result'] = $result; + } elseif ($job['type'] === 'permissions') { + unav_worker_permissions($job['source'], $job['permissions'] ?? [], $job); } else { throw new RuntimeException('Unknown job action'); } @@ -120,6 +122,57 @@ function unav_worker_size_recursive(string $path): array { return $total; } +function unav_worker_permissions(string $source, array $options, array &$job): void { + $sourceReal = unav_worker_guard_source($source); + $mode = $options['mode'] ?? null; + $owner = $options['owner'] ?? null; + $group = $options['group'] ?? null; + $recursive = filter_var($options['recursive'] ?? false, FILTER_VALIDATE_BOOLEAN); + + if ($mode === null && $owner === null && $group === null) { + throw new RuntimeException('No permission changes requested'); + } + + unav_worker_update($job, 'running', 10, 'Updating permissions'); + $count = 0; + unav_worker_permissions_apply($sourceReal, $mode, $owner, $group, $recursive, $job, $count); + $job['result'] = ['changed' => $count]; + unav_worker_update($job, 'running', 95, 'Permissions updated'); +} + +function unav_worker_permissions_apply(string $path, ?string $mode, ?string $owner, ?string $group, bool $recursive, array &$job, int &$count): void { + if (is_link($path)) { + return; + } + if (!file_exists($path)) { + throw new RuntimeException('Path not found'); + } + + if ($mode !== null && !chmod($path, intval($mode, 8))) { + throw new RuntimeException('Could not change permissions'); + } + if ($owner !== null && !chown($path, $owner)) { + throw new RuntimeException('Could not change owner'); + } + if ($group !== null && !chgrp($path, $group)) { + throw new RuntimeException('Could not change group'); + } + $count++; + if ($count % 100 === 0) { + unav_worker_update($job, 'running', 50, 'Updating permissions'); + } + + if (!$recursive || !is_dir($path)) { + return; + } + foreach (scandir($path) ?: [] as $entry) { + if ($entry === '.' || $entry === '..') { + continue; + } + unav_worker_permissions_apply($path . '/' . $entry, $mode, $owner, $group, true, $job, $count); + } +} + function unav_worker_copy(string $source, string $destination, array &$job): void { if (is_link($source)) { throw new RuntimeException('Copying symlinks is not allowed'); diff --git a/server/public/app.js b/server/public/app.js index ffda5de..7f8d51d 100644 --- a/server/public/app.js +++ b/server/public/app.js @@ -343,7 +343,13 @@ function renderExplorer(body, win) { row.addEventListener('contextmenu', (event) => { event.preventDefault(); event.stopPropagation(); - selectEntry(win, entry, null, event); + if (selectedPathSet(win).has(entry.path)) { + state.selectedEntry = entry; + focusWindow(win); + updatePropertiesWindows(); + } else { + selectEntry(win, entry, null, event); + } showContextMenu(event, win, entry); }); } @@ -875,15 +881,22 @@ async function handleDrop(event, win, targetPath) { } } -async function createJob(type, source, destination, refreshWindowIds = []) { - if (['move', 'copy'].includes(type) && isReadOnly()) { +async function createJob(type, source, destination = null, refreshWindowIds = [], extra = {}) { + if (['move', 'copy', 'permissions'].includes(type) && isReadOnly()) { showError(new Error('Read-only mode ist aktiv.')); return null; } - recordDebug('job.create.request', { type, source, destination, refreshWindowIds }); + recordDebug('job.create.request', { type, source, destination, refreshWindowIds, extra }); const body = new URLSearchParams(); body.set('source', source); - body.set('destination', destination); + if (destination !== null) { + body.set('destination', destination); + } + for (const [key, value] of Object.entries(extra)) { + if (value !== null && value !== undefined) { + body.set(key, String(value)); + } + } appendCsrf(body); const job = await api(apiUrl(`job.php?action=${encodeURIComponent(type)}`), { method: 'POST', @@ -999,6 +1012,35 @@ async function promptTransfer(win, entry, type) { await createJob(type, entry.path, `${targetDir.replace(/\/$/, '')}/${entry.name}`, []); } +async function promptPermissions(win, entry) { + if (isReadOnly()) { + showError(new Error('Read-only mode ist aktiv.')); + return; + } + const entries = selectedPathSet(win).has(entry.path) ? selectedEntries(win) : [entry]; + const mode = prompt('Berechtigungen als Oktalmodus, z.B. 0644 oder 0755', entry.permissions ? `0${entry.permissions}`.slice(-4) : ''); + if (mode === null) return; + const owner = prompt('Besitzer ändern, leer lassen für unverändert', entry.owner || ''); + if (owner === null) return; + const group = prompt('Gruppe ändern, leer lassen für unverändert', entry.group || ''); + if (group === null) return; + const hasDirectory = entries.some((item) => item.type === 'directory'); + const recursive = hasDirectory && confirm('Rekursiv auf Unterordner und Dateien anwenden?'); + const options = { + mode: mode.trim(), + owner: owner.trim(), + group: group.trim(), + recursive: recursive ? '1' : '0' + }; + if (!options.mode && !options.owner && !options.group) { + showError(new Error('Keine Änderung angegeben.')); + return; + } + for (const item of entries) { + await createJob('permissions', item.path, null, [win.id], options); + } +} + function showPropertiesForEntry(win, entry) { selectEntry(win, entry); openProperties(entry); @@ -1034,6 +1076,7 @@ function renderContextMenu() { actions.push(['Eigenschaften', () => showPropertiesForEntry(win, entry)]); if (!isReadOnly()) { actions.push(['Umbenennen', () => renameEntry(win, entry)]); + actions.push(['Berechtigungen...', () => promptPermissions(win, entry)]); actions.push(['Kopieren nach...', () => promptTransfer(win, entry, 'copy')]); actions.push(['Verschieben nach...', () => promptTransfer(win, entry, 'move')]); } diff --git a/u-navigator.plg b/u-navigator.plg index 9a1f749..5781309 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; -6ae4016e68bf99a8cb0c64714b8cb647 +87661843082c0f41bd627a315278e346