Browse Source

redo register on pull

Matthew R. Kasun 3 years ago
parent
commit
092441441c

+ 18 - 2
netclient/command/commands.go

@@ -1,6 +1,8 @@
 package command
 
 import (
+	"crypto/ed25519"
+	"crypto/rand"
 	"strings"
 
 	"github.com/gravitl/netmaker/logger"
@@ -8,6 +10,7 @@ import (
 	"github.com/gravitl/netmaker/netclient/daemon"
 	"github.com/gravitl/netmaker/netclient/functions"
 	"github.com/gravitl/netmaker/netclient/ncutils"
+	"github.com/gravitl/netmaker/tls"
 )
 
 // Join - join command to run from cli
@@ -78,7 +81,7 @@ func Pull(cfg *config.ClientConfig) error {
 			return err
 		}
 		for _, network := range networks {
-			_, err = functions.Pull(network, true, true)
+			_, err = functions.Pull(network, true)
 			if err != nil {
 				logger.Log(1, "Error pulling network config for network: ", network, "\n", err.Error())
 			} else {
@@ -87,7 +90,20 @@ func Pull(cfg *config.ClientConfig) error {
 		}
 		err = nil
 	} else {
-		_, err = functions.Pull(cfg.Network, true, true)
+
+		_, err = functions.Pull(cfg.Network, true)
+		_, newKey, kerr := ed25519.GenerateKey(rand.Reader)
+		if kerr == nil {
+			if kerr := tls.SaveKey(ncutils.GetNetclientPath(), "/client.key", newKey); err != nil {
+				logger.Log(0, "error saving key", kerr.Error())
+			} else {
+				if kerr = functions.RegisterWithServer(&newKey, cfg); err != nil {
+					logger.Log(0, "registration error", kerr.Error())
+				} else {
+					daemon.Restart()
+				}
+			}
+		}
 	}
 	logger.Log(1, "reset network and peer configs")
 	if err == nil {

+ 4 - 4
netclient/functions/daemon.go

@@ -236,7 +236,7 @@ func setupMQTT(cfg *config.ClientConfig, server string, publish bool) mqtt.Clien
 	opts.SetResumeSubs(true)
 	opts.SetConnectionLostHandler(func(c mqtt.Client, e error) {
 		logger.Log(0, "detected broker connection lost, running pull for ", cfg.Node.Network)
-		_, err := Pull(cfg.Node.Network, true, false)
+		_, err := Pull(cfg.Node.Network, true)
 		if err != nil {
 			logger.Log(0, "could not run pull, server unreachable: ", err.Error())
 			logger.Log(0, "waiting to retry...")
@@ -250,7 +250,7 @@ func setupMQTT(cfg *config.ClientConfig, server string, publish bool) mqtt.Clien
 		//if after 12 seconds, try a pull on the last try
 		if time.Now().After(tperiod) {
 			logger.Log(0, "running pull for ", cfg.Node.Network)
-			_, err := Pull(cfg.Node.Network, true, false)
+			_, err := Pull(cfg.Node.Network, true)
 			if err != nil {
 				logger.Log(0, "could not run pull, exiting ", cfg.Node.Network, " setup: ", err.Error())
 				return client
@@ -263,7 +263,7 @@ func setupMQTT(cfg *config.ClientConfig, server string, publish bool) mqtt.Clien
 				logger.Log(0, "could not connect to broker, exiting ", cfg.Node.Network, " setup: ", token.Error().Error())
 				if strings.Contains(token.Error().Error(), "connectex") || strings.Contains(token.Error().Error(), "i/o timeout") {
 					logger.Log(0, "connection issue detected.. pulling and restarting daemon")
-					Pull(cfg.Node.Network, true, false)
+					Pull(cfg.Node.Network, true)
 					daemon.Restart()
 				}
 				return client
@@ -296,7 +296,7 @@ func initialPull(network string) {
 	if !fileInfo.ModTime().IsZero() && time.Now().After(fileInfo.ModTime().Add(time.Minute)) {
 		sleepTime := 2
 		for {
-			_, err := Pull(network, true, false)
+			_, err := Pull(network, true)
 			if err == nil {
 				break
 			}

+ 1 - 1
netclient/functions/mqpublish.go

@@ -105,7 +105,7 @@ func Hello(nodeCfg *config.ClientConfig) {
 	if err := publish(nodeCfg, fmt.Sprintf("ping/%s", nodeCfg.Node.ID), []byte(ncutils.Version), 0); err != nil {
 		logger.Log(0, fmt.Sprintf("error publishing ping, %v", err))
 		logger.Log(0, "running pull on "+nodeCfg.Node.Network+" to reconnect")
-		_, err := Pull(nodeCfg.Node.Network, true, false)
+		_, err := Pull(nodeCfg.Node.Network, true)
 		if err != nil {
 			logger.Log(0, "could not run pull on "+nodeCfg.Node.Network+", error: "+err.Error())
 		}

+ 2 - 21
netclient/functions/pull.go

@@ -1,8 +1,6 @@
 package functions
 
 import (
-	"crypto/ed25519"
-	"crypto/rand"
 	"encoding/json"
 	"errors"
 	"fmt"
@@ -14,16 +12,14 @@ import (
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/netclient/config"
-	"github.com/gravitl/netmaker/netclient/daemon"
 	"github.com/gravitl/netmaker/netclient/local"
 	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/netclient/wireguard"
-	"github.com/gravitl/netmaker/tls"
 	//homedir "github.com/mitchellh/go-homedir"
 )
 
 // Pull - pulls the latest config from the server, if manual it will overwrite
-func Pull(network string, iface bool, register bool) (*models.Node, error) {
+func Pull(network string, iface bool) (*models.Node, error) {
 	cfg, err := config.ReadConfig(network)
 	if err != nil {
 		return nil, err
@@ -72,7 +68,7 @@ func Pull(network string, iface bool, register bool) (*models.Node, error) {
 	} else {
 		if err = wireguard.SetWGConfig(network, true); err != nil {
 			if errors.Is(err, os.ErrNotExist) && !ncutils.IsFreeBSD() {
-				return Pull(network, true, false)
+				return Pull(network, true)
 			} else {
 				return nil, err
 			}
@@ -82,20 +78,5 @@ func Pull(network string, iface bool, register bool) (*models.Node, error) {
 	if bkupErr != nil {
 		logger.Log(0, "unable to update backup file")
 	}
-	//generate new private key and re-register with server
-	if register {
-		_, newKey, err := ed25519.GenerateKey(rand.Reader)
-		if err != nil {
-			return &resNode, err
-		}
-		if err := tls.SaveKey(ncutils.GetNetclientPath(), "/client.key", newKey); err != nil {
-			return &resNode, err
-		}
-		if err = RegisterWithServer(&newKey, cfg); err != nil {
-			return &resNode, err
-		}
-		daemon.Restart()
-	}
-
 	return &resNode, err
 }