ispending bug fix and node auth fix

This commit is contained in:
worker-9 2021-08-10 10:55:48 -04:00
parent c799df59ce
commit 46d6899982
4 changed files with 50 additions and 41 deletions

View file

@ -78,19 +78,15 @@ func grpcAuthorize(ctx context.Context) error {
if err != nil {
return status.Errorf(codes.Unauthenticated, "Unauthorized. Network does not exist: "+network)
}
emptynode := models.Node{}
node, err := functions.GetNodeByMacAddress(network, mac)
if !database.IsEmptyRecord(err) {
if node, err = functions.GetDeletedNodeByMacAddress(network, mac); err != nil {
if !database.IsEmptyRecord(err) {
return status.Errorf(codes.Unauthenticated, "Node does not exist.")
}
} else {
node.SetID()
if functions.RemoveDeletedNode(node.ID) {
return nil
if functions.RemoveDeletedNode(node.ID) {
return status.Errorf(codes.Unauthenticated, models.NODE_DELETE)
}
}
return status.Errorf(codes.Unauthenticated, "Node does not exist.")
}

View file

@ -5,6 +5,7 @@ import (
"encoding/json"
"errors"
"log"
"strings"
nodepb "github.com/gravitl/netmaker/grpc"
"github.com/gravitl/netmaker/models"
@ -19,6 +20,10 @@ import (
//homedir "github.com/mitchellh/go-homedir"
)
func isDeleteError(err error) bool {
return strings.Contains(err.Error(), models.NODE_DELETE)
}
func checkIP(node *models.Node, servercfg config.ServerConfig, cliconf config.ClientConfig, network string) bool {
ipchange := false
var err error
@ -88,17 +93,17 @@ func setDNS(node *models.Node, servercfg config.ServerConfig, nodecfg *models.No
}
}
func checkNodeActions(node *models.Node, network string, servercfg config.ServerConfig, localNode *models.Node) string {
func checkNodeActions(node *models.Node, networkName string, servercfg config.ServerConfig, localNode *models.Node, cfg *config.ClientConfig) string {
if (node.Action == models.NODE_UPDATE_KEY || localNode.Action == models.NODE_UPDATE_KEY) &&
node.IsStatic != "yes" {
err := wireguard.SetWGKeyConfig(network, servercfg.GRPCAddress)
err := wireguard.SetWGKeyConfig(networkName, servercfg.GRPCAddress)
if err != nil {
log.Println("Unable to process reset keys request:", err)
return ""
}
}
if node.Action == models.NODE_DELETE || localNode.Action == models.NODE_DELETE {
err := LeaveNetwork(network)
err := RemoveLocalInstance(cfg, networkName)
if err != nil {
log.Println("Error:", err)
return ""
@ -127,6 +132,9 @@ func CheckConfig(cliconf config.ClientConfig) error {
currentNode := cfg.Node
newNode, err := Pull(network, false)
if isDeleteError(err) {
return RemoveLocalInstance(cfg, network)
}
if err != nil {
return err
}
@ -134,7 +142,7 @@ func CheckConfig(cliconf config.ClientConfig) error {
return errors.New("node is pending")
}
actionCompleted := checkNodeActions(newNode, network, servercfg, &currentNode)
actionCompleted := checkNodeActions(newNode, network, servercfg, &currentNode, cfg)
if actionCompleted == models.NODE_DELETE {
return errors.New("node has been removed")
}

View file

@ -296,14 +296,18 @@ func LeaveNetwork(network string) error {
}
}
}
err = local.WipeLocal(network)
return RemoveLocalInstance(cfg, network)
}
func RemoveLocalInstance(cfg *config.ClientConfig, networkName string) error {
err := local.WipeLocal(networkName)
if err != nil {
log.Printf("Unable to wipe local config: %v", err)
} else {
log.Println("Removed " + node.Network + " network locally")
log.Println("Removed " + networkName + " network locally")
}
if cfg.Daemon != "off" {
err = local.RemoveSystemDServices(network)
err = local.RemoveSystemDServices(networkName)
}
return err
}

View file

@ -11,6 +11,7 @@ import (
"net"
"time"
"github.com/gravitl/netmaker/database"
nodepb "github.com/gravitl/netmaker/grpc"
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/netclient/auth"
@ -115,8 +116,6 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error {
return err
}
}
} else {
cfg.Node.Endpoint = cfg.Node.Endpoint
}
if privateKey == "" {
wgPrivatekey, err := wgtypes.GeneratePrivateKey()
@ -158,27 +157,27 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error {
wcclient = nodepb.NewNodeServiceClient(conn)
postnode := &models.Node{
Password: cfg.Node.Password,
MacAddress: cfg.Node.MacAddress,
AccessKey: cfg.Server.AccessKey,
Network: cfg.Network,
ListenPort: cfg.Node.ListenPort,
PostUp: cfg.Node.PostUp,
PostDown: cfg.Node.PostDown,
PersistentKeepalive: cfg.Node.PersistentKeepalive,
LocalAddress: cfg.Node.LocalAddress,
Interface: cfg.Node.Interface,
PublicKey: cfg.Node.PublicKey,
Name: cfg.Node.Name,
Endpoint: cfg.Node.Endpoint,
SaveConfig: cfg.Node.SaveConfig,
UDPHolePunch: cfg.Node.UDPHolePunch,
}
if err = config.ModConfig(postnode); err != nil {
// postnode := &models.Node{
// Password: cfg.Node.Password,
// MacAddress: cfg.Node.MacAddress,
// AccessKey: cfg.Server.AccessKey,
// Network: cfg.Network,
// ListenPort: cfg.Node.ListenPort,
// PostUp: cfg.Node.PostUp,
// PostDown: cfg.Node.PostDown,
// PersistentKeepalive: cfg.Node.PersistentKeepalive,
// LocalAddress: cfg.Node.LocalAddress,
// Interface: cfg.Node.Interface,
// PublicKey: cfg.Node.PublicKey,
// Name: cfg.Node.Name,
// Endpoint: cfg.Node.Endpoint,
// SaveConfig: cfg.Node.SaveConfig,
// UDPHolePunch: cfg.Node.UDPHolePunch,
// }
if err = config.ModConfig(&cfg.Node); err != nil {
return err
}
data, err := json.Marshal(&postnode)
data, err := json.Marshal(&cfg.Node)
if err != nil {
return err
}
@ -216,6 +215,11 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error {
return err
}
err = wireguard.StorePrivKey(privateKey, cfg.Network)
if err != nil {
return err
}
if node.IsPending == "yes" {
fmt.Println("Node is marked as PENDING.")
fmt.Println("Awaiting approval from Admin before configuring WireGuard.")
@ -227,14 +231,11 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error {
log.Println("retrieving remote peers")
peers, hasGateway, gateways, err := server.GetPeers(node.MacAddress, cfg.Network, cfg.Server.GRPCAddress, node.IsDualStack == "yes", node.IsIngressGateway == "yes")
if err != nil {
log.Println("failed to retrieve peers")
return err
}
err = wireguard.StorePrivKey(privateKey, cfg.Network)
if err != nil {
if err != nil && !database.IsEmptyRecord(err) {
log.Println("failed to retrieve peers", err)
return err
}
log.Println("starting wireguard")
err = wireguard.InitWireguard(&node, privateKey, peers, hasGateway, gateways)
if err != nil {