Browse Source

client logic for comms network

Matthew R. Kasun 3 years ago
parent
commit
2390f017be
2 changed files with 47 additions and 6 deletions
  1. 34 1
      netclient/command/commands.go
  2. 13 5
      netclient/functions/daemon.go

+ 34 - 1
netclient/command/commands.go

@@ -8,12 +8,45 @@ 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"
+	"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
 // Join - join command to run from cli
 func Join(cfg config.ClientConfig, privateKey string) error {
 func Join(cfg config.ClientConfig, privateKey string) error {
-
 	var err 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)
 	err = functions.JoinNetwork(cfg, privateKey)
 	if err != nil && !cfg.DebugOn {
 	if err != nil && !cfg.DebugOn {
 		if !strings.Contains(err.Error(), "ALREADY_INSTALLED") {
 		if !strings.Contains(err.Error(), "ALREADY_INSTALLED") {

+ 13 - 5
netclient/functions/daemon.go

@@ -71,6 +71,10 @@ func Daemon() error {
 		return err
 		return err
 	}
 	}
 	for _, network := range networks {
 	for _, network := range networks {
+		//skip comms network
+		if network == "n37m8k3r" {
+			continue
+		}
 		ctx, cancel := context.WithCancel(context.Background())
 		ctx, cancel := context.WithCancel(context.Background())
 		networkcontext.Store(network, cancel)
 		networkcontext.Store(network, cancel)
 		go MessageQueue(ctx, network)
 		go MessageQueue(ctx, network)
@@ -97,7 +101,7 @@ func MessageQueue(ctx context.Context, network string) {
 
 
 	cfg.ReadConfig()
 	cfg.ReadConfig()
 	ncutils.Log("daemon started for network: " + network)
 	ncutils.Log("daemon started for network: " + network)
-	client := setupMQTT(&cfg, false)
+	client := setupMQTT(false)
 
 
 	defer client.Disconnect(250)
 	defer client.Disconnect(250)
 	wg := &sync.WaitGroup{}
 	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)
 				ncutils.PrintLog("could not ping server "+err.Error(), 0)
 			}
 			}
 			Hello(cfg, network)
 			Hello(cfg, network)
@@ -399,7 +403,10 @@ func Hello(cfg *config.ClientConfig, network string) {
 // == Private ==
 // == Private ==
 
 
 // setupMQTT creates a connection to broker and return client
 // 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()
 	opts := mqtt.NewClientOptions()
 	server := getServerAddress(cfg)
 	server := getServerAddress(cfg)
 	opts.AddBroker(server + ":1883")
 	opts.AddBroker(server + ":1883")
@@ -534,7 +541,7 @@ func publish(cfg *config.ClientConfig, dest string, msg []byte, qos byte) error
 		return err
 		return err
 	}
 	}
 
 
-	client := setupMQTT(cfg, true)
+	client := setupMQTT(true)
 	defer client.Disconnect(250)
 	defer client.Disconnect(250)
 	encrypted, err := ncutils.Chunk(msg, serverPubKey, trafficPrivKey)
 	encrypted, err := ncutils.Chunk(msg, serverPubKey, trafficPrivKey)
 	if err != nil {
 	if err != nil {
@@ -570,7 +577,8 @@ func decryptMsg(cfg *config.ClientConfig, msg []byte) ([]byte, error) {
 	return ncutils.DeChunk(msg, serverPubKey, diskKey)
 	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)
 	node := getServerAddress(cfg)
 	pinger, err := ping.NewPinger(node)
 	pinger, err := ping.NewPinger(node)
 	if err != nil {
 	if err != nil {