From 003b9d507a93b3efe5835b4ef4fde4b1814c551f Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 26 Jul 2026 18:57:07 +0800 Subject: [PATCH] support wss:// for web client Signed-off-by: 21pages --- flutter/lib/common/widgets/dialog.dart | 9 +++++++-- src/server/connection.rs | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/flutter/lib/common/widgets/dialog.dart b/flutter/lib/common/widgets/dialog.dart index a6a467690..5b925d947 100644 --- a/flutter/lib/common/widgets/dialog.dart +++ b/flutter/lib/common/widgets/dialog.dart @@ -352,6 +352,9 @@ void changeIdWhiteList({Function()? callback}) async { msg = ""; isInProgress = true; }); + debugPrint( + '[id-whitelist] raw=${controller.text.replaceAll(' ', '␠').replaceAll('\n', r'\n')}', + ); newIdWhiteListField = controller.text.trim(); var newIdWhiteList = ""; if (newIdWhiteListField.isEmpty) { @@ -362,9 +365,10 @@ void changeIdWhiteList({Function()? callback}) async { .split(RegExp(r"[\s,;\n]+")) .where((e) => e.isNotEmpty) .toList(); + debugPrint('[id-whitelist] ids=$ids'); // test id, wildcards '*' and '?' are allowed; - // '@' '.' ':' occur in cross-server IDs like "123456789@server:port" - final idMatch = RegExp(r"^[a-zA-Z0-9_*?@.:-]+$"); + // '@' '.' ':' '/' '[' ']' occur in cross-server IDs and WebSocket URIs + final idMatch = RegExp(r"^[a-zA-Z0-9_*?@.:/\[\]-]+$"); for (final id in ids) { if (!idMatch.hasMatch(id)) { msg = "${translate("Invalid ID")} $id"; @@ -379,6 +383,7 @@ void changeIdWhiteList({Function()? callback}) async { if (newIdWhiteList.trim().isEmpty) { newIdWhiteList = defaultOptionWhitelist; } + debugPrint('[id-whitelist] normalized=$newIdWhiteList'); await bind.mainSetOption( key: kOptionIdWhitelist, value: newIdWhiteList); callback?.call(); diff --git a/src/server/connection.rs b/src/server/connection.rs index 8b6899edc..e4da614d2 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -6812,7 +6812,7 @@ mod test { // Cross server from web, whose server is a WebSocket URI. assert!(id_whitelist_allows( &list(&["123456789"]), - "123456789@ws://example.com:21118" + "123456789@wss://example.com:21118/ws/id" )); // A different id is still rejected, suffix or not. assert!(!id_whitelist_allows(