diff --git a/config/prod/settings.php b/config/prod/settings.php index 26304fc..8c66814 100755 --- a/config/prod/settings.php +++ b/config/prod/settings.php @@ -21,7 +21,7 @@ define('APP_OIDC_REDIRECT_URI', 'https://nexus.int.kusche.berlin/auth/callback'); define('APP_OIDC_POST_LOGOUT_REDIRECT_URI', 'https://nexus.int.kusche.berlin/'); define('APP_OIDC_GROUP_CLAIM', 'groups'); - define('APP_OIDC_ADMIN_GROUP', 'admin'); - define('APP_OIDC_USER_GROUP', 'family'); + define('APP_OIDC_ADMIN_GROUP', 'appadmin'); + define('APP_OIDC_USER_GROUP', 'internalfamily'); define('APP_DEBUG_TOOL', false); define('APP_AUTH_DEBUG', false); diff --git a/config/staging/settings.php b/config/staging/settings.php index 9f02897..2eb0720 100755 --- a/config/staging/settings.php +++ b/config/staging/settings.php @@ -21,7 +21,7 @@ define('APP_OIDC_REDIRECT_URI', 'https://staging.nexus.int.kusche.berlin/auth/callback'); define('APP_OIDC_POST_LOGOUT_REDIRECT_URI', 'https://staging.nexus.int.kusche.berlin/'); define('APP_OIDC_GROUP_CLAIM', 'groups'); - define('APP_OIDC_ADMIN_GROUP', 'admin'); - define('APP_OIDC_USER_GROUP', 'family'); + define('APP_OIDC_ADMIN_GROUP', 'appadmin'); + define('APP_OIDC_USER_GROUP', 'internalfamily'); define('APP_DEBUG_TOOL', true); define('APP_AUTH_DEBUG', true); diff --git a/partials/structure/layout_start.php b/partials/structure/layout_start.php index 123a252..bce449e 100755 --- a/partials/structure/layout_start.php +++ b/partials/structure/layout_start.php @@ -101,6 +101,6 @@ $sidebarItems = $moduleSidebar['items'] ?? []; - + diff --git a/public/assets/js/app.js b/public/assets/js/app.js index c260e43..8849e63 100755 --- a/public/assets/js/app.js +++ b/public/assets/js/app.js @@ -41,12 +41,20 @@ modal.classList.add('is-open'); modal.setAttribute('aria-hidden', 'false'); loadList(); + startRefresh(); }; const close = () => { modal.classList.remove('is-open'); modal.setAttribute('aria-hidden', 'true'); + if (refreshTimer) { + clearInterval(refreshTimer); + refreshTimer = null; + } }; + let activeFile = null; + let refreshTimer = null; + const loadList = async () => { try { const res = await fetch('/debug?list=1', { cache: 'no-store' }); @@ -71,13 +79,37 @@ }; const loadFile = async (name) => { + activeFile = name; try { - const res = await fetch(`/debug?raw=1&file=${encodeURIComponent(name)}`, { cache: 'no-store' }); + const res = await fetch(`/debug?raw=1&file=${encodeURIComponent(name)}&tail=200`, { cache: 'no-store' }); const text = await res.text(); - contentEl.textContent = text; + contentEl.textContent = formatLog(text); } catch (e) {} }; + const formatLog = (text) => { + const lines = text.split(/\\r?\\n/).filter(Boolean); + const pretty = lines.map((line) => { + try { + const obj = JSON.parse(line); + return JSON.stringify(obj, null, 2); + } catch (e) { + return line; + } + }); + return pretty.join('\\n\\n'); + }; + + const startRefresh = () => { + if (refreshTimer) clearInterval(refreshTimer); + refreshTimer = setInterval(() => { + if (activeFile) loadFile(activeFile); + }, 3000); + }; + openBtn.addEventListener('click', open); closeEls.forEach((el) => el.addEventListener('click', close)); + if (modal.classList.contains('is-open')) { + startRefresh(); + } })(); diff --git a/public/page/debug.php b/public/page/debug.php index ea35f95..6f0e5d0 100644 --- a/public/page/debug.php +++ b/public/page/debug.php @@ -1,5 +1,5 @@ Debug-Tool ist deaktiviert.'; @@ -36,6 +36,11 @@ if (isset($_GET['list']) && $_GET['list'] === '1') { if (isset($_GET['raw']) && $_GET['raw'] === '1') { header('Content-Type: text/plain; charset=utf-8'); + $tail = isset($_GET['tail']) ? (int)$_GET['tail'] : 0; + if ($tail > 0 && $content !== null) { + $lines = preg_split('/\\R/', $content) ?: []; + $content = implode(PHP_EOL, array_slice($lines, -$tail)); + } echo $content ?? ''; return; }