added legacy check to maintain compatibility

This commit is contained in:
0xdcarns
2022-01-11 19:01:20 -05:00
parent 0502ff131c
commit 50016ed219
3 changed files with 34 additions and 41 deletions

View File

@@ -4,7 +4,6 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"errors" "errors"
"log"
"github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/database"
"github.com/gravitl/netmaker/functions" "github.com/gravitl/netmaker/functions"
@@ -108,9 +107,8 @@ func grpcAuthorize(ctx context.Context) error {
// Login - node authenticates using its password and retrieves a JWT for authorization. // Login - node authenticates using its password and retrieves a JWT for authorization.
func (s *NodeServiceServer) Login(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) { func (s *NodeServiceServer) Login(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) {
//out := new(LoginResponse) var reqNode, err = getNewOrLegacyNode(req.Data)
var reqNode models.Node if err != nil {
if err := json.Unmarshal([]byte(req.Data), &reqNode); err != nil {
return nil, err return nil, err
} }
@@ -119,11 +117,7 @@ func (s *NodeServiceServer) Login(ctx context.Context, req *nodepb.Object) (*nod
password := reqNode.Password password := reqNode.Password
macaddress := reqNode.MacAddress macaddress := reqNode.MacAddress
log.Printf("authing node: %v \n", reqNode)
var result models.NodeAuth var result models.NodeAuth
var err error
// err := errors.New("generic server error")
if nodeID == "" { if nodeID == "" {
//TODO: Set Error response //TODO: Set Error response
@@ -133,7 +127,7 @@ func (s *NodeServiceServer) Login(ctx context.Context, req *nodepb.Object) (*nod
err = errors.New("missing password") err = errors.New("missing password")
return nil, err return nil, err
} else { } else {
//Search DB for node with Mac Address. Ignore pending nodes (they should not be able to authenticate with API until approved). //Search DB for node with ID. Ignore pending nodes (they should not be able to authenticate with API until approved).
collection, err := database.FetchRecords(database.NODES_TABLE_NAME) collection, err := database.FetchRecords(database.NODES_TABLE_NAME)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@@ -4,6 +4,7 @@ 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"
@@ -19,16 +20,7 @@ type NodeServiceServer struct {
// NodeServiceServer.ReadNode - reads node and responds with gRPC // NodeServiceServer.ReadNode - reads node and responds with gRPC
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 var node, err = getNewOrLegacyNode(req.Data)
var err error
var reqNode models.Node
err = json.Unmarshal([]byte(req.Data), &reqNode)
if err != nil {
return nil, err
}
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
} }
@@ -99,7 +91,7 @@ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.Object)
// NodeServiceServer.UpdateNode updates a node and responds over gRPC // NodeServiceServer.UpdateNode updates a node and responds over gRPC
func (s *NodeServiceServer) UpdateNode(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) { func (s *NodeServiceServer) UpdateNode(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) {
// Get the node data from the request
var newnode models.Node var newnode models.Node
if err := json.Unmarshal([]byte(req.GetData()), &newnode); err != nil { if err := json.Unmarshal([]byte(req.GetData()), &newnode); err != nil {
return nil, err return nil, err
@@ -136,12 +128,7 @@ 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) {
var reqNode models.Node var node, err = getNewOrLegacyNode(req.Data)
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 { if err != nil {
return nil, err return nil, err
} }
@@ -160,15 +147,11 @@ 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) {
var reqNode models.Node var node, err = getNewOrLegacyNode(req.Data)
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 { if err != nil {
return nil, err return nil, err
} }
if node.IsServer == "yes" && logic.IsLeader(&node) { if node.IsServer == "yes" && logic.IsLeader(&node) {
logic.SetNetworkServerPeers(&node) logic.SetNetworkServerPeers(&node)
} }
@@ -192,15 +175,8 @@ func (s *NodeServiceServer) GetPeers(ctx context.Context, req *nodepb.Object) (*
// NodeServiceServer.GetExtPeers - returns ext peers for a gateway node // NodeServiceServer.GetExtPeers - returns ext peers for a gateway node
func (s *NodeServiceServer) GetExtPeers(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) { func (s *NodeServiceServer) GetExtPeers(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) {
// Initiate a NodeItem type to write decoded data to
//data := &models.PeersResponse{}
// collection.Find returns a cursor for our (empty) query
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) var node, err = getNewOrLegacyNode(req.Data)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -232,3 +208,27 @@ func (s *NodeServiceServer) GetExtPeers(ctx context.Context, req *nodepb.Object)
Type: nodepb.EXT_PEER, Type: nodepb.EXT_PEER,
}, nil }, nil
} }
// == private methods ==
func getNewOrLegacyNode(data string) (models.Node, error) {
var reqNode, node models.Node
var err error
if err = json.Unmarshal([]byte(data), &reqNode); err != nil {
oldID := strings.Split(data, "###") // handle legacy client IDs
if len(oldID) == 2 {
if node, err = logic.GetNodeByIDorMacAddress(reqNode.ID, reqNode.MacAddress, reqNode.Network); err != nil {
return models.Node{}, err
}
} else {
return models.Node{}, err
}
} else {
node, err = logic.GetNodeByIDorMacAddress(reqNode.ID, reqNode.MacAddress, reqNode.Network)
if err != nil {
return models.Node{}, err
}
}
return node, nil
}

View File

@@ -127,7 +127,6 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error {
if cfg.Node.IsServer != "yes" { if cfg.Node.IsServer != "yes" {
ncutils.Log("joining " + cfg.Network + " at " + cfg.Server.GRPCAddress) ncutils.Log("joining " + cfg.Network + " at " + cfg.Server.GRPCAddress)
var wcclient nodepb.NodeServiceClient var wcclient nodepb.NodeServiceClient
log.Printf("used: %v\n", postnode)
conn, err := grpc.Dial(cfg.Server.GRPCAddress, conn, err := grpc.Dial(cfg.Server.GRPCAddress,
ncutils.GRPCRequestOpts(cfg.Server.GRPCSSL)) ncutils.GRPCRequestOpts(cfg.Server.GRPCSSL))