mirror of
https://github.com/gravitl/netmaker.git
synced 2025-02-26 00:53:23 +08:00
ispending bug fix and node auth fix
This commit is contained in:
parent
c799df59ce
commit
46d6899982
4 changed files with 50 additions and 41 deletions
|
@ -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.")
|
||||
}
|
||||
|
|
|
@ -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, ¤tNode)
|
||||
actionCompleted := checkNodeActions(newNode, network, servercfg, ¤tNode, cfg)
|
||||
if actionCompleted == models.NODE_DELETE {
|
||||
return errors.New("node has been removed")
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in a new issue