Browse Source

refactored all grpc to be uniform

0xdcarns 3 years ago
parent
commit
d18b6d5ee2

+ 24 - 37
controllers/node_grpc.go

@@ -4,7 +4,6 @@ import (
 	"context"
 	"encoding/json"
 	"errors"
-	"strings"
 
 	nodepb "github.com/gravitl/netmaker/grpc"
 	"github.com/gravitl/netmaker/logger"
@@ -22,16 +21,14 @@ type NodeServiceServer struct {
 func (s *NodeServiceServer) ReadNode(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) {
 	// convert string id (from proto) to mongoDB ObjectId
 	var err error
-	var node models.Node
-	var macAndNetwork = make([]string, 2)
-	if strings.Contains(req.Data, "###") {
-		macAndNetwork = strings.Split(req.Data, "###")
-		if len(macAndNetwork) != 2 {
-			return nil, errors.New("could not read node, invalid node id given")
-		}
+	var reqNode models.Node
+	err = json.Unmarshal([]byte(req.Data), &reqNode)
+	if err != nil {
+		return nil, err
 	}
 
-	node, err = logic.GetNodeByIDorMacAddress(req.Data, macAndNetwork[0], macAndNetwork[1])
+	var node models.Node
+	node, err = logic.GetNodeByIDorMacAddress(reqNode.ID, reqNode.MacAddress, reqNode.Network)
 	if err != nil {
 		return nil, err
 	}
@@ -138,16 +135,17 @@ func (s *NodeServiceServer) UpdateNode(ctx context.Context, req *nodepb.Object)
 
 // NodeServiceServer.DeleteNode - deletes a node and responds over gRPC
 func (s *NodeServiceServer) DeleteNode(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) {
-	nodeID := req.GetData()
-	var nodeInfo = make([]string, 2)
-	if strings.Contains(nodeID, "###") {
-		nodeInfo = strings.Split(nodeID, "###")
-		if len(nodeInfo) != 2 {
-			return nil, errors.New("node not found")
-		}
+
+	var reqNode models.Node
+	if err := json.Unmarshal([]byte(req.GetData()), &reqNode); err != nil {
+		return nil, err
+	}
+
+	node, err := logic.GetNodeByIDorMacAddress(reqNode.ID, reqNode.MacAddress, reqNode.Network)
+	if err != nil {
+		return nil, err
 	}
 
-	var node, err = logic.GetNodeByIDorMacAddress(nodeID, nodeInfo[0], nodeInfo[1])
 	err = logic.DeleteNodeByID(&node, true)
 	if err != nil {
 		return nil, err
@@ -161,16 +159,13 @@ func (s *NodeServiceServer) DeleteNode(ctx context.Context, req *nodepb.Object)
 
 // NodeServiceServer.GetPeers - fetches peers over gRPC
 func (s *NodeServiceServer) GetPeers(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) {
-	nodeID := req.GetData()
-	var nodeInfo = make([]string, 2)
-	if strings.Contains(nodeID, "###") {
-		nodeInfo = strings.Split(nodeID, "###")
-		if len(nodeInfo) != 2 {
-			return nil, errors.New("could not fetch peers, invalid node id")
-		}
+
+	var reqNode models.Node
+	if err := json.Unmarshal([]byte(req.GetData()), &reqNode); err != nil {
+		return nil, err
 	}
 
-	node, err := logic.GetNodeByIDorMacAddress(nodeID, nodeInfo[0], nodeInfo[1])
+	node, err := logic.GetNodeByIDorMacAddress(reqNode.ID, reqNode.MacAddress, reqNode.Network)
 	if err != nil {
 		return nil, err
 	}
@@ -200,20 +195,12 @@ func (s *NodeServiceServer) GetExtPeers(ctx context.Context, req *nodepb.Object)
 	// Initiate a NodeItem type to write decoded data to
 	//data := &models.PeersResponse{}
 	// collection.Find returns a cursor for our (empty) query
-	macAndNetwork := strings.Split(req.Data, "###")
-	if len(macAndNetwork) != 2 {
-		return nil, errors.New("did not receive valid node id when fetching ext peers")
-	}
-	nodeID := req.GetData()
-	var nodeInfo = make([]string, 2)
-	if strings.Contains(nodeID, "###") {
-		nodeInfo = strings.Split(nodeID, "###")
-		if len(nodeInfo) != 2 {
-			return nil, errors.New("could not fetch peers, invalid node id")
-		}
+	var reqNode models.Node
+	if err := json.Unmarshal([]byte(req.GetData()), &reqNode); err != nil {
+		return nil, err
 	}
 
-	node, err := logic.GetNodeByIDorMacAddress(nodeID, nodeInfo[0], nodeInfo[1])
+	node, err := logic.GetNodeByIDorMacAddress(reqNode.ID, reqNode.MacAddress, reqNode.Network)
 	if err != nil {
 		return nil, err
 	}

+ 1 - 1
netclient/auth/auth.go

@@ -71,7 +71,7 @@ func AutoLogin(client nodepb.NodeServiceClient, network string) error {
 		return err
 	}
 	tokenstring := []byte(res.Data)
-	err = os.WriteFile(home+"nettoken-"+network, tokenstring, 0644)
+	err = os.WriteFile(home+"nettoken-"+network, tokenstring, 0644) // TODO: Proper permissions?
 	if err != nil {
 		return err
 	}

+ 8 - 2
netclient/functions/checkin.go

@@ -186,9 +186,15 @@ func Pull(network string, manual bool) (*models.Node, error) {
 			return nil, err
 		}
 
+		data, err := json.Marshal(&node)
+		if err != nil {
+			ncutils.PrintLog("Failed to parse node config: "+err.Error(), 1)
+			return nil, err
+		}
+
 		req := &nodepb.Object{
-			Data: node.MacAddress + "###" + node.Network,
-			Type: nodepb.STRING_TYPE,
+			Data: string(data),
+			Type: nodepb.NODE_TYPE,
 		}
 
 		readres, err := wcclient.ReadNode(ctx, req, grpc.Header(&header))

+ 16 - 12
netclient/functions/common.go

@@ -1,6 +1,7 @@
 package functions
 
 import (
+	"encoding/json"
 	"errors"
 	"fmt"
 	"log"
@@ -165,18 +166,21 @@ func LeaveNetwork(network string) error {
 			log.Printf("Failed to authenticate: %v", err)
 		} else { // handle client side
 			var header metadata.MD
-			_, err = wcclient.DeleteNode(
-				ctx,
-				&nodepb.Object{
-					Data: node.ID,
-					Type: nodepb.STRING_TYPE,
-				},
-				grpc.Header(&header),
-			)
-			if err != nil {
-				ncutils.PrintLog("encountered error deleting node: "+err.Error(), 1)
-			} else {
-				ncutils.PrintLog("removed machine from "+node.Network+" network on remote server", 1)
+			nodeData, err := json.Marshal(&node)
+			if err == nil {
+				_, err = wcclient.DeleteNode(
+					ctx,
+					&nodepb.Object{
+						Data: string(nodeData),
+						Type: nodepb.NODE_TYPE,
+					},
+					grpc.Header(&header),
+				)
+				if err != nil {
+					ncutils.PrintLog("encountered error deleting node: "+err.Error(), 1)
+				} else {
+					ncutils.PrintLog("removed machine from "+node.Network+" network on remote server", 1)
+				}
 			}
 		}
 	}

+ 7 - 2
netclient/functions/list.go

@@ -98,9 +98,14 @@ func getPeers(network string) ([]Peer, error) {
 	// Instantiate the BlogServiceClient with our client connection to the server
 	wcclient = nodepb.NewNodeServiceClient(conn)
 
+	nodeData, err := json.Marshal(&nodecfg)
+	if err != nil {
+		return []Peer{}, fmt.Errorf("could not parse config node on network %s : %w", network, err)
+	}
+
 	req := &nodepb.Object{
-		Data: nodecfg.MacAddress + "###" + nodecfg.Network,
-		Type: nodepb.STRING_TYPE,
+		Data: string(nodeData),
+		Type: nodepb.NODE_TYPE,
 	}
 
 	ctx, err := auth.SetJWT(wcclient, network)

+ 16 - 4
netclient/server/grpc.go

@@ -101,9 +101,15 @@ func GetPeers(macaddress string, network string, server string, dualstack bool,
 		// Instantiate the BlogServiceClient with our client connection to the server
 		wcclient = nodepb.NewNodeServiceClient(conn)
 
+		nodeData, err := json.Marshal(&nodecfg)
+		if err != nil {
+			ncutils.PrintLog("could not parse node data from config during peer fetch for network "+network, 1)
+			return peers, hasGateway, gateways, err
+		}
+
 		req := &nodepb.Object{
-			Data: macaddress + "###" + network,
-			Type: nodepb.STRING_TYPE,
+			Data: string(nodeData),
+			Type: nodepb.NODE_TYPE,
 		}
 
 		ctx, err := auth.SetJWT(wcclient, network)
@@ -274,9 +280,15 @@ func GetExtPeers(macaddress string, network string, server string, dualstack boo
 		// Instantiate the BlogServiceClient with our client connection to the server
 		wcclient = nodepb.NewNodeServiceClient(conn)
 
+		nodeData, err := json.Marshal(&nodecfg)
+		if err != nil {
+			ncutils.PrintLog("could not parse node data from config during peer fetch for network "+network, 1)
+			return peers, err
+		}
+
 		req := &nodepb.Object{
-			Data: macaddress + "###" + network,
-			Type: nodepb.STRING_TYPE,
+			Data: string(nodeData),
+			Type: nodepb.NODE_TYPE,
 		}
 
 		ctx, err := auth.SetJWT(wcclient, network)