Author: Andy Green Date: Thu Apr 16 06:28:41 2026 +0100 outh: fix race diff --git a/assets/sai.css b/assets/sai.css index 189afb3..ac6c188 100644 --- a/assets/sai.css +++ b/assets/sai.css @@ -1291,3 +1291,8 @@ canvas.power-graph { .pcon-header-on { background-color: #79da80; } + +.plat-peer-ip { + font-size: 0.8em; + color: #555; +} diff --git a/assets/sai.js b/assets/sai.js index 8a162ec..a7c9a8d 100644 --- a/assets/sai.js +++ b/assets/sai.js @@ -394,7 +394,7 @@ var lang_zhs = "{" + "\"%{pf}前创建, 创作时间: %{ct}ms \"" + "}}"; -var logs = "", redpend = 0, gitohashi_integ = 0, authd = 0, auth_is_admin = 0, exptimer, auth_user = "", +var logs = "", redpend = 0, gitohashi_integ = 0, authd = 0, auth_is_admin = 0, auth_grant_level = -1, exptimer, auth_user = "", logAnsiState = {}, logs_pending = "", lines_pending = "", times_pending = "", ongoing_task_activities = {}, last_log_timestamp = 0, spreadsheet_data_cache = {}, loadreport_data_cache = {}, fadingTasks = new Map(); @@ -1019,10 +1019,10 @@ function sai_taskinfo_render(t, now_ut) sai_event_render(t, now_ut, 0) + "" + "" + sai_plat_icon(t.t.platform, 2) + san(t.t.platform) + " "; - if (authd && t.t.state != 0 && t.t.state != 3 && t.t.state != 4 && t.t.state != 5) + if (auth_is_admin && t.t.state != 0 && t.t.state != 3 && t.t.state != 4 && t.t.state != 5) s += "\"stop "; - if (authd) + if (auth_is_admin) s += "\"rebuild\" " + sai_stateful_taskname(t.t.state, t.t.taskname, 1); @@ -1193,7 +1193,7 @@ function sai_event_summary_render(o, now_ut, reset_all_icon) s += "
"; s += ""; - if (reset_all_icon && !gitohashi_integ && authd) { + if (reset_all_icon && !gitohashi_integ && auth_is_admin) { s += "
\"rebuild "; s += "\"delete
` + ``; if (authd && auth_is_admin && plat.peer_ip) - innerHTML += `${hsanitize(plat.peer_ip)}`; + innerHTML += `${hsanitize(plat.peer_ip)}`; innerHTML += ``; platDiv.innerHTML = innerHTML; @@ -2836,25 +2836,30 @@ window.addEventListener("load", function() { document.getElementById("noscript").display = "none"; /* LWS Login hook */ + var loginPromise = Promise.resolve(); if (window.renderLwsLoginStatus) - window.renderLwsLoginStatus('lws-login-status-container'); - - fetch('.lws-login-status') - .then(function(res) { return res.json(); }) - .then(function(data) { - if (data.logged_in && data.has_grant) { - authd = 1; - if (data.is_admin) - auth_is_admin = 1; - } - }) - .catch(function(err) { - console.log('lws-login auth fetch failed: ', err); - }) - .finally(function() { - ws_open_sai(); - aging(); - }); + loginPromise = window.renderLwsLoginStatus('lws-login-status-container'); + + loginPromise.then(function() { + return fetch('.lws-login-status'); + }) + .then(function(res) { return res.json(); }) + .then(function(data) { + console.log("LOGIN STATUS DEBUG:", data); + if (data.logged_in && data.has_grant) { + authd = 1; + auth_grant_level = data.grant_level !== undefined ? data.grant_level : -1; + if (data.is_admin || auth_grant_level >= 2) + auth_is_admin = 1; + } + }) + .catch(function(err) { + console.log('lws-login auth fetch failed: ', err); + }) + .finally(function() { + ws_open_sai(); + aging(); + }); setInterval(function() { update_task_activities(); @@ -2883,7 +2888,7 @@ window.addEventListener("load", function() { target = target.parentElement; } - if (taskDiv && authd) { + if (taskDiv && auth_is_admin) { event.preventDefault(); const taskUuid = taskDiv.id.substring(10);