tabby-rdp 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.normalizeFingerprint = normalizeFingerprint;
4
+ exports.preconnectionPdu = preconnectionPdu;
5
+ exports.offersNla = offersNla;
4
6
  exports.serverFraming = serverFraming;
5
7
  exports.startRDCleanPathProxy = startRDCleanPathProxy;
6
8
  // RDCleanPath proxy for the IronRDP web client, running inside Tabby's renderer.
@@ -89,6 +91,9 @@ function decodeRequest(buf) {
89
91
  case 3:
90
92
  req.proxyAuth = value.toString('utf8');
91
93
  break;
94
+ case 5:
95
+ req.pcb = value.toString('utf8');
96
+ break;
92
97
  case 6:
93
98
  req.x224 = Buffer.from(value);
94
99
  break;
@@ -97,8 +102,24 @@ function decodeRequest(buf) {
97
102
  }
98
103
  return req;
99
104
  }
105
+ /** The response: the server's X.224 confirm (none for a Hyper-V VM's console), its certificate chain, its address. */
100
106
  function encodeResponse(x224, certChain, serverAddr) {
101
- return seq(explicit(0, derInteger(VERSION_1)), explicit(6, octets(x224)), explicit(7, seq(...certChain.map(octets))), explicit(9, utf8(serverAddr)));
107
+ return seq(explicit(0, derInteger(VERSION_1)), ...x224 ? [explicit(6, octets(x224))] : [], explicit(7, seq(...certChain.map(octets))), explicit(9, utf8(serverAddr)));
108
+ }
109
+ /**
110
+ * A version 2 pre-connection PDU ([MS-RDPEPS] 2.2.1.2) carrying `text`: what a client sends first to a server that
111
+ * routes by it, as Hyper-V does to a VM's console by the VM's id.
112
+ */
113
+ function preconnectionPdu(text) {
114
+ const blob = Buffer.from(text + '\0', 'utf16le');
115
+ const pdu = Buffer.alloc(18 + blob.length);
116
+ pdu.writeUInt32LE(pdu.length, 0); // cbSize
117
+ pdu.writeUInt32LE(0, 4); // Flags
118
+ pdu.writeUInt32LE(2, 8); // Version
119
+ pdu.writeUInt32LE(0, 12); // Id
120
+ pdu.writeUInt16LE(blob.length / 2, 16); // cchPCB, with the terminator
121
+ blob.copy(pdu, 18);
122
+ return pdu;
102
123
  }
103
124
  function encodeError() {
104
125
  return seq(explicit(0, derInteger(VERSION_1)), explicit(1, seq(explicit(0, derInteger(GENERAL_ERROR)))));
@@ -112,6 +133,7 @@ function readTpkt(stream) {
112
133
  stream.off('data', onData);
113
134
  stream.off('error', onError);
114
135
  stream.off('close', onClose);
136
+ stream.off('end', onClose);
115
137
  };
116
138
  const onError = (e) => { cleanup(); reject(e); };
117
139
  const onClose = () => { cleanup(); reject(new Error('upstream closed during X.224')); };
@@ -134,6 +156,8 @@ function readTpkt(stream) {
134
156
  stream.on('data', onData);
135
157
  stream.on('error', onError);
136
158
  stream.on('close', onClose);
159
+ // An SSH channel says when the server has closed its side ("end") without always saying it is closed.
160
+ stream.on('end', onClose);
137
161
  });
138
162
  }
