mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-05 16:57:51 +08:00
added legacy check to maintain compatibility
This commit is contained in:
@@ -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
|
||||||
|
@@ -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
|
||||||
|
}
|
||||||
|
@@ -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))
|
||||||
|
Reference in New Issue
Block a user