afeiszli 3 éve
szülő
commit
eb07e3b881

+ 3 - 2
controllers/node.go

@@ -589,6 +589,9 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
 		returnErrorResponse(w, r, formatError(fmt.Errorf("cannot delete server node"), "badrequest"))
 		return
 	}
+	//send update to node to be deleted before deleting on server otherwise message cannot be sent
+	node.Action = models.NODE_DELETE
+	runUpdates(&node, true)
 	err = logic.DeleteNodeByID(&node, false)
 	if err != nil {
 		returnErrorResponse(w, r, formatError(err, "internal"))
@@ -599,11 +602,9 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		return
 	}
-	node.Action = models.NODE_DELETE
 	logger.Log(1, r.Header.Get("user"), "Deleted node", nodeid, "from network", params["network"])
 	returnSuccessResponse(w, r, nodeid+" deleted.")
 
-	runUpdates(&node, true)
 }
 
 func runUpdates(node *models.Node, nodeUpdate bool) error {

+ 5 - 22
controllers/node_grpc.go

@@ -6,6 +6,7 @@ import (
 	"errors"
 	"time"
 
+	"github.com/gravitl/netmaker/functions"
 	nodepb "github.com/gravitl/netmaker/grpc"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logic"
@@ -69,6 +70,10 @@ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.Object)
 			return nil, errors.New("invalid key, and network does not allow no-key signups")
 		}
 	}
+	unique, _ := functions.IsMacAddressUnique(node.MacAddress, node.Network)
+	if !unique {
+		return nil, errors.New("macaddress is not unique")
+	}
 
 	getServerAddrs(&node)
 
@@ -277,29 +282,7 @@ func (s *NodeServiceServer) GetExtPeers(ctx context.Context, req *nodepb.Object)
 }
 
 // == private methods ==
-/*
-func getNewOrLegacyNode(data string) (models.Node, error) {
-	var reqNode, node models.Node
-	var err error
 
-	if err = json.Unmarshal([]byte(data), &reqNode); err != nil {
-		oldID := strings.Split(data, "###") // handle legacy client IDs
-		if len(oldID) == 2 {
-			if node, err = logic.GetNodeByID(reqNode.ID); err != nil {
-				return models.Node{}, err
-			}
-		} else {
-			return models.Node{}, err
-		}
-	} else {
-		node, err = logic.GetNodeByID(reqNode.ID)
-		if err != nil {
-			return models.Node{}, err
-		}
-	}
-	return node, nil
-}
-*/
 func getNodeFromRequestData(data string) (models.Node, error) {
 	var reqNode models.Node
 	var err error

+ 20 - 12
netclient/functions/daemon.go

@@ -121,19 +121,27 @@ func MessageQueue(ctx context.Context, network string) {
 	var cfg config.ClientConfig
 	cfg.Network = network
 	ncutils.Log("pulling latest config for " + cfg.Network)
-	sleepTime := 2
-	for {
-		_, err := Pull(network, true)
-		if err == nil {
-			break
-		}
-		if sleepTime > 3600 {
-			sleepTime = 3600
+	var configPath = fmt.Sprintf("%sconfig/netconfig-%s", ncutils.GetNetclientPathSpecific(), network)
+	fileInfo, err := os.Stat(configPath)
+	if err != nil {
+		ncutils.Log("could not stat config file: " + configPath)
+	}
+	// speed up UDP rest
+	if time.Now().After(fileInfo.ModTime().Add(time.Minute)) {
+		sleepTime := 2
+		for {
+			_, err := Pull(network, true)
+			if err == nil {
+				break
+			}
+			if sleepTime > 3600 {
+				sleepTime = 3600
+			}
+			ncutils.Log("failed to pull for network " + network)
+			ncutils.Log(fmt.Sprintf("waiting %d seconds to retry...", sleepTime))
+			time.Sleep(time.Second * time.Duration(sleepTime))
+			sleepTime = sleepTime * 2
 		}
-		ncutils.Log("failed to pull for network " + network)
-		ncutils.Log(fmt.Sprintf("waiting %d seconds to retry...", sleepTime))
-		time.Sleep(time.Second * time.Duration(sleepTime))
-		sleepTime = sleepTime * 2
 	}
 	time.Sleep(time.Second << 1)
 	cfg.ReadConfig()

+ 2 - 2
netclient/functions/join.go

@@ -109,9 +109,9 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error {
 	}
 
 	if ncutils.IsLinux() {
-		_, err := exec.LookPath("resolvconf")
+		_, err := exec.LookPath("resolvectl")
 		if err != nil {
-			ncutils.PrintLog("resolvconf not present", 2)
+			ncutils.PrintLog("resolvectl not present", 2)
 			ncutils.PrintLog("unable to configure DNS automatically, disabling automated DNS management", 2)
 			cfg.Node.DNSOn = "no"
 		}

+ 4 - 4
netclient/local/routes.go

@@ -7,8 +7,8 @@ import (
 	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
 )
 
+// SetPeerRoutes - sets/removes ip routes for each peer on a network
 func SetPeerRoutes(iface string, oldPeers map[string][]net.IPNet, newPeers []wgtypes.PeerConfig) {
-
 	// traverse through all recieved peers
 	for _, peer := range newPeers {
 		// if pubkey found in existing peers, check against existing peer
@@ -29,9 +29,9 @@ func SetPeerRoutes(iface string, oldPeers map[string][]net.IPNet, newPeers []wgt
 					}
 				}
 			}
-			delete(oldPeers, peer.PublicKey.String())
+			delete(oldPeers, peer.PublicKey.String()) // remove peer as it was found and processed
 		} else {
-			for _, allowedIP := range peer.AllowedIPs {
+			for _, allowedIP := range peer.AllowedIPs { // add all routes as peer doesn't exist
 				if err := setRoute(iface, &allowedIP); err != nil {
 					ncutils.PrintLog(err.Error(), 1)
 				}
@@ -39,7 +39,7 @@ func SetPeerRoutes(iface string, oldPeers map[string][]net.IPNet, newPeers []wgt
 		}
 	}
 
-	// traverse through all existing peers
+	// traverse through all remaining existing peers
 	for _, allowedIPs := range oldPeers {
 		for _, allowedIP := range allowedIPs {
 			deleteRoute(iface, &allowedIP)

+ 1 - 0
netclient/ncutils/iface.go

@@ -18,6 +18,7 @@ func IfaceDelta(currentNode *models.Node, newNode *models.Node) bool {
 		newNode.UDPHolePunch != currentNode.UDPHolePunch ||
 		newNode.IsPending != currentNode.IsPending ||
 		newNode.PersistentKeepalive != currentNode.PersistentKeepalive ||
+		newNode.DNSOn != currentNode.DNSOn ||
 		len(newNode.ExcludedAddrs) != len(currentNode.ExcludedAddrs) ||
 		len(newNode.AllowedIPs) != len(currentNode.AllowedIPs) {
 		return true