Browse Source

ispending bug fix and node auth fix

worker-9 4 years ago
parent
commit
46d6899982

+ 3 - 7
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.")
 		}

+ 12 - 4
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, &currentNode)
+	actionCompleted := checkNodeActions(newNode, network, servercfg, &currentNode, cfg)
 	if actionCompleted == models.NODE_DELETE {
 		return errors.New("node has been removed")
 	}

+ 7 - 3
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
 }

+ 28 - 27
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 {