From 74b15a6a1352e98e3312a2631f1b1e2b3f5b14b5 Mon Sep 17 00:00:00 2001 From: afeiszli Date: Sat, 18 Sep 2021 10:33:14 -0400 Subject: [PATCH] fixing relay model --- controllers/common.go | 26 ++++++++++++------------- controllers/nodeGrpcController.go | 23 +++++----------------- controllers/nodeHttpController.go | 10 +++++----- controllers/relay.go | 32 ++++++++++++++++--------------- models/node.go | 18 ++++++++--------- models/structs.go | 8 ++++---- 6 files changed, 52 insertions(+), 65 deletions(-) diff --git a/controllers/common.go b/controllers/common.go index 0f8ea1cb..28eb0f49 100644 --- a/controllers/common.go +++ b/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 diff --git a/controllers/nodeGrpcController.go b/controllers/nodeGrpcController.go index 94504928..e1b14203 100644 --- a/controllers/nodeGrpcController.go +++ b/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 } diff --git a/controllers/nodeHttpController.go b/controllers/nodeHttpController.go index 86667954..7a86576b 100644 --- a/controllers/nodeHttpController.go +++ b/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) } } diff --git a/controllers/relay.go b/controllers/relay.go index 266bf3b3..ee5db502 100644 --- a/controllers/relay.go +++ b/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) -} \ No newline at end of file +} diff --git a/models/node.go b/models/node.go index b717f7f3..f679927c 100644 --- a/models/node.go +++ b/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 } } diff --git a/models/structs.go b/models/structs.go index 54f55153..b4f4e14c 100644 --- a/models/structs.go +++ b/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"` -} \ No newline at end of file + NodeID string `json:"nodeid" bson:"nodeid"` + NetID string `json:"netid" bson:"netid"` + RelayAddrs []string `json:"addrs" bson:"addrs"` +}