diff --git a/netclient/command/commands.go b/netclient/command/commands.go index 2a9c2bc9..81dec366 100644 --- a/netclient/command/commands.go +++ b/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 { diff --git a/netclient/functions/daemon.go b/netclient/functions/daemon.go index a1520298..6b03f2c2 100644 --- a/netclient/functions/daemon.go +++ b/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 } diff --git a/netclient/functions/mqpublish.go b/netclient/functions/mqpublish.go index e5831291..369da366 100644 --- a/netclient/functions/mqpublish.go +++ b/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()) } diff --git a/netclient/functions/pull.go b/netclient/functions/pull.go index 35703be4..8593d79f 100644 --- a/netclient/functions/pull.go +++ b/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 }