Browse Source

fixing relay model

afeiszli 3 years ago
parent
commit
74b15a6a13

+ 12 - 14
controllers/common.go

@@ -14,12 +14,12 @@ import (
 	"golang.org/x/crypto/bcrypt"
 )
 
-func GetPeersList(networkName string, excludeDoNotPropagate bool, relayedNodeAddr string) ([]models.Node, error) {
+func GetPeersList(networkName string, excludeRelayed bool, relayedNodeAddr string) ([]models.Node, error) {
 	var peers []models.Node
 	var relayNode models.Node
 	var err error
 	if relayedNodeAddr == "" {
-		peers, err = GetNodePeers(networkName, excludeDoNotPropagate)
+		peers, err = GetNodePeers(networkName, excludeRelayed)
 
 	} else {
 		relayNode, err = GetNodeRelay(networkName, relayedNodeAddr)
@@ -27,17 +27,17 @@ func GetPeersList(networkName string, excludeDoNotPropagate bool, relayedNodeAdd
 			relayNode = setPeerInfo(relayNode)
 			network, err := models.GetNetwork(networkName)
 			if err == nil {
-				relayNode.AllowedIPs = append(relayNode.AllowedIPs,network.AddressRange)
+				relayNode.AllowedIPs = append(relayNode.AllowedIPs, network.AddressRange)
 			} else {
-				relayNode.AllowedIPs = append(relayNode.AllowedIPs,relayNode.RelayAddrs...)
-			}	
-			peers = append(peers,relayNode)
+				relayNode.AllowedIPs = append(relayNode.AllowedIPs, relayNode.RelayAddrs...)
+			}
+			peers = append(peers, relayNode)
 		}
 	}
 	return peers, err
 }
 
