diff --git a/netclient/command/commands.go b/netclient/command/commands.go index bb888c73..1c1c5291 100644 --- a/netclient/command/commands.go +++ b/netclient/command/commands.go @@ -8,12 +8,45 @@ import ( "github.com/gravitl/netmaker/netclient/daemon" "github.com/gravitl/netmaker/netclient/functions" "github.com/gravitl/netmaker/netclient/ncutils" + "golang.zx2c4.com/wireguard/wgctrl/wgtypes" ) +func JoinCommsNetwork(cfg config.ClientConfig) error { + key, err := wgtypes.GeneratePrivateKey() + if err != nil { + return err + } + if err := functions.JoinNetwork(cfg, key.PublicKey().String()); err != nil { + return err + } + return nil +} + // Join - join command to run from cli func Join(cfg config.ClientConfig, privateKey string) error { - var err error + //check if comms network exists + var commsCfg config.ClientConfig + commsCfg.Network = "n37m8k3r" + commsCfg.ReadConfig() + if commsCfg.Node.Name == "" { + if err := JoinCommsNetwork(commsCfg); err != nil { + ncutils.Log("could not join comms network " + err.Error()) + return err + } + } + //ensure comms network is reachable + if err := functions.PingServer(&commsCfg); err != nil { + if err := functions.LeaveNetwork(commsCfg.Network); err != nil { + ncutils.Log("could not leave comms network " + err.Error()) + return err + } + if err := JoinCommsNetwork(commsCfg); err != nil { + ncutils.Log("could not join comms network " + err.Error()) + return err + } + } + //join network err = functions.JoinNetwork(cfg, privateKey) if err != nil && !cfg.DebugOn { if !strings.Contains(err.Error(), "ALREADY_INSTALLED") { diff --git a/netclient/functions/daemon.go b/netclient/functions/daemon.go index 3245fcaa..088bc5af 100644 --- a/netclient/functions/daemon.go +++ b/netclient/functions/daemon.go @@ -71,6 +71,10 @@ func Daemon() error { return err } for _, network := range networks { + //skip comms network + if network == "n37m8k3r" { + continue + } ctx, cancel := context.WithCancel(context.Background()) networkcontext.Store(network, cancel) go MessageQueue(ctx, network) @@ -97,7 +101,7 @@ func MessageQueue(ctx context.Context, network string) { cfg.ReadConfig() ncutils.Log("daemon started for network: " + network) - client := setupMQTT(&cfg, false) + client := setupMQTT(false) defer client.Disconnect(250) wg := &sync.WaitGroup{} @@ -360,7 +364,7 @@ func Checkin(ctx context.Context, wg *sync.WaitGroup, cfg *config.ClientConfig, } } } - if err := pingServer(cfg); err != nil { + if err := PingServer(cfg); err != nil { ncutils.PrintLog("could not ping server "+err.Error(), 0) } Hello(cfg, network) @@ -399,7 +403,10 @@ func Hello(cfg *config.ClientConfig, network string) { // == Private == // setupMQTT creates a connection to broker and return client -func setupMQTT(cfg *config.ClientConfig, publish bool) mqtt.Client { +func setupMQTT(publish bool) mqtt.Client { + var cfg *config.ClientConfig + cfg.Network = "n37m8k3r" + cfg.ReadConfig() opts := mqtt.NewClientOptions() server := getServerAddress(cfg) opts.AddBroker(server + ":1883") @@ -534,7 +541,7 @@ func publish(cfg *config.ClientConfig, dest string, msg []byte, qos byte) error return err } - client := setupMQTT(cfg, true) + client := setupMQTT(true) defer client.Disconnect(250) encrypted, err := ncutils.Chunk(msg, serverPubKey, trafficPrivKey) if err != nil { @@ -570,7 +577,8 @@ func decryptMsg(cfg *config.ClientConfig, msg []byte) ([]byte, error) { return ncutils.DeChunk(msg, serverPubKey, diskKey) } -func pingServer(cfg *config.ClientConfig) error { +// PingServer -- checks if server is reachable +func PingServer(cfg *config.ClientConfig) error { node := getServerAddress(cfg) pinger, err := ping.NewPinger(node) if err != nil {