diff --git a/src/page.html b/src/page.html index 266e52e..f234da2 100644 --- a/src/page.html +++ b/src/page.html @@ -137,8 +137,22 @@ var _sv=false; function toggleSettings(){ var token=localStorage.getItem('admin_token'); + var lastClose=localStorage.getItem('admin_close_time'); if(token){ + // Check if closed more than 10 seconds ago + if(lastClose){ + var now=Date.now(); + var elapsed=(now-parseInt(lastClose))/1000; + if(elapsed>10){ + // Token expired (>10s since close), clear and show login + localStorage.removeItem('admin_token'); + localStorage.removeItem('admin_close_time'); + showAdminLoginModal(); + return; + } + } + // Verify token validity fetch('/api/v2/admin/verify',{ headers:{'Authorization':'Bearer '+token} @@ -149,15 +163,24 @@ function toggleSettings(){ // Token valid, open settings _sv=!_sv; document.getElementById("mb-settings-panel").classList.toggle("active",_sv); - if(_sv)loadSettings(); + if(_sv){ + loadSettings(); + // Clear close time when opening + localStorage.removeItem('admin_close_time'); + }else{ + // Record close time when closing + localStorage.setItem('admin_close_time',Date.now()); + } }else{ // Token invalid, remove and show login localStorage.removeItem('admin_token'); + localStorage.removeItem('admin_close_time'); showAdminLoginModal(); } }) .catch(function(e){ localStorage.removeItem('admin_token'); + localStorage.removeItem('admin_close_time'); showAdminLoginModal(); }); }else{ @@ -203,6 +226,7 @@ function submitAdminLogin(){ .then(function(d){ if(d.token){ localStorage.setItem('admin_token',d.token); + localStorage.removeItem('admin_close_time'); // Clear close time on new login document.getElementById('mb-admin-modal').classList.remove('active'); toast('Admin authenticated ✓'); toggleSettings(); // Re-open settings