Skip to content

Commit 0f6cc25

Browse files
committed
feat: online exit nodes & bump version
1 parent 06e27c6 commit 0f6cc25

File tree

6 files changed

+246
-168
lines changed

6 files changed

+246
-168
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ LUCI_TITLE:=LuCI for Tailscale
88
LUCI_DEPENDS:=+tailscale
99
LUCI_PKGARCH:=all
1010

11-
PKG_VERSION:=1.2.0
11+
PKG_VERSION:=1.2.1
1212

1313
include $(TOPDIR)/feeds/luci/luci.mk
1414

htdocs/luci-static/resources/view/tailscale/setting.js

+23-5
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ function getStatus() {
2424
backendState: undefined,
2525
authURL: undefined,
2626
displayName: undefined,
27-
routes: []
27+
onlineExitNodes: [],
28+
subnetRoutes: []
2829
};
2930
return Promise.resolve(callServiceList('tailscale')).then(res => {
3031
try {
@@ -40,7 +41,9 @@ function getStatus() {
4041
status.backendState = tailscaleStatus.BackendState;
4142
status.authURL = tailscaleStatus.AuthURL;
4243
status.displayName = (status.backendState === "Running") ? tailscaleStatus.User[tailscaleStatus.Self.UserID].DisplayName : undefined;
43-
status.routes = Object.values(tailscaleStatus.Peer)
44+
status.onlineExitNodes = Object.values(tailscaleStatus.Peer)
45+
.flatMap(peer => (peer.ExitNodeOption && peer.Online) ? [peer.HostName] : []);
46+
status.subnetRoutes = Object.values(tailscaleStatus.Peer)
4447
.flatMap(peer => peer.PrimaryRoutes || []);
4548
return status;
4649
});
@@ -85,7 +88,8 @@ return view.extend({
8588
render: function(data) {
8689
var m, s, o;
8790
var statusData = data[1];
88-
var routes = statusData.routes;
91+
var onlineExitNodes = statusData.onlineExitNodes;
92+
var subnetRoutes = statusData.subnetRoutes;
8993

9094
m = new form.Map('tailscale', _('Tailscale'), _('Tailscale is a cross-platform and easy to use virtual LAN.'));
9195

@@ -168,6 +172,20 @@ return view.extend({
168172
o.default = o.disabled;
169173
o.rmempty = false;
170174

175+
o = s.taboption('advance', form.ListValue, 'exitNode', _('Online Exit Nodes'), _('Select an online machine name to use as an exit node.'));
176+
if (onlineExitNodes.length > 0) {
177+
o.value('', _('-- Please choose --'));
178+
onlineExitNodes.forEach(function(node) {
179+
o.value(node, node);
180+
});
181+
} else {
182+
o.value('', _('No Available Exit Nodes'));
183+
o.readonly = true;
184+
}
185+
o.default = '';
186+
o.depends('advertiseExitNode', '0');
187+
o.rmempty = true;
188+
171189
o = s.taboption('advance', form.DynamicList, 'advertiseRoutes', _('Expose Subnets'), _('Expose physical network routes into Tailscale, e.g. <code>10.0.0.0/24</code>.'));
172190
o.default = '';
173191
o.rmempty = true;
@@ -178,8 +196,8 @@ return view.extend({
178196
o.rmempty = false;
179197

180198
o = s.taboption('advance', form.DynamicList, 'subnetRoutes', _('Subnet Routes'), _('Select subnet routes advertised by other nodes in Tailscale network.'));
181-
if (routes.length > 0) {
182-
routes.forEach(function(route) {
199+
if (subnetRoutes.length > 0) {
200+
subnetRoutes.forEach(function(route) {
183201
o.value(route, route);
184202
});
185203
} else {

po/templates/tailscale.pot

+69-53
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,88 @@
11
msgid ""
22
msgstr "Content-Type: text/plain; charset=UTF-8"
33

4-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163
4+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177
5+
msgid "-- Please choose --"
6+
msgstr ""
7+
8+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167
59
msgid "Accept DNS"
610
msgstr ""
711

8-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163
12+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167
913
msgid "Accept DNS configuration from the Tailscale admin console."
1014
msgstr ""
1115

12-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155
16+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159
1317
msgid "Accept Routes"
1418
msgstr ""
1519

16-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155
20+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159
1721
msgid "Accept subnet routes that other nodes advertise."
1822
msgstr ""
1923

20-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:193
24+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:211
2125
msgid "Access Control"
2226
msgstr ""
2327

24-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:203
28+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:221
2529
msgid "Additional Flags"
2630
msgstr ""
2731

28-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:153
32+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:157
2933
msgid "Advanced Settings"
3034
msgstr ""
3135

32-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:104
36+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:108
3337
msgid "Are you sure you want to logout and unbind the current device?"
3438
msgstr ""
3539

36-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:215
40+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:233
3741
msgid "Auth Key"
3842
msgstr ""
3943

40-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:203
44+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:221
4145
msgid "Available flags"
4246
msgstr ""
4347

44-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:118
48+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:122
4549
msgid "Basic Settings"
4650
msgstr ""
4751

48-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113
49-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:127
52+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:117
53+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:131
5054
msgid "Collecting data ..."
5155
msgstr ""
5256

53-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:208
57+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:226
5458
msgid "Custom Server Settings"
5559
msgstr ""
5660

57-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159
61+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163
5862
msgid "Device Name"
5963
msgstr ""
6064

61-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:120
65+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:124
6266
msgid "Enable"
6367
msgstr ""
6468

65-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167
69+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171
6670
msgid "Exit Node"
6771
msgstr ""
6872

69-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171
73+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189
7074
msgid "Expose Subnets"
7175
msgstr ""
7276

73-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171
77+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189
7478
msgid "Expose physical network routes into Tailscale, e.g. <code>10.0.0.0/24</code>."
7579
msgstr ""
7680

77-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:201
81+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:219
7882
msgid "Extra Settings"
7983
msgstr ""
8084

81-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:139
85+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:143
8286
msgid "Firewall Mode"
8387
msgstr ""
8488

@@ -106,31 +110,31 @@ msgstr ""
106110
msgid "Interface Name"
107111
msgstr ""
108112

109-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:196
113+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:214
110114
msgid "LAN access Tailscale"
111115
msgstr ""
112116

113-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159
117+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163
114118
msgid "Leave blank to use the device's hostname."
115119
msgstr ""
116120

117-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:203
121+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:221
118122
msgid "List of extra flags. Format: --flags=value, e.g. <code>--exit-node=10.0.0.1</code>. <br> %s for enabling settings upon the initiation of Tailscale."
119123
msgstr ""
120124

121-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:145
125+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:149
122126
msgid "Logging program activities."
123127
msgstr ""
124128

125-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:149
129+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:153
126130
msgid "Logging program errors and exceptions."
127131
msgstr ""
128132

129-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:124
133+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:128
130134
msgid "Login Status"
131135
msgstr ""
132136

133-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:69
137+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:72
134138
msgid "Logout and Unbind"
135139
msgstr ""
136140

@@ -142,36 +146,44 @@ msgstr ""
142146
msgid "MTU"
143147
msgstr ""
144148

145-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:56
146-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:71
149+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:59
150+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:74
147151
msgid "NOT RUNNING"
148152
msgstr ""
149153

150-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:66
154+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:69
151155
msgid "Needs Login"
152156
msgstr ""
153157

154158
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:87
155159
msgid "Network Interface Information"
156160
msgstr ""
157161

158-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186
162+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:182
163+
msgid "No Available Exit Nodes"
164+
msgstr ""
165+
166+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:204
159167
msgid "No Available Subnet Routes"
160168
msgstr ""
161169

162170
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:83
163171
msgid "No interface online."
164172
msgstr ""
165173

166-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167
174+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171
167175
msgid "Offer to be an exit node for outbound internet traffic from the Tailscale network."
168176
msgstr ""
169177

170-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130
178+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175
179+
msgid "Online Exit Nodes"
180+
msgstr ""
181+
182+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:134
171183
msgid "Port"
172184
msgstr ""
173185

174-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:54
186+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:57
175187
msgid "RUNNING"
176188
msgstr ""
177189

@@ -185,56 +197,60 @@ msgctxt "scroll to bottom (the tail) of the log file"
185197
msgid "Scroll to tail"
186198
msgstr ""
187199

188-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180
200+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175
201+
msgid "Select an online machine name to use as an exit node."
202+
msgstr ""
203+
204+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:198
189205
msgid "Select subnet routes advertised by other nodes in Tailscale network."
190206
msgstr ""
191207

192-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:211
208+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:229
193209
msgid "Server Address"
194210
msgstr ""
195211

196-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130
212+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:134
197213
msgid "Set the Tailscale port number."
198214
msgstr ""
199215

200-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175
216+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:193
201217
msgid "Site To Site"
202218
msgstr ""
203219

204-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:149
220+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:153
205221
msgid "StdErr Log"
206222
msgstr ""
207223

208-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:145
224+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:149
209225
msgid "StdOut Log"
210226
msgstr ""
211227

212-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180
228+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:198
213229
msgid "Subnet Routes"
214230
msgstr ""
215231

216232
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:120
217-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:54
218-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:56
219-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:90
233+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:57
234+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:59
235+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:94
220236
#: luci-app-tailscale/root/usr/share/luci/menu.d/luci-app-tailscale.json:3
221237
msgid "Tailscale"
222238
msgstr ""
223239

224-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:194
240+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:212
225241
msgid "Tailscale access LAN"
226242
msgstr ""
227243

228-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:195
244+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:213
229245
msgid "Tailscale access WAN"
230246
msgstr ""
231247

232248
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:121
233-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:90
249+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:94
234250
msgid "Tailscale is a cross-platform and easy to use virtual LAN."
235251
msgstr ""
236252

237-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:135
253+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:139
238254
msgid "The working directory contains config files, audit logs, and runtime info."
239255
msgstr ""
240256

@@ -258,18 +274,18 @@ msgstr ""
258274
msgid "Unable to load log data:"
259275
msgstr ""
260276

261-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:209
277+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:227
262278
msgid "Use %s to deploy a private server."
263279
msgstr ""
264280

265-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175
281+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:193
266282
msgid "Use site-to-site layer 3 networking to connect subnets on the Tailscale network."
267283
msgstr ""
268284

269-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:197
285+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:215
270286
msgid "WAN access Tailscale"
271287
msgstr ""
272288

273-
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:135
289+
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:139
274290
msgid "Workdir"
275291
msgstr ""

0 commit comments

Comments
 (0)