From 522b204bb94e1dcd01dba14cd6987b1524403a94 Mon Sep 17 00:00:00 2001 From: ruralmeltdown Date: Wed, 23 Jul 2025 15:21:02 -0700 Subject: [PATCH 1/8] comment out sbadmin code for sidebar overlay --- dist/sb-admin/js/scripts.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/sb-admin/js/scripts.js b/dist/sb-admin/js/scripts.js index 873276da..39067c08 100644 --- a/dist/sb-admin/js/scripts.js +++ b/dist/sb-admin/js/scripts.js @@ -13,9 +13,9 @@ window.addEventListener('DOMContentLoaded', event => { const sidebarToggle = document.body.querySelector('#sidebarToggle'); if (sidebarToggle) { // Uncomment below to persist sidebar toggle between refreshes - if (localStorage.getItem('sb|sidebar-toggle') === 'true') { - document.body.classList.toggle('sb-sidenav-toggled'); - } + // if (localStorage.getItem('sb|sidebar-toggle') === 'true') { + // document.body.classList.toggle('sb-sidenav-toggled'); + // } sidebarToggle.addEventListener('click', event => { event.preventDefault(); document.body.classList.toggle('sb-sidenav-toggled'); From 33476098c1623ae2dd9a70e670e2f48eeed02694 Mon Sep 17 00:00:00 2001 From: ruralmeltdown Date: Thu, 24 Jul 2025 07:36:30 -0700 Subject: [PATCH 2/8] add auto-close to Bootstrap alerts --- app/js/ui/main.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/js/ui/main.js b/app/js/ui/main.js index 97824fcc..406b3620 100644 --- a/app/js/ui/main.js +++ b/app/js/ui/main.js @@ -4,7 +4,7 @@ function msgShow(retcode,msg) { } else if(retcode == 2 || retcode == 1) { var alertType = 'danger'; } - var htmlMsg = ''; + var htmlMsg = ''; return htmlMsg; } @@ -581,3 +581,9 @@ $(document) .ready(contentLoaded) .ready(loadWifiStations()); +// To auto-close Bootstrap alerts; time is in milliseconds +window.setTimeout(function() { + $(".alert").fadeTo(500, 0).slideUp(500, function(){ + $(this).remove(); + }); +}, 5000); \ No newline at end of file From bb76eb86a4748cae4efa1c9a86d0c3015b44b72f Mon Sep 17 00:00:00 2001 From: billz Date: Fri, 25 Jul 2025 11:55:18 -0700 Subject: [PATCH 3/8] Append PostUpEx/PreDown rules to WG config --- config/defaults.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/config/defaults.json b/config/defaults.json index a0e1b190..093715fb 100644 --- a/config/defaults.json +++ b/config/defaults.json @@ -49,7 +49,9 @@ "ListenPort": [ "51820" ], "DNS": [ "9.9.9.9" ], "PostUp": [ "iptables -A FORWARD -i wlan0 -o wg0 -j ACCEPT; iptables -A FORWARD -i wg0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE" ], - "PostDown": [ "iptables -D FORWARD -i wlan0 -o wg0 -j ACCEPT; iptables -D FORWARD -i wg0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE" ] + "PostDown": [ "iptables -D FORWARD -i wlan0 -o wg0 -j ACCEPT; iptables -D FORWARD -i wg0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE" ], + "PostUpEx": [ "iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL ! -d %s -j REJECT" ], + "PreDown": [ "iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL ! -d %s -j REJECT" ] }, "peer": { "Address": [ "10.8.1.2/24" ], From 2967f5b692262e7c0622b6739b6212898134e2f0 Mon Sep 17 00:00:00 2001 From: billz Date: Fri, 25 Jul 2025 19:34:31 -0700 Subject: [PATCH 4/8] Implement user-definable alert timeout option --- app/js/ui/main.js | 11 ++++++++--- includes/system.php | 23 ++++++++++++++++++++++- templates/system/advanced.php | 16 ++++++++++++++++ 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/app/js/ui/main.js b/app/js/ui/main.js index 406b3620..c387ea50 100644 --- a/app/js/ui/main.js +++ b/app/js/ui/main.js @@ -582,8 +582,13 @@ $(document) .ready(loadWifiStations()); // To auto-close Bootstrap alerts; time is in milliseconds -window.setTimeout(function() { +const alertTimeout = parseInt(getCookie('alert_timeout'), 10); + +if (!isNaN(alertTimeout) && alertTimeout > 0) { + window.setTimeout(function() { $(".alert").fadeTo(500, 0).slideUp(500, function(){ - $(this).remove(); + $(this).remove(); }); -}, 5000); \ No newline at end of file + }, alertTimeout); +} + diff --git a/includes/system.php b/includes/system.php index 6bc73875..5bace1ef 100755 --- a/includes/system.php +++ b/includes/system.php @@ -12,6 +12,10 @@ function DisplaySystem(&$extraFooterScripts) $dashboard = new \RaspAP\UI\Dashboard; $pluginInstaller = \RaspAP\Plugins\PluginInstaller::getInstance(); + // set defaults + $optAutoclose = true; + $alertTimeout = 5000; + if (isset($_POST['SaveLanguage'])) { if (isset($_POST['locale'])) { $_SESSION['locale'] = $_POST['locale']; @@ -51,6 +55,21 @@ function DisplaySystem(&$extraFooterScripts) $status->addMessage(sprintf(_('Changing log limit size to %s KB'), $_SESSION['log_limit']), 'info'); } } + // Validate alert timout + if (isset($_POST['autoClose'])) { + $alertTimeout = trim($_POST['alertTimeout'] ?? ''); + if (strlen($alertTimeout) > 7 || !is_numeric($alertTimeout)) { + $status->addMessage('Invalid value for alert close timeout', 'danger'); + $good_input = false; + } else { + setcookie('alert_timeout', (int) $alertTimeout); + $status->addMessage(sprintf(_('Changing alert close timeout to %s ms'), $alertTimeout), 'info'); + } + } else { + setcookie('alert_timeout', '', time() - 3600, '/'); + $optAutoclose = false; + } + // Save settings if ($good_input) { exec("sudo /etc/raspap/lighttpd/configport.sh $serverPort $serverBind " .RASPI_LIGHTTPD_CONFIG. " ".$_SERVER['SERVER_NAME'], $return); @@ -155,7 +174,9 @@ function DisplaySystem(&$extraFooterScripts) "themes", "selectedTheme", "logLimit", - "pluginsTable" + "pluginsTable", + "optAutoclose", + "alertTimeout" )); } diff --git a/templates/system/advanced.php b/templates/system/advanced.php index 66612f16..3ea11efc 100644 --- a/templates/system/advanced.php +++ b/templates/system/advanced.php @@ -22,6 +22,22 @@ +
+
+
+ + /> + +
+
+
+
+
+ + +
+
+ " /> " /> From f558d02e68c23de8dbda70846fe11ecaf2e84650 Mon Sep 17 00:00:00 2001 From: billz Date: Fri, 25 Jul 2025 19:37:34 -0700 Subject: [PATCH 5/8] Add messages to en_US locale --- locale/en_US/LC_MESSAGES/messages.mo | Bin 65371 -> 65579 bytes locale/en_US/LC_MESSAGES/messages.po | 6 ++++++ 2 files changed, 6 insertions(+) diff --git a/locale/en_US/LC_MESSAGES/messages.mo b/locale/en_US/LC_MESSAGES/messages.mo index e2720b14d0f3c1a1664497ab06c8a0808894ac39..d5711ed99dd92d04cfb856ce0b5d4e0ab2b305e0 100644 GIT binary patch delta 15764 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 delta 15545 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 Date: Fri, 25 Jul 2025 21:10:20 -0700 Subject: [PATCH 6/8] Move alert message options to theme tab --- templates/system/advanced.php | 16 ------------- templates/system/theme.php | 43 +++++++++++++++++++++++++---------- 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/templates/system/advanced.php b/templates/system/advanced.php index 3ea11efc..66612f16 100644 --- a/templates/system/advanced.php +++ b/templates/system/advanced.php @@ -22,22 +22,6 @@ -
-
-
- - /> - -
-
-
-
-
- - -
-
- " /> " /> diff --git a/templates/system/theme.php b/templates/system/theme.php index 483a1764..045bbd8b 100644 --- a/templates/system/theme.php +++ b/templates/system/theme.php @@ -1,19 +1,38 @@
-

-
-
- - -
-
- - -
-
+

-
From 01a441c687627cd19a7a7b9515771b0fb5cbc756 Mon Sep 17 00:00:00 2001 From: billz Date: Fri, 25 Jul 2025 21:12:42 -0700 Subject: [PATCH 7/8] Separate system settings save functions, read alert_timeout --- includes/system.php | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/includes/system.php b/includes/system.php index 5bace1ef..912b3750 100755 --- a/includes/system.php +++ b/includes/system.php @@ -15,7 +15,20 @@ function DisplaySystem(&$extraFooterScripts) // set defaults $optAutoclose = true; $alertTimeout = 5000; + $good_input = true; + $config_port = false; + // set alert_timeout from cookie if valid + if (isset($_COOKIE['alert_timeout']) && is_numeric($_COOKIE['alert_timeout'])) { + $cookieTimeout = (int) $_COOKIE['alert_timeout']; + + if ($cookieTimeout > 0) { + $alertTimeout = $cookieTimeout; + } else { + // A value of 0 means auto-close is disabled + $optAutoclose = false; + } + } if (isset($_POST['SaveLanguage'])) { if (isset($_POST['locale'])) { $_SESSION['locale'] = $_POST['locale']; @@ -25,7 +38,6 @@ function DisplaySystem(&$extraFooterScripts) if (!RASPI_MONITOR_ENABLED) { if (isset($_POST['SaveServerSettings'])) { - $good_input = true; // Validate server port if (isset($_POST['serverPort'])) { if (strlen($_POST['serverPort']) > 4 || !is_numeric($_POST['serverPort'])) { @@ -36,13 +48,13 @@ function DisplaySystem(&$extraFooterScripts) } } // Validate server bind address - $serverBind = escapeshellarg(''); - if ($_POST['serverBind'] && $_POST['serverBind'] !== null ) { - if (!filter_var($_POST['serverBind'], FILTER_VALIDATE_IP)) { + if (isset($_POST['serverBind']) && $_POST['serverBind'] !== '') { + $inputBind = trim($_POST['serverBind']); + if (!filter_var($inputBind, FILTER_VALIDATE_IP)) { $status->addMessage('Invalid value for bind address', 'danger'); $good_input = false; } else { - $serverBind = escapeshellarg($_POST['serverBind']); + $serverBind = escapeshellarg($inputBind); } } // Validate log limit @@ -55,6 +67,14 @@ function DisplaySystem(&$extraFooterScripts) $status->addMessage(sprintf(_('Changing log limit size to %s KB'), $_SESSION['log_limit']), 'info'); } } + // Save settings + if ($good_input) { + exec("sudo /etc/raspap/lighttpd/configport.sh $serverPort $serverBind " .RASPI_LIGHTTPD_CONFIG. " ".$_SERVER['SERVER_NAME'], $return); + foreach ($return as $line) { + $status->addMessage($line, 'info'); + } + } + } elseif (isset($_POST['savethemeSettings'])) { // Validate alert timout if (isset($_POST['autoClose'])) { $alertTimeout = trim($_POST['alertTimeout'] ?? ''); @@ -69,14 +89,6 @@ function DisplaySystem(&$extraFooterScripts) setcookie('alert_timeout', '', time() - 3600, '/'); $optAutoclose = false; } - - // Save settings - if ($good_input) { - exec("sudo /etc/raspap/lighttpd/configport.sh $serverPort $serverBind " .RASPI_LIGHTTPD_CONFIG. " ".$_SERVER['SERVER_NAME'], $return); - foreach ($return as $line) { - $status->addMessage($line, 'info'); - } - } } } From 59e7a9d859d779bd1267501f046f0b3a4e73b97b Mon Sep 17 00:00:00 2001 From: billz Date: Fri, 25 Jul 2025 21:15:16 -0700 Subject: [PATCH 8/8] Add messages to en_US locale --- locale/en_US/LC_MESSAGES/messages.mo | Bin 65579 -> 65583 bytes locale/en_US/LC_MESSAGES/messages.po | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/locale/en_US/LC_MESSAGES/messages.mo b/locale/en_US/LC_MESSAGES/messages.mo index d5711ed99dd92d04cfb856ce0b5d4e0ab2b305e0..cb04e00b3315b941a4073bf3cd0a1d9a7912e325 100644 GIT binary patch delta 11892 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 delta 11875 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