From df0e882a7e8f684eeab168c62476b6e5a1a8f025 Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Thu, 14 Jul 2022 13:48:11 -0400 Subject: [PATCH] updated logic for join/leave network --- netclient/daemon/common.go | 19 +++++++++++++++++++ netclient/daemon/freebsd.go | 1 + netclient/daemon/systemd.go | 1 + netclient/functions/common.go | 23 +---------------------- netclient/functions/join.go | 7 ++++++- 5 files changed, 28 insertions(+), 23 deletions(-) diff --git a/netclient/daemon/common.go b/netclient/daemon/common.go index c53a6646..5d001a10 100644 --- a/netclient/daemon/common.go +++ b/netclient/daemon/common.go @@ -50,6 +50,25 @@ func Restart() error { return nil } +// Start - starts system daemon +func Start() error { + os := runtime.GOOS + var err error + switch os { + case "windows": + RestartWindowsDaemon() + case "darwin": + RestartLaunchD() + case "linux": + RestartSystemD() + case "freebsd": + FreebsdDaemon("restart") + default: + err = errors.New("this os is not yet supported for daemon mode. Run join cmd with flag '--daemon off'") + } + return err +} + // Stop - stops a system daemon func Stop() error { os := runtime.GOOS diff --git a/netclient/daemon/freebsd.go b/netclient/daemon/freebsd.go index f7f00fb2..48ae30d5 100644 --- a/netclient/daemon/freebsd.go +++ b/netclient/daemon/freebsd.go @@ -108,6 +108,7 @@ func FreebsdDaemon(command string) { // CleanupFreebsd - removes config files and netclient binary func CleanupFreebsd() { + RemoveFreebsdDaemon() if err := os.RemoveAll(ncutils.GetNetclientPath()); err != nil { logger.Log(1, "Removing netclient configs: ", err.Error()) } diff --git a/netclient/daemon/systemd.go b/netclient/daemon/systemd.go index b073d4fe..17af504c 100644 --- a/netclient/daemon/systemd.go +++ b/netclient/daemon/systemd.go @@ -83,6 +83,7 @@ func RestartSystemD() { // CleanupLinux - cleans up neclient configs func CleanupLinux() { + RemoveSystemDServices() if err := os.RemoveAll(ncutils.GetNetclientPath()); err != nil { logger.Log(1, "Removing netclient configs: ", err.Error()) } diff --git a/netclient/functions/common.go b/netclient/functions/common.go index 55f3733f..6f89d691 100644 --- a/netclient/functions/common.go +++ b/netclient/functions/common.go @@ -139,6 +139,7 @@ func Uninstall() error { } } err = nil + // clean up OS specific stuff if ncutils.IsWindows() { daemon.CleanupWindows() @@ -213,31 +214,9 @@ func LeaveNetwork(network string) error { logger.Log(1, "removed ", node.Network, " network locally") } - currentNets, err := ncutils.GetSystemNetworks() - if err != nil || len(currentNets) <= 1 { - daemon.Stop() // stop system daemon if last network - return RemoveLocalInstance(cfg, network) - } return daemon.Restart() } -// RemoveLocalInstance - remove all netclient files locally for a network -func RemoveLocalInstance(cfg *config.ClientConfig, networkName string) error { - - if cfg.Daemon != "off" { - if ncutils.IsWindows() { - // TODO: Remove job? - } else if ncutils.IsMac() { - //TODO: Delete mac daemon - } else if ncutils.IsFreeBSD() { - daemon.RemoveFreebsdDaemon() - } else { - daemon.RemoveSystemDServices() - } - } - return nil -} - // DeleteInterface - delete an interface of a network func DeleteInterface(ifacename string, postdown string) error { return wireguard.RemoveConf(ifacename, true) diff --git a/netclient/functions/join.go b/netclient/functions/join.go index 1d7cd036..1786c2d9 100644 --- a/netclient/functions/join.go +++ b/netclient/functions/join.go @@ -212,7 +212,12 @@ func JoinNetwork(cfg *config.ClientConfig, privateKey string) error { } } - daemon.Restart() + if err := daemon.Restart(); err != nil { + log.Println("daemon restart failed ", err) + if err := daemon.Start(); err != nil { + return err + } + } return nil }