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).
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
-- 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'));
|
||||
Reference in New Issue
Block a user