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

View file

@ -71,7 +71,7 @@ func AutoLogin(client nodepb.NodeServiceClient, network string) error {
return err return err
} }
tokenstring := []byte(res.Data) 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 { if err != nil {
return err return err
} }

View file

@ -186,9 +186,15 @@ func Pull(network string, manual bool) (*models.Node, error) {
return nil, err 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{ req := &nodepb.Object{
Data: node.MacAddress + "###" + node.Network, Data: string(data),
Type: nodepb.STRING_TYPE, Type: nodepb.NODE_TYPE,
} }
readres, err := wcclient.ReadNode(ctx, req, grpc.Header(&header)) readres, err := wcclient.ReadNode(ctx, req, grpc.Header(&header))

View file

@ -1,6 +1,7 @@
package functions package functions
import ( import (
"encoding/json"
"errors" "errors"
"fmt" "fmt"
"log" "log"
@ -165,18 +166,21 @@ func LeaveNetwork(network string) error {
log.Printf("Failed to authenticate: %v", err) log.Printf("Failed to authenticate: %v", err)
} else { // handle client side } else { // handle client side
var header metadata.MD var header metadata.MD
_, err = wcclient.DeleteNode( nodeData, err := json.Marshal(&node)
ctx, if err == nil {
&nodepb.Object{ _, err = wcclient.DeleteNode(
Data: node.ID, ctx,
Type: nodepb.STRING_TYPE, &nodepb.Object{
}, Data: string(nodeData),
grpc.Header(&header), Type: nodepb.NODE_TYPE,
) },
if err != nil { grpc.Header(&header),
ncutils.PrintLog("encountered error deleting node: "+err.Error(), 1) )
} else { if err != nil {
ncutils.PrintLog("removed machine from "+node.Network+" network on remote server", 1) 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 // Instantiate the BlogServiceClient with our client connection to the server
wcclient = nodepb.NewNodeServiceClient(conn) 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{ req := &nodepb.Object{
Data: nodecfg.MacAddress + "###" + nodecfg.Network, Data: string(nodeData),
Type: nodepb.STRING_TYPE, Type: nodepb.NODE_TYPE,
} }
ctx, err := auth.SetJWT(wcclient, network) 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 // Instantiate the BlogServiceClient with our client connection to the server
wcclient = nodepb.NewNodeServiceClient(conn) 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{ req := &nodepb.Object{
Data: macaddress + "###" + network, Data: string(nodeData),
Type: nodepb.STRING_TYPE, Type: nodepb.NODE_TYPE,
} }
ctx, err := auth.SetJWT(wcclient, network) 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 // Instantiate the BlogServiceClient with our client connection to the server
wcclient = nodepb.NewNodeServiceClient(conn) 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{ req := &nodepb.Object{
Data: macaddress + "###" + network, Data: string(nodeData),
Type: nodepb.STRING_TYPE, Type: nodepb.NODE_TYPE,
} }
ctx, err := auth.SetJWT(wcclient, network) ctx, err := auth.SetJWT(wcclient, network)