From f5c48bced9e24d36714d2bb804a7417ef57e5ae1 Mon Sep 17 00:00:00 2001 From: NixReaper Date: Sun, 12 Jul 2026 14:44:10 -0500 Subject: [PATCH] Add Code settings group: custom admin CSS/JS + header/footer scripts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New Settings > Code group (Custom CSS & JS + Header & footer scripts) driven by admin/src/Code/CodeInjection.php: - Admin CSS → stripped to prevent breakout) - Admin JS → neutralized) - Header scripts → printed verbatim in the front-end - Footer scripts → printed verbatim before the front-end Header/footer scripts are raw admin-authored markup by design (analytics, meta, etc.), settable only by manage_options users on the settings page. SettingsField gains a `mono` flag for monospace textareas (no CodeMirror dependency). All four injection points verified on PHP 8.5. Co-Authored-By: Claude Opus 4.8 --- admin/src/App/AuroraAdmin.php | 2 + admin/src/Code/CodeInjection.php | 72 +++++++++++++++++++ .../settings/components/SettingsField.vue | 6 ++ app/src/pages/settings/settingsConfig.js | 63 ++++++++++++++++ aurora-admin.php | 1 + 5 files changed, 144 insertions(+) create mode 100644 admin/src/Code/CodeInjection.php diff --git a/admin/src/App/AuroraAdmin.php b/admin/src/App/AuroraAdmin.php index 64d480e..15b0ff5 100644 --- a/admin/src/App/AuroraAdmin.php +++ b/admin/src/App/AuroraAdmin.php @@ -47,6 +47,7 @@ use AuroraAdmin\Media\SvgUploads; use AuroraAdmin\Media\MediaFolders; use AuroraAdmin\ImageFormats\ImageFormats; use AuroraAdmin\Security\Security; +use AuroraAdmin\Code\CodeInjection; use AuroraAdmin\Rest\MediaFolderData; use AuroraAdmin\Rest\BugReportData; use AuroraAdmin\Rest\CompanionPluginData; @@ -99,6 +100,7 @@ class AuroraAdmin new MediaFolders(); new ImageFormats(); new Security(); + new CodeInjection(); new MediaFolderData(); new BugReportData(); new CompanionPluginData(); diff --git a/admin/src/Code/CodeInjection.php b/admin/src/Code/CodeInjection.php new file mode 100644 index 0000000..0fc1b23 --- /dev/null +++ b/admin/src/Code/CodeInjection.php @@ -0,0 +1,72 @@ + Code). + * + * Four admin-authored fields, only settable by manage_options users on the + * settings page: + * - Admin CSS → wrapped in a ", "", $css); + echo "\n\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- admin-authored stylesheet, output raw inside a stripped above to prevent breakout. + } + + public static function admin_js() + { + $js = trim((string) Settings::get("custom_admin_js", "")); + if ($js === "") { + return; + } + $js = str_ireplace("", "<\\/script>", $js); + echo "\n\n"; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- admin-authored script, output raw inside a ', + }, + { + key: 'footer_scripts', + type: 'textarea', + mono: true, + rows: 8, + label: 'Footer scripts', + description: + 'Raw HTML/JS printed just before on the front end. Include the full ', + }, + ], + }, + ], + }, { id: 'add-ons', title: 'Add-ons', diff --git a/aurora-admin.php b/aurora-admin.php index 8dce3e3..349ef4c 100644 --- a/aurora-admin.php +++ b/aurora-admin.php @@ -61,6 +61,7 @@ require AURORA_ADMIN_PATH . "admin/src/Media/SvgUploads.php"; require AURORA_ADMIN_PATH . "admin/src/Media/MediaFolders.php"; require AURORA_ADMIN_PATH . "admin/src/ImageFormats/ImageFormats.php"; require AURORA_ADMIN_PATH . "admin/src/Security/Security.php"; +require AURORA_ADMIN_PATH . "admin/src/Code/CodeInjection.php"; require AURORA_ADMIN_PATH . "admin/src/Rest/MediaFolderData.php"; require AURORA_ADMIN_PATH . "admin/src/Rest/BugReportData.php"; require AURORA_ADMIN_PATH . "admin/src/Rest/CompanionPluginData.php";