add login status display

This commit is contained in:
asvow
2024-01-28 18:34:01 +08:00
parent 3f828bffe8
commit 3014c403ee
2 changed files with 37 additions and 3 deletions

View File

@@ -5,6 +5,7 @@
'use strict';
'require form';
'require fs';
'require poll';
'require rpc';
'require uci';
@@ -27,6 +28,15 @@ function getServiceStatus() {
});
}
function getLoginStatus() {
return fs.exec("/usr/sbin/tailscale", ["status"]).then(function(res) {
if (res.stdout.includes("Logged out"))
return false;
else
return true;
});
}
function renderStatus(isRunning) {
var spanTemp = '<em><span style="color:%s"><strong>%s %s</strong></span></em>';
var renderHTML;
@@ -39,6 +49,18 @@ function renderStatus(isRunning) {
return renderHTML;
}
function renderLogin(isLoggedIn) {
var spanTemp = '<em><span style="color:%s"><strong>%s %s</strong></span></em>';
var renderHTML;
if (isLoggedIn) {
renderHTML = String.format(spanTemp, 'green', _('Logged'), _('IN'));
} else {
renderHTML = String.format(spanTemp, 'red', _('Logged'), _('OUT'));
}
return renderHTML;
}
return view.extend({
load: function() {
return Promise.all([
@@ -73,6 +95,17 @@ return view.extend({
o.default = o.disabled;
o.rmempty = false;
o = s.option(form.DummyValue, 'login_status', _('Login Status'));
o.depends('enabled', '1');
o.renderWidget = function(section_id, option_id) {
poll.add(function() {
return L.resolveDefault(getLoginStatus()).then(function(res) {
document.getElementById('login_status_div').innerHTML = renderLogin(res);
});
});
return E('div', { 'id': 'login_status_div' }, _('Collecting data ...'));
};
return m.render();
}

View File

@@ -3,7 +3,8 @@
"description": "Grant access to Tailscale configuration",
"read": {
"file": {
"/sbin/ifconfig": [ "exec" ]
"/sbin/ifconfig": [ "exec" ],
"/usr/sbin/tailscale": [ "exec" ]
},
"ubus": {
"service": [ "list" ]