From 7cddfb19a4a5b47246f32421eb4efbd65f467188 Mon Sep 17 00:00:00 2001 From: Mikei386 <44135113+Mikei386@users.noreply.github.com> Date: Tue, 23 Jun 2026 07:04:43 +0200 Subject: [PATCH] Log non JSON API responses --- build-plugin.sh | 2 +- packages/u-navigator-2026.06.23.r006.tgz | Bin 14881 -> 0 bytes packages/u-navigator-2026.06.23.r007.tgz | Bin 0 -> 15077 bytes .../emhttp/plugins/u-navigator/api/common.php | 8 +++++++ .../emhttp/plugins/u-navigator/api/job.php | 19 +++++++++++---- server/public/app.js | 22 ++++++++++++++---- u-navigator.plg | 4 ++-- 7 files changed, 44 insertions(+), 11 deletions(-) delete mode 100644 packages/u-navigator-2026.06.23.r006.tgz create mode 100644 packages/u-navigator-2026.06.23.r007.tgz diff --git a/build-plugin.sh b/build-plugin.sh index 925847f..8793783 100755 --- a/build-plugin.sh +++ b/build-plugin.sh @@ -2,7 +2,7 @@ set -eu PLUGIN="u-navigator" -VERSION="2026.06.23.r006" +VERSION="2026.06.23.r007" PKG_DIR="packages" WORK_DIR=".plugin-build" PKG_NAME="${PLUGIN}-${VERSION}.tgz" diff --git a/packages/u-navigator-2026.06.23.r006.tgz b/packages/u-navigator-2026.06.23.r006.tgz deleted file mode 100644 index a66c4e1d35d2b464a2ff103e24a79e93799802e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14881 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 z 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 H0E7VmCVc>0 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 afe2d8d..89a3c42 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 @@ -32,6 +32,14 @@ function unav_read_only(): bool { return getenv('U_NAV_READ_ONLY') === '1'; } +function unav_function_available(string $name): bool { + if (!function_exists($name)) { + return false; + } + $disabled = array_map('trim', explode(',', (string)ini_get('disable_functions'))); + return !in_array($name, $disabled, true); +} + function unav_json($payload, int $status = 200): void { http_response_code($status); header('Content-Type: application/json; charset=utf-8'); 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 4fb5d87..dfe7275 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 @@ -35,11 +35,22 @@ unav_job_write($job); $worker = __DIR__ . '/job_worker.php'; $php = is_executable('/usr/bin/php') ? '/usr/bin/php' : (PHP_BINARY ?: 'php'); -if (function_exists('exec') && is_file($worker)) { - exec(escapeshellarg($php) . ' ' . escapeshellarg($worker) . ' ' . escapeshellarg($id) . ' > /dev/null 2>&1 &'); -} else { - require $worker; +$started = false; + +if (unav_function_available('exec') && is_file($worker)) { + try { + $exitCode = 0; + @exec(escapeshellarg($php) . ' ' . escapeshellarg($worker) . ' ' . escapeshellarg($id) . ' > /dev/null 2>&1 &', $output, $exitCode); + $started = ($exitCode === 0); + } catch (Throwable $error) { + $started = false; + } +} + +if (!$started) { + require_once $worker; unav_run_job($id); + $job = unav_job_read($id); } unav_json($job, 202); diff --git a/server/public/app.js b/server/public/app.js index ae1ff1a..3b52f25 100644 --- a/server/public/app.js +++ b/server/public/app.js @@ -826,10 +826,17 @@ function startResizeWindow(event, win) { async function api(url, options) { const response = await fetchChecked(url, options); + const text = await response.text(); try { - return await response.json(); + return JSON.parse(text); } catch (error) { - recordDebug('api.json.error', { url, error: serializeError(error) }); + recordDebug('api.json.error', { + url, + status: response.status, + contentType: response.headers.get('content-type'), + body: text.slice(0, 2000), + error: serializeError(error) + }); throw error; } } @@ -837,12 +844,19 @@ async function api(url, options) { async function fetchChecked(url, options) { recordDebug('fetch.request', { url, method: options?.method || 'GET' }); const response = await fetch(url, options); - recordDebug('fetch.response', { url, status: response.status, ok: response.ok }); + recordDebug('fetch.response', { + url, + status: response.status, + ok: response.ok, + contentType: response.headers.get('content-type') + }); if (!response.ok) { let message = `${response.status} ${response.statusText}`; + const text = await response.text(); try { - message = (await response.json()).error || message; + message = JSON.parse(text).error || message; } catch {} + recordDebug('fetch.error.body', { url, status: response.status, body: text.slice(0, 2000) }); throw new Error(message); } return response; diff --git a/u-navigator.plg b/u-navigator.plg index dd18995..620221a 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; -6079415588844c2e4a3f8aa43f949bd4 +c9e2b618f5907747315c5f17e80b132f