add login status display
This commit is contained in:
		| @@ -5,6 +5,7 @@ | |||||||
|  |  | ||||||
| 'use strict'; | 'use strict'; | ||||||
| 'require form'; | 'require form'; | ||||||
|  | 'require fs'; | ||||||
| 'require poll'; | 'require poll'; | ||||||
| 'require rpc'; | 'require rpc'; | ||||||
| 'require uci'; | '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) { | function renderStatus(isRunning) { | ||||||
| 	var spanTemp = '<em><span style="color:%s"><strong>%s %s</strong></span></em>'; | 	var spanTemp = '<em><span style="color:%s"><strong>%s %s</strong></span></em>'; | ||||||
| 	var renderHTML; | 	var renderHTML; | ||||||
| @@ -39,6 +49,18 @@ function renderStatus(isRunning) { | |||||||
| 	return renderHTML; | 	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({ | return view.extend({ | ||||||
| 	load: function() { | 	load: function() { | ||||||
| 		return Promise.all([ | 		return Promise.all([ | ||||||
| @@ -72,8 +94,19 @@ return view.extend({ | |||||||
| 		o = s.option(form.Flag, 'enabled', _('Enable')); | 		o = s.option(form.Flag, 'enabled', _('Enable')); | ||||||
| 		o.default = o.disabled; | 		o.default = o.disabled; | ||||||
| 		o.rmempty = false; | 		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(); | 		return m.render(); | ||||||
| 	} | 	} | ||||||
| }); | }); | ||||||
|   | |||||||
| @@ -3,7 +3,8 @@ | |||||||
| 		"description": "Grant access to Tailscale configuration", | 		"description": "Grant access to Tailscale configuration", | ||||||
| 		"read": { | 		"read": { | ||||||
| 			"file": { | 			"file": { | ||||||
| 				"/sbin/ifconfig": [ "exec" ] | 				"/sbin/ifconfig": [ "exec" ], | ||||||
|  | 				"/usr/sbin/tailscale": [ "exec" ] | ||||||
| 			}, | 			}, | ||||||
| 			"ubus": { | 			"ubus": { | ||||||
| 				"service": [ "list" ] | 				"service": [ "list" ] | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 asvow
					asvow