Browse Source

Merge pull request #807 from gravitl/feature_v0.11.0_efficiency

client key update change
dcarns 3 years ago
parent
commit
10c20b83e2

+ 0 - 7
netclient/functions/daemon.go

@@ -92,14 +92,7 @@ func UpdateKeys(nodeCfg *config.ClientConfig, client mqtt.Client) error {
 		return err
 	}
 	nodeCfg.Node.PublicKey = key.PublicKey().String()
-	if err := config.ModConfig(&nodeCfg.Node); err != nil {
-		ncutils.Log("error updating local config " + err.Error())
-	}
 	var commsCfg = getCommsCfgByNode(&nodeCfg.Node)
-	if err = wireguard.ApplyConf(&nodeCfg.Node, nodeCfg.Node.Interface, file); err != nil {
-		ncutils.Log("error applying new config " + err.Error())
-		return err
-	}
 	PublishNodeUpdate(&commsCfg, nodeCfg)
 	return nil
 }

+ 12 - 7
netclient/functions/mqhandlers.go

@@ -13,6 +13,7 @@ import (
 	"github.com/gravitl/netmaker/netclient/local"
 	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/netclient/wireguard"
+	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
 )
 
 // All -- mqtt message hander for all ('#') topics
@@ -69,9 +70,19 @@ func NodeUpdate(client mqtt.Client, msg mqtt.Message) {
 		ncutils.PrintLog(fmt.Sprintf("%s was removed", nodeCfg.Node.Name), 0)
 		return
 	case models.NODE_UPDATE_KEY:
+		// == get the current key for node ==
+		oldPrivateKey, retErr := wireguard.RetrievePrivKey(nodeCfg.Network)
+		if retErr != nil {
+			break
+		}
 		if err := UpdateKeys(&nodeCfg, client); err != nil {
-			ncutils.PrintLog("err updating wireguard keys: "+err.Error(), 0)
+			ncutils.PrintLog("err updating wireguard keys, reusing last key\n"+err.Error(), 0)
+			if key, parseErr := wgtypes.ParseKey(oldPrivateKey); parseErr == nil {
+				wireguard.StorePrivKey(key.String(), nodeCfg.Network)
+				nodeCfg.Node.PublicKey = key.PublicKey().String()
+			}
 		}
+		ifaceDelta = true
 	case models.NODE_NOOP:
 	default:
 	}
@@ -93,12 +104,6 @@ func NodeUpdate(client mqtt.Client, msg mqtt.Message) {
 		return
 	}
 	if ifaceDelta { // if a change caused an ifacedelta we need to notify the server to update the peers
-		// ackErr := publishSignal(&commsCfg, &nodeCfg, ncutils.ACK)
-		// if ackErr != nil {
-		// 	ncutils.Log("could not notify server that it received an interface update")
-		// } else {
-		// 	ncutils.Log("signalled acknowledgement of change to server")
-		// }
 		ncutils.Log("applying WG conf to " + file)
 		err = wireguard.ApplyConf(&nodeCfg.Node, nodeCfg.Node.Interface, file)
 		if err != nil {

+ 1 - 0
netclient/functions/mqpublish.go

@@ -99,6 +99,7 @@ func PublishNodeUpdate(commsCfg, nodeCfg *config.ClientConfig) error {
 	if err = publish(commsCfg, nodeCfg, fmt.Sprintf("update/%s", nodeCfg.Node.ID), data, 1); err != nil {
 		return err
 	}
+	ncutils.PrintLog("sent a node update to server for node"+nodeCfg.Node.ID+", "+nodeCfg.Node.ID, 1)
 	return nil
 }