Files
nexus/rust/core/migrations/008_rdp_protocol.sql
T
Andy Dixon d25746bb14 feat: RDP profiles, sessions and viewer
- Protocol::Rdp with RdpConfig (domain, password mode, certificate
  policy, TLS-only fallback, fixed or tab-sized resolution, SOCKS5/HTTP
  proxy, SSH tunnel); migration 008 adds rdp_config and drops the
  protocol CHECK constraint so new protocols no longer need a rebuild.
- Session manager: connect_rdp dials directly, via the shared proxy
  module (proxy password from the secret store) or an SSH tunnel; the
  server certificate goes through the known-hosts check (key type
  rdp-tls); a tab-sized desktop uses the tab's reported pixel size, and
  resizes wait until the server opens Display Control. Rejected NLA
  passwords count as auth failures, so a saved one is asked again.
- The VNC viewer becomes DesktopView for both protocols; a small adapter
  turns its keysyms and pointer masks into RDP scancodes, Unicode keys,
  buttons and wheel events. For RDP, Paste Clipboard types the text.
- Profile editor RDP section, Quick Connect, badges, docs.

Verified against xrdp in the app: logon, desktop, input, and connections
through SOCKS5 and HTTP CONNECT relays. Not verified here: Windows/NLA
servers, the SSH tunnel route, and Display Control resizing (xrdp
0.9.24 never opened the channel).
2026-10-12 11:14:39 +01:00

57 lines
2.1 KiB
SQL

-- Migration 008: RDP protocol support
-- Adds an rdp_config column and drops the protocol CHECK constraint: protocol ids are validated
-- in code (Protocol::from_id), and each new protocol needed a table rebuild only to extend it.
CREATE TABLE IF NOT EXISTS profiles_new (
id TEXT PRIMARY KEY,
display_name TEXT NOT NULL,
description TEXT DEFAULT '',
protocol TEXT NOT NULL,
host TEXT NOT NULL,
port INTEGER NOT NULL,
username TEXT DEFAULT '',
tags TEXT DEFAULT '[]',
folder TEXT DEFAULT '',
environment TEXT DEFAULT '',
notes TEXT DEFAULT '',
favourite INTEGER DEFAULT 0,
last_connected TEXT,
connect_timeout INTEGER DEFAULT 30,
read_timeout INTEGER DEFAULT 0,
terminal_font_family TEXT DEFAULT '',
terminal_font_size INTEGER DEFAULT 14,
terminal_scrollback INTEGER DEFAULT 10000,
terminal_cursor_style TEXT DEFAULT 'block',
ssh_config TEXT,
telnet_config TEXT,
raw_config TEXT,
github_config TEXT,
vnc_config TEXT,
irc_config TEXT,
serial_config TEXT,
rdp_config TEXT,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
INSERT OR IGNORE INTO profiles_new (
id, display_name, description, protocol, host, port, username, tags, folder, environment,
notes, favourite, last_connected, connect_timeout, read_timeout, terminal_font_family,
terminal_font_size, terminal_scrollback, terminal_cursor_style, ssh_config, telnet_config,
raw_config, github_config, vnc_config, irc_config, serial_config, rdp_config, created_at,
updated_at
)
SELECT
id, display_name, description, protocol, host, port, username, tags, folder, environment,
notes, favourite, last_connected, connect_timeout, read_timeout, terminal_font_family,
terminal_font_size, terminal_scrollback, terminal_cursor_style, ssh_config, telnet_config,
raw_config, github_config, vnc_config, irc_config, serial_config, NULL, created_at,
updated_at
FROM profiles;
DROP TABLE profiles;
ALTER TABLE profiles_new RENAME TO profiles;
INSERT INTO schema_version (version, applied_at) VALUES (8, datetime('now'));