From 74ba8d0984b08dec4f718c3f23ded73fd22d38db Mon Sep 17 00:00:00 2001 From: Mikei386 <44135113+Mikei386@users.noreply.github.com> Date: Tue, 23 Jun 2026 09:06:23 +0200 Subject: [PATCH] Show permissions in properties --- build-plugin.sh | 2 +- packages/u-navigator-2026.06.23.r012.tgz | Bin 16632 -> 0 bytes packages/u-navigator-2026.06.23.r013.tgz | Bin 0 -> 17082 bytes .../emhttp/plugins/u-navigator/api/list.php | 34 ++++++++++++++++++ server/public/app.js | 12 ++++++- u-navigator.plg | 4 +-- 6 files changed, 48 insertions(+), 4 deletions(-) delete mode 100644 packages/u-navigator-2026.06.23.r012.tgz create mode 100644 packages/u-navigator-2026.06.23.r013.tgz diff --git a/build-plugin.sh b/build-plugin.sh index a5c32d5..5b519fa 100755 --- a/build-plugin.sh +++ b/build-plugin.sh @@ -2,7 +2,7 @@ set -eu PLUGIN="u-navigator" -VERSION="2026.06.23.r012" +VERSION="2026.06.23.r013" PKG_DIR="packages" WORK_DIR=".plugin-build" PKG_NAME="${PLUGIN}-${VERSION}.tgz" diff --git a/packages/u-navigator-2026.06.23.r012.tgz b/packages/u-navigator-2026.06.23.r012.tgz deleted file mode 100644 index 55032fae1704d69a4d42e82ed42e9acfccd6f179..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16632 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 H0G``mG2@Ki{(Qp%wqIF=>)V%tSN- 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 literal 0 HcmV?d00001 diff --git a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/list.php b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/list.php index c1b9180..1cecac3 100644 --- a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/list.php +++ b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/list.php @@ -13,12 +13,20 @@ foreach (scandir($resolved['path']) ?: [] as $name) { } $full = $resolved['path'] . '/' . $name; $type = is_link($full) ? 'symlink' : (is_dir($full) ? 'directory' : (is_file($full) ? 'file' : 'other')); + $ownerId = fileowner($full); + $groupId = filegroup($full); + $perms = fileperms($full); $entries[] = [ 'name' => $name, 'path' => $full, 'type' => $type, 'size' => is_file($full) ? filesize($full) : 0, 'modifiedAt' => date(DATE_ATOM, filemtime($full) ?: time()), + 'owner' => unav_owner_name($ownerId), + 'ownerId' => $ownerId, + 'group' => unav_group_name($groupId), + 'groupId' => $groupId, + 'permissions' => $perms === false ? null : substr(sprintf('%o', $perms), -4), ]; } @@ -32,3 +40,29 @@ unav_json([ 'path' => $resolved['path'], 'entries' => $entries, ]); + +function unav_owner_name($uid): ?string { + if ($uid === false) { + return null; + } + if (function_exists('posix_getpwuid')) { + $info = posix_getpwuid($uid); + if (is_array($info) && isset($info['name'])) { + return $info['name']; + } + } + return (string)$uid; +} + +function unav_group_name($gid): ?string { + if ($gid === false) { + return null; + } + if (function_exists('posix_getgrgid')) { + $info = posix_getgrgid($gid); + if (is_array($info) && isset($info['name'])) { + return $info['name']; + } + } + return (string)$gid; +} diff --git a/server/public/app.js b/server/public/app.js index 925dd36..6b8edad 100644 --- a/server/public/app.js +++ b/server/public/app.js @@ -72,7 +72,7 @@ function openExplorer(initialPath = state.config?.roots?.[0]?.path) { path: initialPath, entries: [], selectedPath: null, - view: 'list', + view: 'icons', loading: false, error: null } @@ -347,6 +347,9 @@ function renderProperties(body) {
Pfad
${escapeHtml(entry.path)}
Größe
${formatBytes(entry.size)}
Geändert
${new Date(entry.modifiedAt).toLocaleString()}
+
Besitzer
${escapeHtml(formatPrincipal(entry.owner, entry.ownerId))}
+
Gruppe
${escapeHtml(formatPrincipal(entry.group, entry.groupId))}
+
Rechte
${escapeHtml(entry.permissions ? `0${entry.permissions}`.slice(-4) : '-')}
`; } @@ -958,6 +961,13 @@ function formatBytes(bytes) { return `${(value / 1024 / 1024 / 1024).toFixed(1)} GB`; } +function formatPrincipal(name, id) { + if (name == null && id == null) return '-'; + if (name == null || String(name) === String(id)) return String(id); + if (id == null) return String(name); + return `${name} (${id})`; +} + function escapeHtml(value) { return String(value ?? '').replace(/[&<>"']/g, (char) => ({ '&': '&', diff --git a/u-navigator.plg b/u-navigator.plg index 7372836..537d880 100644 --- a/u-navigator.plg +++ b/u-navigator.plg @@ -1,7 +1,7 @@ - + ]> @@ -14,7 +14,7 @@ https://git.casaderoll.de/michael/Unraid-Navigator/raw/branch/main/packages/&package; -3ab1180514677a7270013846b08706b0 +b72f22b37e34b4bdfd93a57c138af2d0