refactored all grpc to be uniform

This commit is contained in:
0xdcarns 2022-01-10 19:36:13 -05:00
parent 545f45d86d
commit d18b6d5ee2
6 changed files with 72 additions and 58 deletions

View file

@ -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
}

View file

@ -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
}

View file

@ -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))

View file

@ -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)
}
}
}
}

View file

@ -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)

View file

@ -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)