client logic for comms network

This commit is contained in:
Matthew R. Kasun
2022-02-18 10:34:03 -05:00
parent 0b1bf1b9aa
commit 2390f017be
2 changed files with 47 additions and 6 deletions

View File

@@ -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") {

View File

@@ -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 {