fix: bigint overflow

This commit is contained in:
Lemon
2024-07-29 20:32:31 +08:00
parent 79c341d12e
commit b537a513b3

View File

@@ -17,7 +17,9 @@ var callServiceList = rpc.declare({
params: ['name'], params: ['name'],
expect: { '': {} } expect: { '': {} }
}); });
function enquoteBigNumber(str) {
return str.replace(/("\w+"):\s*(\d+)/g, '$1:"$2"');
}
function getStatus() { function getStatus() {
var status = {}; var status = {};
return Promise.resolve(callServiceList('tailscale')).then(function (res) { return Promise.resolve(callServiceList('tailscale')).then(function (res) {
@@ -28,7 +30,7 @@ function getStatus() {
} }
return fs.exec("/usr/sbin/tailscale", ["status", "--json"]); return fs.exec("/usr/sbin/tailscale", ["status", "--json"]);
}).then(function(res) { }).then(function(res) {
var tailscaleStatus = JSON.parse(res.stdout); var tailscaleStatus = JSON.parse(enquoteBigNumber(res.stdout));
if (!tailscaleStatus.AuthURL && tailscaleStatus.BackendState == "NeedsLogin") { if (!tailscaleStatus.AuthURL && tailscaleStatus.BackendState == "NeedsLogin") {
fs.exec("/usr/sbin/tailscale", ["login"]); fs.exec("/usr/sbin/tailscale", ["login"]);
} }
@@ -91,7 +93,7 @@ return view.extend({
return Promise.resolve(getStatus()).then(function(res) { return Promise.resolve(getStatus()).then(function(res) {
var service_view = document.getElementById("service_status"); var service_view = document.getElementById("service_status");
var login_view = document.getElementById("login_status_div"); var login_view = document.getElementById("login_status_div");
service_view.innerHTML = renderStatus(res.isRunning); service_view.innerHTML = renderStatus(res.isRunning);
login_view.innerHTML = renderLogin(res.backendState, res.authURL, res.displayName); login_view.innerHTML = renderLogin(res.backendState, res.authURL, res.displayName);
var logoutButton = document.getElementById('logout_button'); var logoutButton = document.getElementById('logout_button');
if (logoutButton) { if (logoutButton) {
@@ -103,7 +105,7 @@ return view.extend({
} }
}); });
}); });
return E('div', { class: 'cbi-section', id: 'status_bar' }, [ return E('div', { class: 'cbi-section', id: 'status_bar' }, [
E('p', { id: 'service_status' }, _('Collecting data ...')) E('p', { id: 'service_status' }, _('Collecting data ...'))
]); ]);