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;
}