139
163
  function certChainOf(socket) {
@@ -152,6 +176,15 @@ function certChainOf(socket) {
152
176
  * need): a server with RDP's standard security only (xrdp with security_layer=rdp, for example) answers without a
153
177
  * negotiation response, or with PROTOCOL_RDP, or refuses the negotiation. Null when TLS can go ahead.
154
178
  */
179
+ /**
180
+ * Whether the server's answer to the connection request chose Network Level Authentication (CredSSP: HYBRID or
181
+ * HYBRID_EX). With it, the sign-in is a proof both ways and the password only goes to a server that knows it already.
182
+ * Without it (plain TLS, as xrdp does), the client sends the password itself in its Client Info PDU: encrypted on the
183
+ * way, readable to whatever answered.
184
+ */
185
+ function offersNla(x224) {
186
+ return x224.length >= 19 && x224[11] === 0x02 && (x224.readUInt32LE(15) & (2 | 8)) !== 0;
187
+ }
155
188
  function noTls(x224) {
156
189
  // TPKT (4), X.224 Connection Confirm (7), then RDP_NEG_RSP or RDP_NEG_FAILURE (8): type, flags, length, value.
157
190
  const standardOnly = 'the RDP server only offers standard RDP security, without TLS (for xrdp: set security_layer=negotiate in /etc/xrdp/xrdp.ini and restart xrdp)';
@@ -330,20 +363,55 @@ const KEY_ENCIPHERMENT_ONLY_TLS = {
330
363
  };
331
364
  class NoTlsError extends Error {
332
365
  }
333
- /** Sends the client's X.224 request upstream, reads the confirm, then does TLS there. */
334
- async function handshake(openUpstream, destination, x224Request, legacyTls) {
366
+ /** The client's first message (the RDCleanPath request: a destination, a token, an X.224 request) is small. */
367
+ const MAX_HELLO = 64 * 1024;
368
+ /** How long a client has to send it, and how long the server has to answer X.224 and TLS. */
369
+ const HELLO_TIMEOUT_MS = 10_000;
370
+ const HANDSHAKE_TIMEOUT_MS = 45_000;
371
+ /** What the client may send ahead while the server is being reached (CredSSP hasn't started: next to nothing). */
372
+ const MAX_EARLY = 256 * 1024;
373
+ /** One client at a time uses a proxy; a reconnect can overlap the connection it replaces. */
374
+ const MAX_CLIENTS = 4;
375
+ /** A WebSocket message from the client: RDP PDUs, at most a few megabytes for a shared drive's read. */
376
+ const MAX_MESSAGE = 32 * 1024 * 1024;
377
+ /** Data waiting for the other side past this pauses the side it comes from, until half of it is gone. */
378
+ const HIGH_WATER = 8 * 1024 * 1024;
379
+ /**
380
+ * Sends the client's X.224 request upstream, reads the confirm, then does TLS there. With a pre-connection blob, that
381
+ * goes first; without an X.224 request (a Hyper-V VM's console), TLS follows the blob at once and X.224 is the
382
+ * client's to do later. `track` hears of each stream as soon as it exists, so the caller can end them if the client
383
+ * goes away meanwhile; `gone` says it has.
384
+ */
385
+ async function handshake(openUpstream, destination, pcb, x224Request, legacyTls, track, gone, withoutNla) {
335
386
  const raw = await openUpstream(destination);
387
+ track(raw);
336
388
  try {
337
- raw.write(x224Request);
338
- const x224 = await readTpkt(raw);
339
- const refused = noTls(x224);
340
- if (refused) {
341
- throw new NoTlsError(refused);
389
+ if (gone()) {
390
+ throw new Error('the client left');
391
+ }
392
+ if (pcb) {
393
+ raw.write(preconnectionPdu(pcb));
394
+ }
395
+ let x224 = null;
396
+ if (x224Request) {
397
+ raw.write(x224Request);
398
+ x224 = await readTpkt(raw);
399
+ const refused = noTls(x224);
400
+ if (refused) {
401
+ throw new NoTlsError(refused);
402
+ }
403
+ // Before TLS: a server that isn't to get the password gets nothing more at all.
404
+ if (!offersNla(x224)) {
405
+ await withoutNla?.();
406
+ }
342
407
  }
343
408
  const upstream = tls.connect({ socket: raw, rejectUnauthorized: false, ...legacyTls ? KEY_ENCIPHERMENT_ONLY_TLS : {} });
409
+ track(upstream);
344
410
  await new Promise((resolve, reject) => {
345
411
  upstream.once('secureConnect', resolve);
346
412
  upstream.once('error', reject);
413
+ upstream.once('close', () => reject(new Error('upstream closed during TLS')));
414
+ upstream.once('end', () => reject(new Error('upstream closed during TLS')));
347
415
  });
348
416
  return { raw, upstream, x224 };
349
417
  }
@@ -358,22 +426,49 @@ async function startRDCleanPathProxy(openUpstream, checkCertificate, log = () =>
358
426
  // Set once the server turned out to need KEY_ENCIPHERMENT_ONLY_TLS; later connections start with it.
359
427
  let legacyTls = false;
360
428
  const stats = { bytesIn: 0, bytesOut: 0 };
361
- const wss = new WebSocketServer({ host: '127.0.0.1', port: 0 });
429
+ const wss = new WebSocketServer({ host: '127.0.0.1', port: 0, maxPayload: MAX_MESSAGE });
362
430
  await new Promise((resolve, reject) => {
363
431
  wss.once('listening', resolve);
364
432
  wss.once('error', reject);
365
433
  });
434
+ wss.on('error', (e) => log(`proxy: ${e.message}`));
366
435
  wss.on('connection', (ws) => {
436
+ // Anything on this computer can connect to the port; only the client that knows the token gets further than
437
+ // its first message, which has to be small and arrive soon.
438
+ if (wss.clients.size > MAX_CLIENTS) {
439
+ ws.terminate();
440
+ return;
441
+ }
367
442
  let buf = Buffer.alloc(0);
368
443
  let stage = 'hello';
369
444
  const early = [];
445
+ let earlySize = 0;
370
446
  let upstream = null;
371
- let raw = null;
447
+ let closed = false;
448
+ // Every stream opened for this client, from the moment it exists: ended with the client.
449
+ const streams = new Set();
450
+ const track = (stream) => {
451
+ streams.add(stream);
452
+ stream.once('close', () => streams.delete(stream));
453
+ if (closed) {
454
+ stream.destroy();
455
+ }
456
+ };
457
+ const end = () => {
458
+ closed = true;
459
+ clearTimeout(deadline);
460
+ for (const stream of streams) {
461
+ stream.destroy();
462
+ }
463
+ };
464
+ let deadline = setTimeout(() => stage === 'hello' && ws.terminate(), HELLO_TIMEOUT_MS);
372
465
  const toServer = options.autologon ? autologon() : (data) => data;
373
466
  const send = (data) => {
374
467
  const out = toServer(data);
375
- if (out.length) {
376
- upstream.write(out);
468
+ // The server (or the SSH channel to it) not keeping up: stop reading from the client until it has.
469
+ if (out.length && !upstream.write(out) && upstream.writableLength > HIGH_WATER) {
470
+ ws.pause();
471
+ upstream.once('drain', () => ws.resume());
377
472
  }
378
473
  };
379
474
  failure = null;
@@ -385,9 +480,13 @@ async function startRDCleanPathProxy(openUpstream, checkCertificate, log = () =>
385
480
  }
386
481
  catch { }
387
482
  ws.close();
388
- upstream?.destroy();
389
- raw?.destroy();
483
+ end();
390
484
  };
485
+ ws.on('error', (e) => {
486
+ log(`proxy: client: ${e.message}`);
487
+ ws.terminate();
488
+ end();
489
+ });
391
490
  ws.on('message', async (data) => {
392
491
  if (stage === 'relay') {
393
492
  stats.bytesOut += data.length;
@@ -395,37 +494,53 @@ async function startRDCleanPathProxy(openUpstream, checkCertificate, log = () =>
395
494
  return;
396
495
  }
397
496
  if (stage === 'handshake') {
497
+ earlySize += data.length;
498
+ if (earlySize > MAX_EARLY) {
499
+ return fail('the client sent too much before the server was reached');
500
+ }
398
501
  early.push(data);
399
502
  return;
400
503
  }
504
+ // Before the token is checked: no more than a request's worth is kept, whatever length it claims.
505
+ if (buf.length + data.length > MAX_HELLO) {
506
+ ws.terminate();
507
+ return;
508
+ }
401
509
  buf = Buffer.concat([buf, data]);
402
510
  const outer = readTlv(buf, 0);
403
511
  if (!outer || buf.length < outer.end) {
404
512
  return;
405
513
  }
406
514
  stage = 'handshake';
515
+ clearTimeout(deadline);
407
516
  try {
408
517
  const req = decodeRequest(buf.subarray(0, outer.end));
409
- if (req.version !== VERSION_1 || !req.x224 || !req.destination) {
518
+ buf = Buffer.alloc(0);
519
+ if (req.version !== VERSION_1 || !req.destination || !req.x224 && !req.pcb?.trim()) {
410
520
  return fail('malformed request');
411
521
  }
412
522
  if (req.proxyAuth !== token) {
413
523
  return fail('bad token');
414
524
  }
525
+ deadline = setTimeout(() => stage === 'handshake' && fail('the server didn\'t answer in time'), HANDSHAKE_TIMEOUT_MS);
415
526
  let up;
416
527
  try {
417
- up = await handshake(openUpstream, req.destination, req.x224, legacyTls);
528
+ up = await handshake(openUpstream, req.destination, req.pcb, req.x224, legacyTls, track, () => closed, options.withoutNla);
418
529
  }
419
530
  catch (e) {
420
- if (legacyTls || !/KEY_USAGE_BIT_INCORRECT/.test(e?.message ?? '')) {
531
+ if (closed || legacyTls || !/KEY_USAGE_BIT_INCORRECT/.test(e?.message ?? '')) {
421
532
  throw e;
422
533
  }
423
534
  // The X.224 exchange is spent on that connection: start over on a fresh one.
424
535
  log('TLS: the server certificate only allows key encipherment; using TLS 1.2 with RSA key exchange');
425
536
  legacyTls = true;
426
- up = await handshake(openUpstream, req.destination, req.x224, legacyTls);
537
+ up = await handshake(openUpstream, req.destination, req.pcb, req.x224, legacyTls, track, () => closed, options.withoutNla);
538
+ }
539
+ // Reached: from here on the time is the user's (a certificate to look at) and the session's.
540
+ clearTimeout(deadline);
541
+ if (closed) {
542
+ return;
427
543
  }
428
- raw = up.raw;
429
544
  upstream = up.upstream;
430
545
  const x224 = up.x224;
431
546
  // Both handshakes above, the first and the legacy-TLS retry, end here: the certificate is checked
@@ -436,10 +551,14 @@ async function startRDCleanPathProxy(openUpstream, checkCertificate, log = () =>
436
551
  return fail('the server sent no certificate');
437
552
  }
438
553
  await checkCertificate(fingerprintOf(chain[0]));
554
+ if (closed) {
555
+ return;
556
+ }
439
557
  ws.send(encodeResponse(x224, chain, req.destination));
440
558
  stage = 'relay';
441
559
  // PROTOCOL_HYBRID_EX in the server's negotiation response: an Early User Authorization Result follows CredSSP.
442
- const frames = serverFraming(x224.length >= 19 && x224[11] === 0x02 && x224.readUInt32LE(15) === 8);
560
+ // (A Hyper-V VM's console: CredSSP first, then the X.224 exchange, which never asks for HYBRID_EX.)
561
+ const frames = serverFraming(!!x224 && x224.length >= 19 && x224[11] === 0x02 && x224.readUInt32LE(15) === 8);
443
562
  upstream.on('data', (d) => {
444
563
  stats.bytesIn += d.length;
445
564
  let pdus;
@@ -455,8 +574,25 @@ async function startRDCleanPathProxy(openUpstream, checkCertificate, log = () =>
455
574
  for (const pdu of pdus) {
456
575
  ws.send(pdu);
457
576
  }
577
+ // The client not keeping up: stop reading from the server until it has taken half of it.
578
+ if (ws.bufferedAmount > HIGH_WATER && !upstream.isPaused()) {
579
+ upstream.pause();
580
+ const wait = setInterval(() => {
581
+ if (closed || ws.bufferedAmount < HIGH_WATER / 2) {
582
+ clearInterval(wait);
583
+ upstream?.resume();
584
+ }
585
+ }, 50);
586
+ }
458
587
  });
459
588
  upstream.on('close', () => ws.close());
589
+ // The server closing its side is the end of the desktop: RDP has no use for a connection open one way.
590
+ // Through an SSH host that is all there may be to hear (the channel reports the end, and "closed" only
591
+ // once something more is sent into it), and a desktop waiting for "closed" stayed up, frozen.
592
+ upstream.on('end', () => {
593
+ ws.close();
594
+ upstream?.destroy();
595
+ });
460
596
  upstream.on('error', (e) => { log(`upstream error: ${e.message}`); ws.close(); });
461
597
  for (const d of early) {
462
598
  stats.bytesOut += d.length;
@@ -465,13 +601,12 @@ async function startRDCleanPathProxy(openUpstream, checkCertificate, log = () =>
465
601
  log(`RDCleanPath relay up to ${req.destination}`);
466
602
  }
467
603
  catch (e) {
468
- fail(e?.message ?? String(e));
604
+ if (!closed) {
605
+ fail(e?.message ?? String(e));
606
+ }
469
607
  }
470
608
  });
471
- ws.on('close', () => {
472
- upstream?.destroy();
473
- raw?.destroy();
474
- });
609
+ ws.on('close', end);
475
610
  });
476
611
  const { port } = wss.address();
477
612
  return {
@@ -479,7 +614,13 @@ async function startRDCleanPathProxy(openUpstream, checkCertificate, log = () =>
479
614
  token,
480
615
  stats,
481
616
  get failure() { return failure; },
482
- close: () => wss.close(),
617
+ close: () => {
618
+ // Stops listening, and ends the clients there are: close() alone waits for them.
619
+ wss.close();
620
+ for (const client of wss.clients) {
621
+ client.terminate();
622
+ }
623
+ },
483
624
  };
484
625
  }
485
626
  //# sourceMappingURL=rdcleanpath.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rdcleanpath.js","sourceRoot":"","sources":["../src/rdcleanpath.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rdcleanpath.js","sourceRoot":"","sources":["../src/rdcleanpath.ts"],"names":[],"mappings":"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"}
package/dist/rdpFile.js CHANGED
@@ -1,6 +1,35 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseRdpFile = parseRdpFile;
4
+ /** What a setting in the file would mean here, when it isn't applied: by key, for the values that ask for something. */
5
+ const NOTES = {
6
+ 'audiomode': v => v === '1' ? 'sound left on the remote (sound plays here; Settings › Remote Desktop › Sound)' : v === '2' ? 'sound off (Settings › Remote Desktop › Sound)' : null,
7
+ 'audiocapturemode': v => v === '1' ? 'the microphone (Settings › Remote Desktop › Microphone)' : null,
8
+ 'redirectclipboard': v => v === '0' ? 'the clipboard turned off (it is always on)' : null,
9
+ 'redirectdrives': v => v === '1' ? 'its drives (share folders in Settings › Remote Desktop › Shared folders)' : null,
10
+ 'drivestoredirect': v => v ? 'its drives (share folders in Settings › Remote Desktop › Shared folders)' : null,
11
+ 'redirectprinters': v => v === '1' ? 'printer redirection (not supported)' : null,
12
+ 'redirectsmartcards': v => v === '1' ? 'smart card redirection (not supported)' : null,
13
+ 'redirectcomports': v => v === '1' ? 'serial port redirection (not supported)' : null,
14
+ 'usbdevicestoredirect': v => v ? 'USB redirection (not supported)' : null,
15
+ 'use multimon': v => v === '1' ? 'several monitors (one screen per desktop here)' : null,
16
+ 'screen mode id': (v, all) => v === '1' && (all.get('desktopwidth') || all.get('desktopheight'))
17
+ ? `a fixed ${all.get('desktopwidth') ?? '?'}×${all.get('desktopheight') ?? '?'} window (the desktop follows the pane; Settings › Remote Desktop › When the pane is resized)` : null,
18
+ 'gatewayhostname': (v, all) => v && !usesGateway(all) ? `the RD Gateway ${v}, which the file names but doesn't use (the profile's RD Gateway field takes it)` : null,
19
+ 'promptcredentialonce': (v, all) => v === '0' && usesGateway(all) ? 'an account of its own for the gateway (pick a saved account as the profile\'s Gateway account)' : null,
20
+ 'gatewaycredentialssource': (v, all) => (v === '1' || v === '5') && usesGateway(all) ? `a ${v === '1' ? 'smart card' : 'sign-in page'} at the gateway (not supported; it is signed in to with a user name and password)` : null,
21
+ 'remoteapplicationmode': v => v === '1' ? 'RemoteApp (not supported; the whole desktop opens)' : null,
22
+ 'alternate shell': v => v ? 'a program to start instead of the desktop (not supported)' : null,
23
+ 'enablecredsspsupport': v => v === '0' ? 'sign-in without Network Level Authentication (it is always used)' : null,
24
+ };
25
+ /**
26
+ * Whether the file connects through its gateway: it names one, and `gatewayusagemethod` doesn't say not to (0, or 4:
27
+ * never; 1 to 3: always, when a direct connection fails, by the user's defaults). mstsc always writes the method; a
28
+ * file written by hand that only names a gateway means it.
29
+ */
30
+ function usesGateway(settings) {
31
+ return !!settings.get('gatewayhostname') && !['0', '4'].includes(settings.get('gatewayusagemethod') ?? '');
32
+ }
4
33
  /** mstsc writes UTF-16LE with a byte order mark; other tools write UTF-8, with or without one. */
5
34
  function decode(data) {
6
35
  const b = Buffer.from(data.buffer, data.byteOffset, data.byteLength);
@@ -37,11 +66,16 @@ function parseRdpFile(data) {
37
66
  if (!host || !Number.isInteger(port) || port < 1 || port > 65535) {
38
67
  return null;
39
68
  }
69
+ const scale = Number(settings.get('desktopscalefactor'));
70
+ const ignored = [...settings].map(([key, value]) => NOTES[key]?.(value, settings) ?? null).filter((n) => !!n);
40
71
  return {
41
72
  host,
42
73
  port,
43
74
  ...settings.get('username') ? { username: settings.get('username') } : {},
44
75
  ...settings.get('domain') ? { domain: settings.get('domain') } : {},
76
+ ...Number.isFinite(scale) && scale >= 100 ? { sharpness: scale >= 150 ? 'retina' : 'standard' } : {},
77
+ ...usesGateway(settings) ? { gateway: settings.get('gatewayhostname') } : {},
78
+ ignored: [...new Set(ignored)],
45
79
  };
46
80
  }
47
81
  //# sourceMappingURL=rdpFile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rdpFile.js","sourceRoot":"","sources":["../src/rdpFile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rdpFile.js","sourceRoot":"","sources":["../src/rdpFile.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ const help_1 = require("./help");
19
19
  const accounts_1 = require("./accounts");
20
20
  const accountForm_1 = require("./accountForm");
21
21
  const desktops_1 = require("./desktops");
22
+ const gateway_1 = require("./gateway");
22
23
  const signin_1 = require("./signin");
23
24
  const ssh_1 = require("./ssh");
24
25
  const targets_1 = require("./targets");
@@ -167,6 +168,17 @@ let RDPProfileSettingsComponent = class RDPProfileSettingsComponent {
167
168
  <div class="mb-3" data-own-account>
168
169
  <label>Domain</label>
169
170
  <input class="form-control" name="domain" spellcheck="false" placeholder="Optional">
171
+ </div>
172
+ <div class="mb-3">
173
+ <label>RD Gateway</label>
174
+ <input class="form-control" name="gateway" spellcheck="false" placeholder="Optional: a Remote Desktop Gateway, e.g. rdgw.example.com">
175
+ <div class="text-danger small" data-for="gateway"></div>
176
+ <div class="text-muted small">The desktop is then reached through the gateway (HTTPS, port 443 unless given), and the address above is as the gateway sees it.</div>
177
+ </div>
178
+ <div class="mb-3" data-gateway-account>
179
+ <label>Gateway account</label>
180
+ <select class="form-control" name="gatewayAccount"></select>
181
+ <div class="text-muted small">A gateway that takes another account than the desktop: a saved account for it.</div>
170
182
  </div>`;
171
183
  const field = (name) => root.querySelector(`[name="${name}"]`);
172
184
  field('address').value = o.host ? (0, desktopForm_1.formatAddress)(o.host, o.port || 3389) : '';
@@ -208,6 +220,26 @@ let RDPProfileSettingsComponent = class RDPProfileSettingsComponent {
208
220
  ownAccount();
209
221
  field('username').addEventListener('input', () => { o.username = field('username').value.trim(); });
210
222
  field('domain').addEventListener('input', () => { o.domain = field('domain').value.trim(); });
223
+ // The gateway, and its account where that isn't the desktop's (offered once there is a gateway and a saved account).
224
+ const gateway = field('gateway');
225
+ const gatewayAccount = field('gatewayAccount');
226
+ gateway.value = o.gateway ?? '';
227
+ gatewayAccount.append(new Option('The same as the desktop\'s', ''), ...accounts.map(a => new Option(label(a), a.id)));
228
+ if (o.gatewayAccount && !accounts.some(a => a.id === o.gatewayAccount)) {
229
+ gatewayAccount.append(new Option('(a saved account that no longer exists)', o.gatewayAccount));
230
+ }
231
+ gatewayAccount.value = o.gatewayAccount ?? '';
232
+ const gatewayChanged = () => {
233
+ const text = gateway.value.trim();
234
+ root.querySelector('[data-for=gateway]').textContent = text && !(0, gateway_1.parseGateway)(text) ? 'A name or address, with :port if it isn\'t 443.' : '';
235
+ root.querySelector('[data-gateway-account]').hidden = !text || gatewayAccount.options.length < 2;
236
+ };
237
+ gateway.addEventListener('input', () => {
238
+ o.gateway = gateway.value.trim();
239
+ gatewayChanged();
240
+ });
241
+ gatewayAccount.addEventListener('change', () => { o.gatewayAccount = gatewayAccount.value; });
242
+ gatewayChanged();
211
243
  const via = field('via');
212
244
  via.addEventListener('change', () => { o.via = via.value; });
213
245
  this.injector.get(tabby_core_1.ProfilesService).getProfiles().then(profiles => {
@@ -257,7 +289,7 @@ let RDPProfilesService = class RDPProfilesService extends tabby_core_1.QuickConn
257
289
  this.name = 'Remote desktop (RDP)';
258
290
  this.settingsComponent = RDPProfileSettingsComponent;
259
291
  this.configDefaults = {
260
- options: { host: '', port: 3389, kind: 'windows', username: '', domain: '', account: '', via: '' },
292
+ options: { host: '', port: 3389, kind: 'windows', username: '', domain: '', account: '', via: '', gateway: '', gatewayAccount: '' },
261
293
  clearServiceMessagesOnConnect: false,
262
294
  };
263
295
  }
@@ -267,7 +299,7 @@ let RDPProfilesService = class RDPProfilesService extends tabby_core_1.QuickConn
267
299
  type: targets_1.RDP_PROFILE_TYPE,
268
300
  name: 'Remote desktop (RDP)',
269
301
  icon: 'fas fa-desktop',
270
- options: { host: '', port: 3389, kind: 'windows', username: '', domain: '', account: '', via: '' },
302
+ options: { host: '', port: 3389, kind: 'windows', username: '', domain: '', account: '', via: '', gateway: '', gatewayAccount: '' },
271
303
  isBuiltin: true,
272
304
  isTemplate: true,
273
305
  }];
@@ -295,8 +327,11 @@ let RDPProfilesService = class RDPProfilesService extends tabby_core_1.QuickConn
295
327
  return '';
296
328
  }
297
329
  const address = (0, desktopForm_1.formatAddress)(o.host, o.port || 3389);
298
- const via = o.via ? (this.config.store.profiles ?? []).find((p) => p.id === o.via)?.name ?? 'an SSH profile' : null;
299
- return via ? `${address} via ${via}` : address;
330
+ const via = [
331
+ ...o.gateway ? [`the gateway ${o.gateway}`] : [],
332
+ ...o.via ? [(this.config.store.profiles ?? []).find((p) => p.id === o.via)?.name ?? 'an SSH profile'] : [],
333
+ ];
334
+ return via.length ? `${address} via ${via.join(', via ')}` : address;
300
335
  }
301
336
  /** `[user@]host[:port]`, typed in Tabby's profile selector. */
302
337
  quickConnect(query) {