浏览代码

add more relay validation checks, peer logic cleanup

Abhishek Kondur 2 年之前
父节点
当前提交
561e046090
共有 2 个文件被更改,包括 12 次插入9 次删除
  1. 4 8
      logic/peers.go
  2. 8 1
      logic/relay.go

+ 4 - 8
logic/peers.go

@@ -162,15 +162,11 @@ func GetPeerUpdateForHost(ctx context.Context, network string, host *models.Host
 					PersistentKeepaliveInterval: &peer.PersistentKeepalive,
 					ReplaceAllowedIPs:           true,
 				}
-				if peer.IsRelayed && peer.RelayedBy != node.ID.String() {
-					// skip relayed peers; will be included in relay peer
-					peerConfig.Remove = true
-					hostPeerUpdate.Peers = append(hostPeerUpdate.Peers, peerConfig)
-					peerIndexMap[peerHost.PublicKey.String()] = len(hostPeerUpdate.Peers) - 1
-					continue
-				}
-				if node.IsRelayed && node.RelayedBy != peer.ID.String() {
+				if (node.IsRelayed && node.RelayedBy != peer.ID.String()) || (peer.IsRelayed && peer.RelayedBy != node.ID.String()) {
 					// if node is relayed and peer is not the relay, set remove to true
+					if _, ok := hostPeerUpdate.HostPeerIDs[peerHost.PublicKey.String()]; ok {
+						continue
+					}
 					peerConfig.Remove = true
 					hostPeerUpdate.Peers = append(hostPeerUpdate.Peers, peerConfig)
 					peerIndexMap[peerHost.PublicKey.String()] = len(hostPeerUpdate.Peers) - 1

+ 8 - 1
logic/relay.go

@@ -105,7 +105,14 @@ func ValidateRelay(relay models.RelayRequest) error {
 	//isIp := functions.IsIpCIDR(gateway.RangeString)
 	empty := len(relay.RelayedNodes) == 0
 	if empty {
-		err = errors.New("IP Ranges Cannot Be Empty")
+		return errors.New("IP Ranges Cannot Be Empty")
+	}
+	node, err := GetNodeByID(relay.NodeID)
+	if err != nil {
+		return err
+	}
+	if node.IsRelay {
+		return errors.New("node is already acting as a relay")
 	}
 	for _, relayedNodeID := range relay.RelayedNodes {
 		relayedNode, err := GetNodeByID(relayedNodeID)