support wss:// for web client

Signed-off-by: 21pages <sunboeasy@gmail.com>
This commit is contained in:
21pages
2026-07-26 18:57:07 +08:00
parent 6666bcea96
commit 003b9d507a
2 changed files with 8 additions and 3 deletions

View File

@@ -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();

View File

@@ -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(