Browse Source

fixing relay getting donotpropagate

afeiszli 3 years ago
parent
commit
0457769308

+ 4 - 2
controllers/common.go

@@ -14,7 +14,7 @@ import (
 	"golang.org/x/crypto/bcrypt"
 	"golang.org/x/crypto/bcrypt"
 )
 )
 
 
-func GetPeersList(networkName string) ([]models.Node, error) {
+func GetPeersList(networkName string, excludeDoNotPropagate bool) ([]models.Node, error) {
 
 
 	var peers []models.Node
 	var peers []models.Node
 	collection, err := database.FetchRecords(database.NODES_TABLE_NAME)
 	collection, err := database.FetchRecords(database.NODES_TABLE_NAME)
@@ -41,7 +41,9 @@ func GetPeersList(networkName string) ([]models.Node, error) {
 			peer.EgressGatewayRanges = node.EgressGatewayRanges
 			peer.EgressGatewayRanges = node.EgressGatewayRanges
 			peer.IsEgressGateway = node.IsEgressGateway
 			peer.IsEgressGateway = node.IsEgressGateway
 		}
 		}
-		if node.Network == networkName && node.IsPending != "yes" && node.DoNotPropagate != "yes" {
+		allow := node.DoNotPropagate != "yes" || !excludeDoNotPropagate
+		
+		if node.Network == networkName && node.IsPending != "yes" && allow {
 			if node.IsRelay == "yes" { // handle relay stuff
 			if node.IsRelay == "yes" { // handle relay stuff
 				peer.RelayAddrs = node.RelayAddrs
 				peer.RelayAddrs = node.RelayAddrs
 				peer.IsRelay = node.IsRelay
 				peer.IsRelay = node.IsRelay

+ 3 - 3
controllers/common_test.go

@@ -13,20 +13,20 @@ func TestGetPeerList(t *testing.T) {
 	deleteAllNetworks()
 	deleteAllNetworks()
 	createNet()
 	createNet()
 	t.Run("NoNodes", func(t *testing.T) {
 	t.Run("NoNodes", func(t *testing.T) {
-		peers, err := GetPeersList("skynet")
+		peers, err := GetPeersList("skynet", false)
 		assert.Nil(t, err)
 		assert.Nil(t, err)
 		assert.Nil(t, peers)
 		assert.Nil(t, peers)
 	})
 	})
 	node := createTestNode()
 	node := createTestNode()
 	t.Run("One Node", func(t *testing.T) {
 	t.Run("One Node", func(t *testing.T) {
-		peers, err := GetPeersList("skynet")
+		peers, err := GetPeersList("skynet", false)
 		assert.Nil(t, err)
 		assert.Nil(t, err)
 		assert.Equal(t, node.Address, peers[0].Address)
 		assert.Equal(t, node.Address, peers[0].Address)
 	})
 	})
 	t.Run("Multiple Nodes", func(t *testing.T) {
 	t.Run("Multiple Nodes", func(t *testing.T) {
 		createnode := models.Node{PublicKey: "RM5qhLAE20PG9BbfBCger+Ac9D2NDOwCtY1rbYDLf34=", Endpoint: "10.0.0.2", MacAddress: "02:02:03:04:05:06", Password: "password", Network: "skynet"}
 		createnode := models.Node{PublicKey: "RM5qhLAE20PG9BbfBCger+Ac9D2NDOwCtY1rbYDLf34=", Endpoint: "10.0.0.2", MacAddress: "02:02:03:04:05:06", Password: "password", Network: "skynet"}
 		CreateNode(createnode, "skynet")
 		CreateNode(createnode, "skynet")
-		peers, err := GetPeersList("skynet")
+		peers, err := GetPeersList("skynet", false)
 		assert.Nil(t, err)
 		assert.Nil(t, err)
 		assert.Equal(t, len(peers), 2)
 		assert.Equal(t, len(peers), 2)
 		foundNodeEndpoint := false
 		foundNodeEndpoint := false

+ 2 - 1
controllers/nodeGrpcController.go

@@ -137,7 +137,8 @@ func (s *NodeServiceServer) GetPeers(ctx context.Context, req *nodepb.Object) (*
 		if node.IsServer == "yes" {
 		if node.IsServer == "yes" {
 			SetNetworkServerPeers(macAndNetwork[1])
 			SetNetworkServerPeers(macAndNetwork[1])
 		}
 		}
-		peers, err := GetPeersList(macAndNetwork[1])
+		excludeDoNotPropagate := node.IsRelay != "yes"
+		peers, err := GetPeersList(macAndNetwork[1], excludeDoNotPropagate)
 		if err != nil {
 		if err != nil {
 			return nil, err
 			return nil, err
 		}
 		}

+ 8 - 62
netclient/server/grpc.go

@@ -198,10 +198,16 @@ func GetPeers(macaddress string, network string, server string, dualstack bool,
 		for _, allowedIp := range node.AllowedIPs {
 		for _, allowedIp := range node.AllowedIPs {
 			if _, ipnet, err := net.ParseCIDR(allowedIp); err == nil {
 			if _, ipnet, err := net.ParseCIDR(allowedIp); err == nil {
 				nodeEndpointArr := strings.Split(node.Endpoint, ":")
 				nodeEndpointArr := strings.Split(node.Endpoint, ":")
-				if !ipnet.Contains(net.IP(nodeEndpointArr[0])) { // don't need to add an allowed ip that already exists..
+				if !ipnet.Contains(net.IP(nodeEndpointArr[0])) && ipnet.IP.String() != node.Address { // don't need to add an allowed ip that already exists..
 					allowedips = append(allowedips, *ipnet)
 					allowedips = append(allowedips, *ipnet)
 				}
 				}
-			}
+			} else if appendip := net.ParseIP(allowedIp); appendip != nil && allowedIp != node.Address {
+					ipnet := net.IPNet{
+						IP:   net.ParseIP(allowedIp),
+						Mask: net.CIDRMask(32, 32),
+					}
+					allowedips = append(allowedips, ipnet)
+			}		
 		}
 		}
 		// handle egress gateway peers
 		// handle egress gateway peers
 		if node.IsEgressGateway == "yes" {
 		if node.IsEgressGateway == "yes" {
@@ -224,34 +230,6 @@ func GetPeers(macaddress string, network string, server string, dualstack bool,
 				}
 				}
 			}
 			}
 		}
 		}
-		// handle relay servers
-		/*
-		if node.IsRelay == "yes" {
-			hasRelay = true
-			relayAddrs = node.RelayAddrs
-			log.Println("found relay addresses")
-			log.Println(node.RelayAddrs)
-			for _, ipstring := range node.RelayAddrs { // go through each ip for relay server
-				log.Println("checking addr")
-				log.Println(ipstring)
-				_, ip, err := net.ParseCIDR(ipstring) // confirming it's a valid IP
-				if ip == nil || err != nil {
-					if appendip := net.ParseIP(ipstring); appendip != nil {
-						ipnet := net.IPNet{
-							IP:   net.ParseIP(ipstring),
-							Mask: net.CIDRMask(32, 32),
-						}
-						allowedips = append(allowedips, ipnet)
-					} else {
-						log.Println(err)
-						continue // if can't parse CIDR
-					}
-				} else {
-					allowedips = append(allowedips, *ip)
-				}
-			}
-		}
-		*/
 		if node.Address6 != "" && dualstack {
 		if node.Address6 != "" && dualstack {
 			var addr6 = net.IPNet{
 			var addr6 = net.IPNet{
 				IP:   net.ParseIP(node.Address6),
 				IP:   net.ParseIP(node.Address6),
@@ -298,40 +276,8 @@ func GetPeers(macaddress string, network string, server string, dualstack bool,
 			log.Println("ERROR RETRIEVING EXTERNAL PEERS",err)
 			log.Println("ERROR RETRIEVING EXTERNAL PEERS",err)
 		}
 		}
 	}
 	}
-	/*
-	if hasRelay {
-		peers = RemoveRelayAddrsFromPeers(relayAddrs, peers)
-	}
-	*/
 	return peers, hasGateway, gateways, err
 	return peers, hasGateway, gateways, err
 }
 }
-/*
-func RemoveRelayAddrsFromPeers(relayAddrs []string, peers []wgtypes.PeerConfig)([]wgtypes.PeerConfig){
-	relayMarker, err := time.ParseDuration(RELAY_KEEPALIVE_MARKER)
-	if err != nil {
-		log.Println(err)
-		log.Println("Could not remove relayed peers. Relay will not be used")
-		return peers
-	}
-	for _, ipstring := range relayAddrs { // go through each ip for relay server
-		_, ip, err := net.ParseCIDR(ipstring) // confirming it's a valid IP
-		if ip == nil || err != nil {
-			continue // if can't parse CIDR
-		}
-		for i, peer := range peers {
-			if *peer.PersistentKeepaliveInterval == relayMarker {
-				continue
-			}
-			for _, nodeip := range peer.AllowedIPs {
-				if ip.Contains(nodeip.IP) {
-					peers = append(peers[:i], peers[i+1:]...)
-				}
-			}
-		}
-	}
-	return peers
-}
-*/
 func GetExtPeers(macaddress string, network string, server string, dualstack bool) ([]wgtypes.PeerConfig, error) {
 func GetExtPeers(macaddress string, network string, server string, dualstack bool) ([]wgtypes.PeerConfig, error) {
 	var peers []wgtypes.PeerConfig
 	var peers []wgtypes.PeerConfig
 	var wcclient nodepb.NodeServiceClient
 	var wcclient nodepb.NodeServiceClient