diff --git a/htdocs/luci-static/resources/view/tailscale/base.js b/htdocs/luci-static/resources/view/tailscale/base.js
index 256842e..5aa8936 100644
--- a/htdocs/luci-static/resources/view/tailscale/base.js
+++ b/htdocs/luci-static/resources/view/tailscale/base.js
@@ -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 = '%s %s';
var renderHTML;
@@ -39,6 +49,18 @@ function renderStatus(isRunning) {
return renderHTML;
}
+function renderLogin(isLoggedIn) {
+ var spanTemp = '%s %s';
+ 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([
@@ -72,8 +94,19 @@ return view.extend({
o = s.option(form.Flag, 'enabled', _('Enable'));
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();
}
-});
\ No newline at end of file
+});
diff --git a/root/usr/share/rpcd/acl.d/luci-app-tailscale.json b/root/usr/share/rpcd/acl.d/luci-app-tailscale.json
index 5619040..1690b4c 100644
--- a/root/usr/share/rpcd/acl.d/luci-app-tailscale.json
+++ b/root/usr/share/rpcd/acl.d/luci-app-tailscale.json
@@ -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" ]