diff --git a/Makefile b/Makefile index 2876b3d..abd5304 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ LUCI_TITLE:=LuCI for Tailscale LUCI_DEPENDS:=+tailscale +jsonfilter +ucode LUCI_PKGARCH:=all -PKG_VERSION:=1.0.4 +PKG_VERSION:=1.0.5 include $(TOPDIR)/feeds/luci/luci.mk diff --git a/htdocs/luci-static/resources/view/tailscale/setting.js b/htdocs/luci-static/resources/view/tailscale/setting.js index 768e4d4..04faff0 100644 --- a/htdocs/luci-static/resources/view/tailscale/setting.js +++ b/htdocs/luci-static/resources/view/tailscale/setting.js @@ -18,30 +18,29 @@ var callServiceList = rpc.declare({ expect: { '': {} } }); -function getServiceStatus() { +function getStatus() { + var status = {}; return Promise.resolve(callServiceList('tailscale')).then(function (res) { - var isRunning = false; try { - isRunning = res['tailscale']['instances']['instance1']['running']; - } catch (e) { } - return isRunning; - }); -} - -function getLoginStatus() { - return fs.exec("/usr/sbin/tailscale", ["status", "--json"]).then(function(res) { - var status = JSON.parse(res.stdout); - if (!status.AuthURL && status.BackendState == "NeedsLogin") { + status.isRunning = res['tailscale']['instances']['instance1']['running']; + } catch (e) { + status.isRunning = false; + } + return fs.exec("/usr/sbin/tailscale", ["status", "--json"]); + }).then(function(res) { + var tailscaleStatus = JSON.parse(res.stdout); + if (!tailscaleStatus.AuthURL && tailscaleStatus.BackendState == "NeedsLogin") { fs.exec("/usr/sbin/tailscale", ["login"]); } - var displayName = status.BackendState == "Running" ? status.User[status.Self.UserID].DisplayName : undefined; - return { - backendState: status.BackendState, - authURL: status.AuthURL, - displayName: displayName - }; + status.backendState = tailscaleStatus.BackendState; + status.authURL = tailscaleStatus.AuthURL; + status.displayName = status.backendState == "Running" ? tailscaleStatus.User[tailscaleStatus.Self.UserID].DisplayName : undefined; + return status; }).catch(function(error) { - return { backendState: undefined, authURL: undefined, displayName: undefined }; + status.backendState = undefined; + status.authURL = undefined; + status.displayName = undefined; + return status; }); } @@ -75,8 +74,7 @@ function renderLogin(loginStatus, authURL, displayName) { return view.extend({ load: function() { return Promise.all([ - uci.load('tailscale'), - getServiceStatus() + uci.load('tailscale') ]); }, @@ -89,8 +87,25 @@ return view.extend({ s = m.section(form.TypedSection); s.anonymous = true; s.render = function () { + poll.add(function() { + return Promise.resolve(getStatus()).then(function(res) { + var service_view = document.getElementById("service_status"); + var login_view = document.getElementById("login_status_div"); + service_view.innerHTML = renderStatus(res.isRunning); + login_view.innerHTML = renderLogin(res.backendState, res.authURL, res.displayName); + var logoutButton = document.getElementById('logout_button'); + if (logoutButton) { + logoutButton.onclick = function() { + if (confirm(_('Are you sure you want to logout and unbind the current device?'))) { + fs.exec("/usr/sbin/tailscale", ["logout"]); + } + } + } + }); + }); + return E('div', { class: 'cbi-section', id: 'status_bar' }, [ - E('p', { id: 'service_status' }, renderStatus(isRunning)) + E('p', { id: 'service_status' }, _('Collecting data ...')) ]); } @@ -104,20 +119,6 @@ return view.extend({ o = s.option(form.DummyValue, 'login_status', _('Login Status')); o.depends('enabled', '1'); o.renderWidget = function(section_id, option_id) { - poll.add(function() { - return Promise.resolve(getLoginStatus()).then(function(res) { - document.getElementById('login_status_div').innerHTML = renderLogin(res.backendState, res.authURL, res.displayName); - var logoutButton = document.getElementById('logout_button'); - if (logoutButton) { - logoutButton.onclick = function() { - if (confirm(_('Are you sure you want to logout and unbind the current device?'))) { - fs.exec("/usr/sbin/tailscale", ["logout"]); - } - } - } - }); - }); - return E('div', { 'id': 'login_status_div' }, _('Collecting data ...')); }; diff --git a/po/templates/tailscale.pot b/po/templates/tailscale.pot index 23ab598..552a34d 100644 --- a/po/templates/tailscale.pot +++ b/po/templates/tailscale.pot @@ -1,15 +1,15 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159 msgid "Accept DNS" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159 msgid "Accept DNS configuration from the Tailscale admin console." msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:151 msgid "Accept subnet routes that other nodes advertise." msgstr "" @@ -17,11 +17,11 @@ msgstr "" msgid "Access Control" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:148 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:149 msgid "Advanced Settings" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:99 msgid "Are you sure you want to logout and unbind the current device?" msgstr "" @@ -29,15 +29,16 @@ msgstr "" msgid "Auth Key" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:151 msgid "Auto Mesh" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:98 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113 msgid "Basic Settings" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:121 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:108 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:122 msgid "Collecting data ..." msgstr "" @@ -45,31 +46,31 @@ msgstr "" msgid "Custom Server Settings" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155 msgid "Device Name" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:100 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:115 msgid "Enable" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:143 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144 msgid "Error Log" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163 msgid "Exit Node" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167 msgid "Expose Subnets" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167 msgid "Expose physical network routes onto Tailscale. e.g. 10.0.0.0/24" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:133 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:134 msgid "Firewall Mode" msgstr "" @@ -101,23 +102,23 @@ msgstr "" msgid "LAN access Tailscale" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155 msgid "Leave blank to use the device's hostname." msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:139 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 msgid "Logging program activities." msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:143 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144 msgid "Logging program errors and exceptions." msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:104 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:119 msgid "Login Status" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:67 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:66 msgid "Logout and Unbind" msgstr "" @@ -125,12 +126,12 @@ msgstr "" msgid "MTU" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:54 -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:69 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:53 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:68 msgid "NOT RUNNING" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:64 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:63 msgid "Needs Login" msgstr "" @@ -142,19 +143,19 @@ msgstr "" msgid "No interface online." msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163 msgid "Offer to be an exit node for outbound internet traffic from the Tailscale network." msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:139 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 msgid "Output Log" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:124 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125 msgid "Port" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:52 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51 msgid "RUNNING" msgstr "" @@ -162,14 +163,14 @@ msgstr "" msgid "Server Address" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:124 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125 msgid "Set the Tailscale port number." msgstr "" #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:72 -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:52 -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:54 -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:87 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:53 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:85 #: luci-app-tailscale/root/usr/share/luci/menu.d/luci-app-tailscale.json:3 msgid "Tailscale" msgstr "" @@ -183,11 +184,11 @@ msgid "Tailscale access WAN" msgstr "" #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:73 -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:87 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:85 msgid "Tailscale is a cross-platform and easy to use virtual LAN." msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:129 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130 msgid "The working directory contains config files, audit logs, and runtime info." msgstr "" @@ -215,6 +216,6 @@ msgstr "" msgid "WAN access Tailscale" msgstr "" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:129 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130 msgid "Workdir" msgstr "" diff --git a/po/zh_Hans/tailscale.po b/po/zh_Hans/tailscale.po index 351916b..299eec3 100644 --- a/po/zh_Hans/tailscale.po +++ b/po/zh_Hans/tailscale.po @@ -7,15 +7,15 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159 msgid "Accept DNS" msgstr "允许DNS" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159 msgid "Accept DNS configuration from the Tailscale admin console." -msgstr "使用Tailscale管理控制台的DNS配置。" +msgstr "使用 Tailscale 管理控制台的 DNS 配置。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:151 msgid "Accept subnet routes that other nodes advertise." msgstr "接受其他节点广播的子网路由。" @@ -23,11 +23,11 @@ msgstr "接受其他节点广播的子网路由。" msgid "Access Control" msgstr "访问控制" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:148 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:149 msgid "Advanced Settings" msgstr "高级设置" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:99 msgid "Are you sure you want to logout and unbind the current device?" msgstr "是否注销当前登录并且解绑当前设备?" @@ -35,15 +35,16 @@ msgstr "是否注销当前登录并且解绑当前设备?" msgid "Auth Key" msgstr "认证密钥" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:151 msgid "Auto Mesh" msgstr "自动组网" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:98 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113 msgid "Basic Settings" msgstr "基础设置" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:121 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:108 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:122 msgid "Collecting data ..." msgstr "正在收集数据..." @@ -51,31 +52,31 @@ msgstr "正在收集数据..." msgid "Custom Server Settings" msgstr "自定义服务器" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155 msgid "Device Name" msgstr "设备名称" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:100 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:115 msgid "Enable" msgstr "启用" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:143 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144 msgid "Error Log" msgstr "错误日志" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163 msgid "Exit Node" msgstr "出口节点" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167 msgid "Expose Subnets" msgstr "公开网段" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167 msgid "Expose physical network routes onto Tailscale. e.g. 10.0.0.0/24" -msgstr "广播子网路由至Tailscale。例如:10.0.0.0/24" +msgstr "广播子网路由至 Tailscale。例如:10.0.0.0/24" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:133 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:134 msgid "Firewall Mode" msgstr "防火墙模式" @@ -85,7 +86,7 @@ msgstr "全局设置" #: luci-app-tailscale/root/usr/share/rpcd/acl.d/luci-app-tailscale.json:3 msgid "Grant access to Tailscale configuration" -msgstr "授予访问Tailscale配置的权限" +msgstr "授予访问 Tailscale 配置的权限" #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:86 msgid "IPv4 Address" @@ -107,23 +108,23 @@ msgstr "接口名称" msgid "LAN access Tailscale" msgstr "本地局域网访问虚拟局域网" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155 msgid "Leave blank to use the device's hostname." msgstr "留空以使用设备的主机名。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:139 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 msgid "Logging program activities." msgstr "记录程序运行信息。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:143 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144 msgid "Logging program errors and exceptions." msgstr "记录程序错误和异常信息。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:104 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:119 msgid "Login Status" msgstr "已绑定用户" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:67 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:66 msgid "Logout and Unbind" msgstr "注销登录并解除绑定" @@ -131,12 +132,12 @@ msgstr "注销登录并解除绑定" msgid "MTU" msgstr "MTU" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:54 -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:69 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:53 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:68 msgid "NOT RUNNING" msgstr "未运行" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:64 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:63 msgid "Needs Login" msgstr "未登录" @@ -148,19 +149,19 @@ msgstr "网络接口信息" msgid "No interface online." msgstr "无在线接口。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163 msgid "Offer to be an exit node for outbound internet traffic from the Tailscale network." -msgstr "作为Tailscale广域网出口节点。" +msgstr "作为 Tailscale 广域网出口节点。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:139 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 msgid "Output Log" msgstr "运行日志" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:124 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125 msgid "Port" msgstr "端口" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:52 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51 msgid "RUNNING" msgstr "运行中" @@ -168,14 +169,14 @@ msgstr "运行中" msgid "Server Address" msgstr "服务器地址" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:124 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125 msgid "Set the Tailscale port number." -msgstr "设置Tailscale端口号。" +msgstr "设置 Tailscale 端口号。" #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:72 -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:52 -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:54 -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:87 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:53 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:85 #: luci-app-tailscale/root/usr/share/luci/menu.d/luci-app-tailscale.json:3 msgid "Tailscale" msgstr "Tailscale" @@ -189,11 +190,11 @@ msgid "Tailscale access WAN" msgstr "虚拟局域网访问本地广域网" #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:73 -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:87 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:85 msgid "Tailscale is a cross-platform and easy to use virtual LAN." -msgstr "Tailscale是一个跨平台且易于使用的虚拟局域网 VPN。" +msgstr "Tailscale 是一个跨平台且易于使用的虚拟局域网 VPN。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:129 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130 msgid "The working directory contains config files, audit logs, and runtime info." msgstr "工作目录包含配置文件、审计日志和运行时信息。" @@ -221,6 +222,6 @@ msgstr "使用 %s 部署私有服务器" msgid "WAN access Tailscale" msgstr "本地广域网访问虚拟局域网" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:129 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130 msgid "Workdir" msgstr "工作目录" diff --git a/po/zh_Hant/tailscale.po b/po/zh_Hant/tailscale.po index d326005..b5ce34f 100644 --- a/po/zh_Hant/tailscale.po +++ b/po/zh_Hant/tailscale.po @@ -7,15 +7,15 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159 msgid "Accept DNS" msgstr "允許DNS" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159 msgid "Accept DNS configuration from the Tailscale admin console." -msgstr "使用Tailscale管理控制台的DNS配置。" +msgstr "使用 Tailscale 管理控制台的DNS配置。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:151 msgid "Accept subnet routes that other nodes advertise." msgstr "接受其他節點廣播的子網路由。" @@ -23,11 +23,11 @@ msgstr "接受其他節點廣播的子網路由。" msgid "Access Control" msgstr "訪問控制" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:148 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:149 msgid "Advanced Settings" msgstr "高級設置" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:99 msgid "Are you sure you want to logout and unbind the current device?" msgstr "是否註銷當前登錄並且解綁當前設備?" @@ -35,15 +35,16 @@ msgstr "是否註銷當前登錄並且解綁當前設備?" msgid "Auth Key" msgstr "認證密鑰" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:151 msgid "Auto Mesh" msgstr "自動組網" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:98 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113 msgid "Basic Settings" msgstr "基礎設置" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:121 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:108 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:122 msgid "Collecting data ..." msgstr "正在收集數據..." @@ -51,31 +52,31 @@ msgstr "正在收集數據..." msgid "Custom Server Settings" msgstr "自定義服務器" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155 msgid "Device Name" msgstr "設備名稱" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:100 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:115 msgid "Enable" msgstr "啟用" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:143 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144 msgid "Error Log" msgstr "錯誤日誌" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163 msgid "Exit Node" msgstr "出口節點" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167 msgid "Expose Subnets" msgstr "公開網段" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167 msgid "Expose physical network routes onto Tailscale. e.g. 10.0.0.0/24" -msgstr "廣播子網路由至Tailscale。例如:10.0.0.0/24" +msgstr "廣播子網路由至 Tailscale。例如:10.0.0.0/24" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:133 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:134 msgid "Firewall Mode" msgstr "防火牆模式" @@ -85,7 +86,7 @@ msgstr "全局設置" #: luci-app-tailscale/root/usr/share/rpcd/acl.d/luci-app-tailscale.json:3 msgid "Grant access to Tailscale configuration" -msgstr "授予訪問Tailscale配置的權限" +msgstr "授予訪問 Tailscale 配置的權限" #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:86 msgid "IPv4 Address" @@ -107,23 +108,23 @@ msgstr "接口名稱" msgid "LAN access Tailscale" msgstr "本地局域網訪問虛擬局域網" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155 msgid "Leave blank to use the device's hostname." msgstr "留空以使用設備的主機名。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:139 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 msgid "Logging program activities." msgstr "記錄程序運行信息。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:143 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144 msgid "Logging program errors and exceptions." msgstr "記錄程序錯誤和異常信息。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:104 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:119 msgid "Login Status" msgstr "已綁定用戶" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:67 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:66 msgid "Logout and Unbind" msgstr "註銷登錄並解除綁定" @@ -131,12 +132,12 @@ msgstr "註銷登錄並解除綁定" msgid "MTU" msgstr "MTU" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:54 -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:69 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:53 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:68 msgid "NOT RUNNING" msgstr "未運行" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:64 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:63 msgid "Needs Login" msgstr "未登錄" @@ -148,19 +149,19 @@ msgstr "網絡接口信息" msgid "No interface online." msgstr "無在線接口。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163 msgid "Offer to be an exit node for outbound internet traffic from the Tailscale network." -msgstr "作為Tailscale廣域網出口節點。" +msgstr "作為 Tailscale 廣域網出口節點。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:139 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 msgid "Output Log" msgstr "運行日誌" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:124 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125 msgid "Port" msgstr "端口" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:52 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51 msgid "RUNNING" msgstr "運行中" @@ -168,14 +169,14 @@ msgstr "運行中" msgid "Server Address" msgstr "服務器地址" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:124 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125 msgid "Set the Tailscale port number." -msgstr "設置Tailscale端口號。" +msgstr "設置 Tailscale 端口號。" #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:72 -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:52 -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:54 -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:87 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:53 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:85 #: luci-app-tailscale/root/usr/share/luci/menu.d/luci-app-tailscale.json:3 msgid "Tailscale" msgstr "Tailscale" @@ -189,11 +190,11 @@ msgid "Tailscale access WAN" msgstr "虛擬局域網訪問本地廣域網" #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:73 -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:87 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:85 msgid "Tailscale is a cross-platform and easy to use virtual LAN." -msgstr "Tailscale是一個跨平臺且易於使用的虛擬局域網 VPN。" +msgstr "Tailscale 是一個跨平臺且易於使用的虛擬局域網 VPN。" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:129 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130 msgid "The working directory contains config files, audit logs, and runtime info." msgstr "工作目錄包含配置文件、審計日誌和運行時信息。" @@ -221,6 +222,6 @@ msgstr "使用 %s 部署私有服務器" msgid "WAN access Tailscale" msgstr "本地廣域網訪問虛擬局域網" -#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:129 +#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130 msgid "Workdir" msgstr "工作目錄" diff --git a/root/etc/init.d/tailscale b/root/etc/init.d/tailscale index 264daff..66ec943 100755 --- a/root/etc/init.d/tailscale +++ b/root/etc/init.d/tailscale @@ -55,41 +55,43 @@ custom_instance() { [ -f "/var/run/tailscale.wait.pid" ] && return touch /var/run/tailscale.wait.pid count=0 - while [ -z "$(ifconfig | grep 'tailscale' | awk '{print $1}')" ] + while [ -z "$(ifconfig | grep 'tailscale' | awk '{print $1}')" ] || [ -z "$(tailscale ip -4)" ] do sleep 2 let count++ [ "${count}" -ge 5 ] && { rm /var/run/tailscale.wait.pid; exit 19; } done ts0=$(ifconfig | grep 'tailscale' | awk '{print $1}') - for i in ${ts0} - do - echo "tailscale interface $i is started!" - if [ -z "$(uci -q get network.$i)" ]; then + if [ -z "$(uci -q get network.tailscale)" ]; then + uci set network.tailscale='interface' + if [ "$ts0" = *$'\n'* ]; then + uci set network.ts_lan='device' + uci set network.ts_lan.type='bridge' + uci set network.ts_lan.name='ts-lan' + for port in "${ts0}"; do + uci add_list network.ts_lan.ports=$port + done + uci set network.tailscale.proto='none' + uci set network.tailscale.device='ts-lan' + else ts_ip=$(tailscale ip -4) - uci set network.$i=interface - uci set network.$i.proto='static' - uci set network.$i.ipaddr=$ts_ip - uci set network.$i.netmask='255.0.0.0' - uci set network.$i.device=$i + uci set network.tailscale.proto='static' + uci set network.tailscale.ipaddr=$ts_ip + uci set network.tailscale.netmask='255.0.0.0' + uci set network.tailscale.device=$ts0 fi - done + fi config_get_bool acceptRoutes $cfg 'acceptRoutes' if [ "$acceptRoutes" == "1" ]; then if [ -z "$(uci -q get firewall.tszone)" ]; then - uci set firewall.tszone=zone + uci set firewall.tszone='zone' uci set firewall.tszone.input='ACCEPT' uci set firewall.tszone.output='ACCEPT' uci set firewall.tszone.forward='REJECT' uci set firewall.tszone.masq='1' uci set firewall.tszone.name='tailscale' - if [ "$ts0" = *$'\n'* ]; then - printf '%s\n' "$ts0" | IFS=$'\n' read -ra ts0_array - uci add_list firewall.tszone.network ${ts0_array[@]} - else - uci set firewall.tszone.network=$ts0 - fi + uci set firewall.tszone.network='tailscale' fi else uci -q delete firewall.tszone @@ -177,12 +179,9 @@ stop_instance() { local cfg="$1" /usr/sbin/tailscaled --cleanup - # Remove network interfaces - ts0="$(ifconfig | grep 'tailscale' | awk '{print $1}')" - for i in ${ts0} - do - uci -q delete network.$i - done + # Remove network settings + uci -q delete network.tailscale + uci -q delete network.ts_lan # Remove firewall settings uci -q delete firewall.tszone