redo register on pull

This commit is contained in:
Matthew R. Kasun
2022-04-25 14:30:51 -04:00
parent e3206c5b4c
commit 092441441c
4 changed files with 25 additions and 28 deletions

View File

@@ -1,6 +1,8 @@
package command package command
import ( import (
"crypto/ed25519"
"crypto/rand"
"strings" "strings"
"github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/logger"
@@ -8,6 +10,7 @@ import (
"github.com/gravitl/netmaker/netclient/daemon" "github.com/gravitl/netmaker/netclient/daemon"
"github.com/gravitl/netmaker/netclient/functions" "github.com/gravitl/netmaker/netclient/functions"
"github.com/gravitl/netmaker/netclient/ncutils" "github.com/gravitl/netmaker/netclient/ncutils"
"github.com/gravitl/netmaker/tls"
) )
// Join - join command to run from cli // Join - join command to run from cli
@@ -78,7 +81,7 @@ func Pull(cfg *config.ClientConfig) error {
return err return err
} }
for _, network := range networks { for _, network := range networks {
_, err = functions.Pull(network, true, true) _, err = functions.Pull(network, true)
if err != nil { if err != nil {
logger.Log(1, "Error pulling network config for network: ", network, "\n", err.Error()) logger.Log(1, "Error pulling network config for network: ", network, "\n", err.Error())
} else { } else {
@@ -87,7 +90,20 @@ func Pull(cfg *config.ClientConfig) error {
} }
err = nil err = nil
} else { } 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") logger.Log(1, "reset network and peer configs")
if err == nil { if err == nil {

View File

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

View File

@@ -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 { 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, fmt.Sprintf("error publishing ping, %v", err))
logger.Log(0, "running pull on "+nodeCfg.Node.Network+" to reconnect") 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 { if err != nil {
logger.Log(0, "could not run pull on "+nodeCfg.Node.Network+", error: "+err.Error()) logger.Log(0, "could not run pull on "+nodeCfg.Node.Network+", error: "+err.Error())
} }

View File

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