mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-05 16:57:51 +08:00
client logic for comms network
This commit is contained in:
@@ -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") {
|
||||||
|
@@ -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 {
|
||||||
|
Reference in New Issue
Block a user