diff --git a/controllers/authGrpc.go b/controllers/authGrpc.go index f15acdb0..0728c528 100644 --- a/controllers/authGrpc.go +++ b/controllers/authGrpc.go @@ -78,19 +78,15 @@ func grpcAuthorize(ctx context.Context) error { if err != nil { return status.Errorf(codes.Unauthenticated, "Unauthorized. Network does not exist: "+network) - } emptynode := models.Node{} node, err := functions.GetNodeByMacAddress(network, mac) if !database.IsEmptyRecord(err) { if node, err = functions.GetDeletedNodeByMacAddress(network, mac); err != nil { if !database.IsEmptyRecord(err) { - return status.Errorf(codes.Unauthenticated, "Node does not exist.") - } - } else { - node.SetID() - if functions.RemoveDeletedNode(node.ID) { - return nil + if functions.RemoveDeletedNode(node.ID) { + return status.Errorf(codes.Unauthenticated, models.NODE_DELETE) + } } return status.Errorf(codes.Unauthenticated, "Node does not exist.") } diff --git a/netclient/functions/checkin.go b/netclient/functions/checkin.go index a549dd95..68f18fc3 100644 --- a/netclient/functions/checkin.go +++ b/netclient/functions/checkin.go @@ -5,6 +5,7 @@ import ( "encoding/json" "errors" "log" + "strings" nodepb "github.com/gravitl/netmaker/grpc" "github.com/gravitl/netmaker/models" @@ -19,6 +20,10 @@ import ( //homedir "github.com/mitchellh/go-homedir" ) +func isDeleteError(err error) bool { + return strings.Contains(err.Error(), models.NODE_DELETE) +} + func checkIP(node *models.Node, servercfg config.ServerConfig, cliconf config.ClientConfig, network string) bool { ipchange := false var err error @@ -88,17 +93,17 @@ func setDNS(node *models.Node, servercfg config.ServerConfig, nodecfg *models.No } } -func checkNodeActions(node *models.Node, network string, servercfg config.ServerConfig, localNode *models.Node) string { +func checkNodeActions(node *models.Node, networkName string, servercfg config.ServerConfig, localNode *models.Node, cfg *config.ClientConfig) string { if (node.Action == models.NODE_UPDATE_KEY || localNode.Action == models.NODE_UPDATE_KEY) && node.IsStatic != "yes" { - err := wireguard.SetWGKeyConfig(network, servercfg.GRPCAddress) + err := wireguard.SetWGKeyConfig(networkName, servercfg.GRPCAddress) if err != nil { log.Println("Unable to process reset keys request:", err) return "" } } if node.Action == models.NODE_DELETE || localNode.Action == models.NODE_DELETE { - err := LeaveNetwork(network) + err := RemoveLocalInstance(cfg, networkName) if err != nil { log.Println("Error:", err) return "" @@ -127,6 +132,9 @@ func CheckConfig(cliconf config.ClientConfig) error { currentNode := cfg.Node newNode, err := Pull(network, false) + if isDeleteError(err) { + return RemoveLocalInstance(cfg, network) + } if err != nil { return err } @@ -134,7 +142,7 @@ func CheckConfig(cliconf config.ClientConfig) error { return errors.New("node is pending") } - actionCompleted := checkNodeActions(newNode, network, servercfg, ¤tNode) + actionCompleted := checkNodeActions(newNode, network, servercfg, ¤tNode, cfg) if actionCompleted == models.NODE_DELETE { return errors.New("node has been removed") } diff --git a/netclient/functions/common.go b/netclient/functions/common.go index bb43d6ae..997f8c65 100644 --- a/netclient/functions/common.go +++ b/netclient/functions/common.go @@ -296,14 +296,18 @@ func LeaveNetwork(network string) error { } } } - err = local.WipeLocal(network) + return RemoveLocalInstance(cfg, network) +} + +func RemoveLocalInstance(cfg *config.ClientConfig, networkName string) error { + err := local.WipeLocal(networkName) if err != nil { log.Printf("Unable to wipe local config: %v", err) } else { - log.Println("Removed " + node.Network + " network locally") + log.Println("Removed " + networkName + " network locally") } if cfg.Daemon != "off" { - err = local.RemoveSystemDServices(network) + err = local.RemoveSystemDServices(networkName) } return err } diff --git a/netclient/functions/join.go b/netclient/functions/join.go index 869f877f..3c2ecdb9 100644 --- a/netclient/functions/join.go +++ b/netclient/functions/join.go @@ -11,6 +11,7 @@ import ( "net" "time" + "github.com/gravitl/netmaker/database" nodepb "github.com/gravitl/netmaker/grpc" "github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/netclient/auth" @@ -115,8 +116,6 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error { return err } } - } else { - cfg.Node.Endpoint = cfg.Node.Endpoint } if privateKey == "" { wgPrivatekey, err := wgtypes.GeneratePrivateKey() @@ -158,27 +157,27 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error { wcclient = nodepb.NewNodeServiceClient(conn) - postnode := &models.Node{ - Password: cfg.Node.Password, - MacAddress: cfg.Node.MacAddress, - AccessKey: cfg.Server.AccessKey, - Network: cfg.Network, - ListenPort: cfg.Node.ListenPort, - PostUp: cfg.Node.PostUp, - PostDown: cfg.Node.PostDown, - PersistentKeepalive: cfg.Node.PersistentKeepalive, - LocalAddress: cfg.Node.LocalAddress, - Interface: cfg.Node.Interface, - PublicKey: cfg.Node.PublicKey, - Name: cfg.Node.Name, - Endpoint: cfg.Node.Endpoint, - SaveConfig: cfg.Node.SaveConfig, - UDPHolePunch: cfg.Node.UDPHolePunch, - } - if err = config.ModConfig(postnode); err != nil { + // postnode := &models.Node{ + // Password: cfg.Node.Password, + // MacAddress: cfg.Node.MacAddress, + // AccessKey: cfg.Server.AccessKey, + // Network: cfg.Network, + // ListenPort: cfg.Node.ListenPort, + // PostUp: cfg.Node.PostUp, + // PostDown: cfg.Node.PostDown, + // PersistentKeepalive: cfg.Node.PersistentKeepalive, + // LocalAddress: cfg.Node.LocalAddress, + // Interface: cfg.Node.Interface, + // PublicKey: cfg.Node.PublicKey, + // Name: cfg.Node.Name, + // Endpoint: cfg.Node.Endpoint, + // SaveConfig: cfg.Node.SaveConfig, + // UDPHolePunch: cfg.Node.UDPHolePunch, + // } + if err = config.ModConfig(&cfg.Node); err != nil { return err } - data, err := json.Marshal(&postnode) + data, err := json.Marshal(&cfg.Node) if err != nil { return err } @@ -216,6 +215,11 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error { return err } + err = wireguard.StorePrivKey(privateKey, cfg.Network) + if err != nil { + return err + } + if node.IsPending == "yes" { fmt.Println("Node is marked as PENDING.") fmt.Println("Awaiting approval from Admin before configuring WireGuard.") @@ -227,14 +231,11 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error { log.Println("retrieving remote peers") peers, hasGateway, gateways, err := server.GetPeers(node.MacAddress, cfg.Network, cfg.Server.GRPCAddress, node.IsDualStack == "yes", node.IsIngressGateway == "yes") - if err != nil { - log.Println("failed to retrieve peers") - return err - } - err = wireguard.StorePrivKey(privateKey, cfg.Network) - if err != nil { + if err != nil && !database.IsEmptyRecord(err) { + log.Println("failed to retrieve peers", err) return err } + log.Println("starting wireguard") err = wireguard.InitWireguard(&node, privateKey, peers, hasGateway, gateways) if err != nil {