Project homepage Mailing List  Warmcat.com  API Docs  Github Mirror 
    npro  
 Modern all-safe Rust Network Protocol library supporting h1, h2, h3, ws, wt sans-IO and with socket IO + tls
git clone https://npro.rs/repo/npro
 
root / scripts / sai-push.service
Author[]Andy Green <andy@warmcat.com> 2026-04-16 05:28 UTC
Committer[]Andy Green <andy@warmcat.com> 2026-04-18 09:27 UTC
Treeddf89e578e04c5c11df24dbd66d1e1f0d7c23c70   Raw Patch
 
outh: fix race
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) + "</table></td><td class=\"ti\">" + "<span class=\"ti1\">" + sai_plat_icon(t.t.platform, 2) + san(t.t.platform) + "</span>&nbsp;"; - 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 += "<img class=\"rebuild\" alt=\"stop build\" src=\"stop.svg\" " + "id=\"stop-" + san(t.t.uuid) + "\">&nbsp;"; - if (authd) + if (auth_is_admin) s += "<img class=\"rebuild\" alt=\"rebuild\" src=\"rebuild.png\" " + "id=\"rebuild-" + san(t.t.uuid) + "\">&nbsp;" + 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 += "<div class=\"" + cl + "\"><img src=\"/sai/failed.svg\"></div>"; s += "</a>"; - if (reset_all_icon && !gitohashi_integ && authd) { + if (reset_all_icon && !gitohashi_integ && auth_is_admin) { s += "<br><img class=\"rebuild\" alt=\"rebuild all\" src=\"/sai/rebuild.png\" " + "id=\"rebuild-ev-" + san(e.uuid) + "\">&nbsp;"; s += "<img class=\"rebuild\" alt=\"delete event\" src=\"/sai/delete.png\" " + @@ -1473,7 +1473,7 @@ function createBuilderDiv(plat) { `<div class="res-bar"><div class="res-bar-inner res-bar-disk w-0"></div></div>` + `</div>`; if (authd && auth_is_admin && plat.peer_ip) - innerHTML += `<span class="plat-peer-ip" style="font-size: 0.8em; color: #555;">${hsanitize(plat.peer_ip)}</span>`; + innerHTML += `<span class="plat-peer-ip">${hsanitize(plat.peer_ip)}</span>`; innerHTML += `</td></tr></tbody></table>`; 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);
Page fetched 0s ago, creation time: 4ms (vhost etag hits: 0%, cache hits: 0%)