diff --git a/ajax/adblock/update_blocklist.php b/ajax/adblock/update_blocklist.php index 0084892d..46f7798e 100644 --- a/ajax/adblock/update_blocklist.php +++ b/ajax/adblock/update_blocklist.php @@ -1,6 +1,7 @@ = RASPI_SESSION_TIMEOUT ? 'session_expired' : 'active'; + +if ($status = 'session_expired') { + session_unset(); // unset all session variables + session_destroy(); // destroy the session +} + +// send response +header('Content-Type: application/json'); +header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); +header('Expires: Thu, 01 Jan 1970 00:00:00 GMT'); +header('Pragma: no-cache'); + +$response = [ + 'status' => $status, + 'last_activity' => $lastActivity, + 'session_lifetime' => $sessionLifetime +]; + +echo json_encode($response); +exit(); + diff --git a/ajax/system/sys_actions.php b/ajax/system/sys_actions.php index b5b09d10..dce18402 100644 --- a/ajax/system/sys_actions.php +++ b/ajax/system/sys_actions.php @@ -1,6 +1,7 @@ i.fas { /* Font Awesome 5 brands */ .fa-reddit { - color: #ff4500; + color: #ff4500; } .fa-twitter { - color: #55acee + color: #55acee } .fa-discord { - color: #7289da + color: #7289da } .fa-github { - color: #151b23 + color: #151b23 } @keyframes heart { @@ -332,3 +333,47 @@ button > i.fas { animation: heart 1000ms infinite; } +#modal-admin-login .modal-content { + background: radial-gradient(circle at 120% -20%, #032626, #052c2c, #073232, #0a3838, #0d3f3f, #114545, #144c4c); + align-items: center; +} + +#modal-admin-login .modal-body { + min-width: 330px; +} + +.login-brand { + color: var(--raspap-theme-color); + filter: brightness(150%); +} + +.admin-login { + color: var(--raspap-offwhite); + font-size: 1.2em +} + +.btn-admin-login { + color: var(--raspap-offwhite); + background-color: var(--raspap-theme-color); +} + +.btn-admin-login:hover { + color: var(--raspap-offwhite); + background-color: #236969; +} + +.no-right-radius { + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; +} + +.btn-passwd-append { + border: 1px solid #ced4da; +} + +#passwd-toggle:active, +#passwd-toggle:hover, +#passwd-toggle:focus { + border: 1px solid #ced4da; +} + diff --git a/app/img/raspAP-logo.php b/app/img/raspAP-logo.php old mode 100644 new mode 100755 diff --git a/app/img/wg-qr-code.php b/app/img/wg-qr-code.php old mode 100644 new mode 100755 diff --git a/app/img/wifi-qr-code.php b/app/img/wifi-qr-code.php old mode 100644 new mode 100755 diff --git a/app/js/custom.js b/app/js/custom.js index c33a5d5a..a3380e15 100644 --- a/app/js/custom.js +++ b/app/js/custom.js @@ -671,6 +671,44 @@ window.addEventListener('load', function() { }); }, false); +let sessionCheckInterval = setInterval(checkSession, 5000); + +function checkSession() { + // skip session check if on login page + if (window.location.pathname === '/login') { + return; + } + var csrfToken = $('meta[name=csrf_token]').attr('content'); + $.post('ajax/session/do_check_session.php',{'csrf_token': csrfToken},function (data) { + if (data.status === 'session_expired') { + clearInterval(sessionCheckInterval); + showSessionExpiredModal(); + } + }).fail(function (jqXHR, status, err) { + console.error("Error checking session status:", status, err); + }); +} + +function showSessionExpiredModal() { + $('#sessionTimeoutModal').modal('show'); +} + +$(document).on("click", "#js-session-expired-login", function(e) { + const loginModal = $('#modal-admin-login'); + const redirectUrl = window.location.pathname; + window.location.href = `/login?action=${encodeURIComponent(redirectUrl)}`; +}); + +// show modal login on page load +$(document).ready(function () { + const params = new URLSearchParams(window.location.search); + const redirectUrl = $('#redirect-url').val() || params.get('action') || '/'; + $('#modal-admin-login').modal('show'); + $('#redirect-url').val(redirectUrl); + $('#username').focus(); + $('#username').addClass("focusedInput"); +}); + // DHCP or Static IP option group $('#chkstatic').on('change', function() { if (this.checked) { diff --git a/config/config.php b/config/config.php index 2950632d..17c40cb4 100755 --- a/config/config.php +++ b/config/config.php @@ -1,6 +1,7 @@ isLogged()) { - if ($auth->login($user, $pass)) { - $config = $auth->getAuthConfig(); - } else { - $auth->authenticate(); - } + $auth->authenticate(); } } + diff --git a/includes/csrf.php b/includes/csrf.php index bca935df..4e098e5b 100755 --- a/includes/csrf.php +++ b/includes/csrf.php @@ -1,7 +1,6 @@ 'RaspAP', + 'RASPI_BRAND_TITLE' => RASPI_BRAND_TEXT.' Admin Panel', 'RASPI_VERSION' => '3.2.4', 'RASPI_CONFIG_NETWORK' => RASPI_CONFIG.'/networking/defaults.json', 'RASPI_CONFIG_PROVIDERS' => 'config/vpn-providers.json', @@ -16,6 +17,7 @@ $defaults = [ 'RASPI_ERROR_LOG' => sys_get_temp_dir() . '/raspap_error.log', 'RASPI_DEBUG_LOG' => 'raspap_debug.log', 'RASPI_LOG_SIZE_LIMIT' => 64, + 'RASPI_SESSION_TIMEOUT' => 1440, // Constants for configuration file paths. // These are typical for default RPi installs. Modify if needed. diff --git a/includes/footer.php b/includes/footer.php old mode 100644 new mode 100755 index 38965fc6..b12c0f1c --- a/includes/footer.php +++ b/includes/footer.php @@ -1,4 +1,6 @@ -