-func GetNodePeers(networkName string, excludeDoNotPropagate bool) ([]models.Node, error) {
+func GetNodePeers(networkName string, excludeRelayed bool) ([]models.Node, error) {
 	var peers []models.Node
 	collection, err := database.FetchRecords(database.NODES_TABLE_NAME)
 	if err != nil {
@@ -63,8 +63,8 @@ func GetNodePeers(networkName string, excludeDoNotPropagate bool) ([]models.Node
 			peer.EgressGatewayRanges = node.EgressGatewayRanges
 			peer.IsEgressGateway = node.IsEgressGateway
 		}
-		allow := node.DoNotPropagate != "yes" || !excludeDoNotPropagate
-		
+		allow := node.IsRelayed != "yes" || !excludeRelayed
+
 		if node.Network == networkName && node.IsPending != "yes" && allow {
 			peer = setPeerInfo(node)
 			if node.UDPHolePunch == "yes" && errN == nil && functions.CheckEndpoint(udppeers[node.PublicKey]) {
@@ -81,9 +81,9 @@ func GetNodePeers(networkName string, excludeDoNotPropagate bool) ([]models.Node
 			if node.IsRelay == "yes" {
 				network, err := models.GetNetwork(networkName)
 				if err == nil {
-					peer.AllowedIPs = append(peer.AllowedIPs,network.AddressRange)
+					peer.AllowedIPs = append(peer.AllowedIPs, network.AddressRange)
 				} else {
-					peer.AllowedIPs = append(peer.AllowedIPs,node.RelayAddrs...)
+					peer.AllowedIPs = append(peer.AllowedIPs, node.RelayAddrs...)
 				}
 			}
 			peers = append(peers, peer)
@@ -93,13 +93,11 @@ func GetNodePeers(networkName string, excludeDoNotPropagate bool) ([]models.Node
 	return peers, err
 }
 
-
-
 func setPeerInfo(node models.Node) models.Node {
 	var peer models.Node
 	peer.RelayAddrs = node.RelayAddrs
 	peer.IsRelay = node.IsRelay
-	peer.DoNotPropagate = node.DoNotPropagate
+	peer.IsRelayed = node.IsRelayed
 	peer.PublicKey = node.PublicKey
 	peer.Endpoint = node.Endpoint
 	peer.LocalAddress = node.LocalAddress

+ 5 - 18
controllers/nodeGrpcController.go

@@ -5,6 +5,7 @@ import (
 	"encoding/json"
 	"errors"
 	"strings"
+
 	"github.com/gravitl/netmaker/functions"
 	nodepb "github.com/gravitl/netmaker/grpc"
 	"github.com/gravitl/netmaker/models"
@@ -97,24 +98,10 @@ func (s *NodeServiceServer) UpdateNode(ctx context.Context, req *nodepb.Object)
 	if err != nil {
 		return nil, err
 	}
-	relayupdate := false
-	if node.IsRelay == "yes" && len(newnode.RelayAddrs) > 0 {
-		for i, addr := range newnode.RelayAddrs {
-			if addr != node.RelayAddrs[i] {
-				relayupdate = true
-			}
-		}		
-	}
 	err = node.Update(&newnode)
 	if err != nil {
 		return nil, err
 	}
-	if relayupdate {
-		UpdateRelay(node.Network, node.RelayAddrs, newnode.RelayAddrs)
-		if err = functions.NetworkNodesUpdatePullChanges(node.Network); err != nil {
-			functions.PrintUserLog("netmaker", "error setting relay updates: " + err.Error(), 1)			
-		}
-	}
 	nodeData, err := json.Marshal(&newnode)
 	if err != nil {
 		return nil, err
@@ -150,12 +137,12 @@ func (s *NodeServiceServer) GetPeers(ctx context.Context, req *nodepb.Object) (*
 		if node.IsServer == "yes" {
 			SetNetworkServerPeers(macAndNetwork[1])
 		}
-		excludeDoNotPropagate := node.IsRelay != "yes"
-		var relayedNode string 
-		if node.DoNotPropagate == "yes" {
+		excludeIsRelayed := node.IsRelay != "yes"
+		var relayedNode string
+		if node.IsRelayed == "yes" {
 			relayedNode = node.Address
 		}
-		peers, err := GetPeersList(macAndNetwork[1], excludeDoNotPropagate, relayedNode)
+		peers, err := GetPeersList(macAndNetwork[1], excludeIsRelayed, relayedNode)
 		if err != nil {
 			return nil, err
 		}

+ 5 - 5
controllers/nodeHttpController.go

@@ -757,12 +757,12 @@ func updateNode(w http.ResponseWriter, r *http.Request) {
 	relayupdate := false
 	if node.IsRelay == "yes" && len(newNode.RelayAddrs) > 0 {
 		if len(newNode.RelayAddrs) != len(node.RelayAddrs) {
-				relayupdate = true
+			relayupdate = true
 		} else {
 			for i, addr := range newNode.RelayAddrs {
-					if addr != node.RelayAddrs[i] {
-							relayupdate = true
-					}
+				if addr != node.RelayAddrs[i] {
+					relayupdate = true
+				}
 			}
 		}
 	}
@@ -774,7 +774,7 @@ func updateNode(w http.ResponseWriter, r *http.Request) {
 	if relayupdate {
 		UpdateRelay(node.Network, node.RelayAddrs, newNode.RelayAddrs)
 		if err = functions.NetworkNodesUpdatePullChanges(node.Network); err != nil {
-			functions.PrintUserLog("netmaker", "error setting relay updates: " + err.Error(), 1)			
+			functions.PrintUserLog("netmaker", "error setting relay updates: "+err.Error(), 1)
 		}
 	}
 

+ 17 - 15
controllers/relay.go

@@ -5,6 +5,7 @@ import (
 	"errors"
 	"net/http"
 	"time"
+
 	"github.com/gorilla/mux"
 	"github.com/gravitl/netmaker/database"
 	"github.com/gravitl/netmaker/functions"
@@ -45,7 +46,7 @@ func CreateRelay(relay models.RelayRequest) (models.Node, error) {
 		return models.Node{}, err
 	}
 	node.IsRelay = "yes"
-	node.RelayAddrs = relay.Addrs
+	node.RelayAddrs = relay.RelayAddrs
 
 	key, err := functions.GetRecordKey(relay.NodeID, relay.NetID)
 	if err != nil {
@@ -60,7 +61,7 @@ func CreateRelay(relay models.RelayRequest) (models.Node, error) {
 	if err = database.Insert(key, string(nodeData), database.NODES_TABLE_NAME); err != nil {
 		return models.Node{}, err
 	}
-	err = SetNodesDoNotPropagate("yes", node.Network, node.RelayAddrs)
+	err = SetRelayedNodes("yes", node.Network, node.RelayAddrs)
 	if err != nil {
 		return node, err
 	}
@@ -71,7 +72,7 @@ func CreateRelay(relay models.RelayRequest) (models.Node, error) {
 	return node, nil
 }
 
-func SetNodesDoNotPropagate(yesOrno string, networkName string, addrs []string) error {
+func SetRelayedNodes(yesOrno string, networkName string, addrs []string) error {
 
 	collections, err := database.FetchRecords(database.NODES_TABLE_NAME)
 	if err != nil {
@@ -88,7 +89,7 @@ func SetNodesDoNotPropagate(yesOrno string, networkName string, addrs []string)
 		if node.Network == networkName {
 			for _, addr := range addrs {
 				if addr == node.Address || addr == node.Address6 {
-					node.DoNotPropagate = yesOrno
+					node.IsRelayed = yesOrno
 					data, err := json.Marshal(&node)
 					if err != nil {
 						return err
@@ -105,7 +106,7 @@ func SetNodesDoNotPropagate(yesOrno string, networkName string, addrs []string)
 func ValidateRelay(relay models.RelayRequest) error {
 	var err error
 	//isIp := functions.IsIpCIDR(gateway.RangeString)
-	empty := len(relay.Addrs) == 0
+	empty := len(relay.RelayAddrs) == 0
 	if empty {
 		err = errors.New("IP Ranges Cannot Be Empty")
 	}
@@ -113,15 +114,16 @@ func ValidateRelay(relay models.RelayRequest) error {
 }
 
 func UpdateRelay(network string, oldAddrs []string, newAddrs []string) {
-	time.Sleep(time.Second/4)	
-	err := SetNodesDoNotPropagate("no", network, oldAddrs)
+	time.Sleep(time.Second / 4)
+	err := SetRelayedNodes("no", network, oldAddrs)
 	if err != nil {
-		functions.PrintUserLog("netmaker",err.Error(),1)
-	}	
-	err = SetNodesDoNotPropagate("yes", network, newAddrs)
+		functions.PrintUserLog("netmaker", err.Error(), 1)
+	}
+	err = SetRelayedNodes("yes", network, newAddrs)
 	if err != nil {
-		functions.PrintUserLog("netmaker",err.Error(),1)
-	}}
+		functions.PrintUserLog("netmaker", err.Error(), 1)
+	}
+}
 
 func deleteRelay(w http.ResponseWriter, r *http.Request) {
 	w.Header().Set("Content-Type", "application/json")
@@ -144,7 +146,7 @@ func DeleteRelay(network, macaddress string) (models.Node, error) {
 	if err != nil {
 		return models.Node{}, err
 	}
-	err = SetNodesDoNotPropagate("no", node.Network, node.RelayAddrs)
+	err = SetRelayedNodes("no", node.Network, node.RelayAddrs)
 	if err != nil {
 		return node, err
 	}
@@ -170,7 +172,7 @@ func DeleteRelay(network, macaddress string) (models.Node, error) {
 	return node, nil
 }
 
-func GetNodeRelay(network string, relayedNodeAddr string) (models.Node, error){
+func GetNodeRelay(network string, relayedNodeAddr string) (models.Node, error) {
 	collection, err := database.FetchRecords(database.NODES_TABLE_NAME)
 	var relay models.Node
 	if err != nil {
@@ -195,4 +197,4 @@ func GetNodeRelay(network string, relayedNodeAddr string) (models.Node, error){
 		}
 	}
 	return relay, errors.New("could not find relay for node " + relayedNodeAddr)
-}
+}

+ 9 - 9
models/node.go

@@ -52,13 +52,13 @@ type Node struct {
 	CheckInInterval     int32    `json:"checkininterval" bson:"checkininterval" yaml:"checkininterval"`
 	Password            string   `json:"password" bson:"password" yaml:"password" validate:"required,min=6"`
 	Network             string   `json:"network" bson:"network" yaml:"network" validate:"network_exists"`
-	DoNotPropagate      string   `json:"donotpropagate" bson:"donotpropagate" yaml:"donotpropagate"`
+	IsRelayed           string   `json:"isrelayed" bson:"isrelayed" yaml:"isrelayed"`
 	IsPending           string   `json:"ispending" bson:"ispending" yaml:"ispending"`
-	IsRelay				string   `json:"isrelay" bson:"isrelay" yaml:"isrelay"`
+	IsRelay             string   `json:"isrelay" bson:"isrelay" yaml:"isrelay" validate:"checkyesorno"`
 	IsEgressGateway     string   `json:"isegressgateway" bson:"isegressgateway" yaml:"isegressgateway"`
 	IsIngressGateway    string   `json:"isingressgateway" bson:"isingressgateway" yaml:"isingressgateway"`
 	EgressGatewayRanges []string `json:"egressgatewayranges" bson:"egressgatewayranges" yaml:"egressgatewayranges"`
-	RelayAddrs 			[]string `json:"relayaddrs" bson:"relayaddrs" yaml:"relayaddrs"`
+	RelayAddrs          []string `json:"relayaddrs" bson:"relayaddrs" yaml:"relayaddrs"`
 	IngressGatewayRange string   `json:"ingressgatewayrange" bson:"ingressgatewayrange" yaml:"ingressgatewayrange"`
 	IsStatic            string   `json:"isstatic" bson:"isstatic" yaml:"isstatic" validate:"checkyesorno"`
 	UDPHolePunch        string   `json:"udpholepunch" bson:"udpholepunch" yaml:"udpholepunch" validate:"checkyesorno"`
@@ -87,9 +87,9 @@ func (node *Node) SetDefaulIsPending() {
 	}
 }
 
-func (node *Node) SetDefaultDoNotPropagate() {
-	if node.DoNotPropagate == "" {
-		node.DoNotPropagate = "no"
+func (node *Node) SetDefaultIsRelayed() {
+	if node.IsRelayed == "" {
+		node.IsRelayed = "no"
 	}
 }
 
@@ -284,7 +284,7 @@ func (node *Node) SetDefaults() {
 	node.SetDefaultIngressGateway()
 	node.SetDefaulIsPending()
 	node.SetDefaultMTU()
-	node.SetDefaultDoNotPropagate()
+	node.SetDefaultIsRelayed()
 	node.SetDefaultIsRelay()
 	node.KeyUpdateTimeStamp = time.Now().Unix()
 }
@@ -430,8 +430,8 @@ func (newNode *Node) Fill(currentNode *Node) {
 	if newNode.IsRelay == "" {
 		newNode.IsRelay = currentNode.IsRelay
 	}
-	if newNode.DoNotPropagate == "" {
-		newNode.DoNotPropagate = currentNode.DoNotPropagate
+	if newNode.IsRelayed == "" {
+		newNode.IsRelayed = currentNode.IsRelayed
 	}
 }
 

+ 4 - 4
models/structs.go

@@ -130,7 +130,7 @@ type EgressGatewayRequest struct {
 }
 
 type RelayRequest struct {
-	NodeID      string   `json:"nodeid" bson:"nodeid"`
-	NetID       string   `json:"netid" bson:"netid"`
-	Addrs      []string `json:"addrs" bson:"addrs"`
-}
+	NodeID     string   `json:"nodeid" bson:"nodeid"`
+	NetID      string   `json:"netid" bson:"netid"`
+	RelayAddrs []string `json:"addrs" bson:"addrs"`
+}