diff --git a/src/linker.messenger.relay/messenger/RelayMessenger.cs b/src/linker.messenger.relay/messenger/RelayMessenger.cs index 8e9ed8f8..7a383a1a 100644 --- a/src/linker.messenger.relay/messenger/RelayMessenger.cs +++ b/src/linker.messenger.relay/messenger/RelayMessenger.cs @@ -168,7 +168,7 @@ namespace linker.messenger.relay.messenger bool validated = string.IsNullOrWhiteSpace(error); return (await relayServerTransfer.GetNodes(validated, relayInfo.UserId), validated); } - + /// /// 收到中继请求 @@ -179,7 +179,19 @@ namespace linker.messenger.relay.messenger public async Task RelayForward(IConnection connection) { RelayInfo info = serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span); - await RelayForward(connection, info, (ushort)RelayMessengerIds.RelayForward, () => + await RelayForward(connection, new RelayInfo170 + { + FlowingId = info.FlowingId, + FromMachineId = info.FromMachineId, + FromMachineName = info.FromMachineName, + RemoteMachineId = info.RemoteMachineId, + RemoteMachineName = info.RemoteMachineName, + NodeId = info.NodeId, + UserId = string.Empty, + TransactionId = info.TransactionId, + TransportName = info.TransportName, + SecretKey = info.SecretKey, + }, (ushort)RelayMessengerIds.RelayForward, () => { return serializer.Serialize(info); }).ConfigureAwait(false); @@ -193,7 +205,7 @@ namespace linker.messenger.relay.messenger return serializer.Serialize(info); }).ConfigureAwait(false); } - public async Task RelayForward(IConnection connection, RelayInfo info, ushort id, Func data) + public async Task RelayForward(IConnection connection, RelayInfo170 info, ushort id, Func data) { if (signCaching.TryGet(connection.Id, info.RemoteMachineId, out SignCacheInfo from, out SignCacheInfo to) == false) { @@ -202,7 +214,7 @@ namespace linker.messenger.relay.messenger } //需要验证 - if (relayServerTransfer.NodeValidate(info.NodeId)) + if (await relayServerTransfer.NodeValidate(info.NodeId, info.UserId)) { info.RemoteMachineId = to.MachineId; info.FromMachineId = from.MachineId; diff --git a/src/linker.messenger.relay/server/RelayServerMasterTransfer.cs b/src/linker.messenger.relay/server/RelayServerMasterTransfer.cs index 186588e2..64244613 100644 --- a/src/linker.messenger.relay/server/RelayServerMasterTransfer.cs +++ b/src/linker.messenger.relay/server/RelayServerMasterTransfer.cs @@ -6,6 +6,7 @@ using linker.messenger.relay.messenger; using linker.messenger.relay.server.caching; using linker.messenger.wlist; using System.Collections.Concurrent; +using System.Linq; using System.Net; namespace linker.messenger.relay.server @@ -154,9 +155,11 @@ namespace linker.messenger.relay.server /// /// /// - public bool NodeValidate(string nodeId) + public async Task NodeValidate(string nodeId,string userid) { - return reports.TryGetValue(nodeId, out RelayServerNodeReportInfo170 relayNodeReportInfo) && relayNodeReportInfo.Public == false; + var nodes = await whiteListServerStore.Get("Relay", userid); + return reports.TryGetValue(nodeId, out RelayServerNodeReportInfo170 node) + && node.Public == false && nodes.Contains(node.Id) == false; } /// diff --git a/version.txt b/version.txt index 58b7968a..be7a4530 100644 --- a/version.txt +++ b/version.txt @@ -1,5 +1,5 @@ v1.8.6 -2025-07-01 10:28:15 +2025-07-01 10:39:01 1. 一些累计更新 2. 白名单 3. 一些已知的BUG \ No newline at end of file