瀏覽代碼

various logic fixes for ingress and windows

afeiszli 3 年之前
父節點
當前提交
0a5f20a04f
共有 9 個文件被更改,包括 45 次插入29 次删除
  1. 1 1
      controllers/node.go
  2. 9 7
      controllers/node_grpc.go
  3. 0 11
      functions/helpers.go
  4. 1 0
      logic/networks.go
  5. 8 6
      logic/server.go
  6. 0 1
      main.go
  7. 11 3
      netclient/functions/daemon.go
  8. 2 0
      netclient/functions/join.go
  9. 13 0
      serverctl/serverctl.go

+ 1 - 1
controllers/node.go

@@ -608,7 +608,7 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
 }
 
 func runUpdates(node *models.Node, nodeUpdate bool) error {
-	if nodeUpdate {
+	if nodeUpdate && !isServer(node) {
 		if err := mq.NodeUpdate(node); err != nil {
 			logger.Log(1, "error publishing node update", err.Error())
 			return err

+ 9 - 7
controllers/node_grpc.go

@@ -4,10 +4,9 @@ import (
 	"context"
 	"encoding/json"
 	"errors"
-	"log"
+	"fmt"
 	"time"
 
-	"github.com/gravitl/netmaker/functions"
 	nodepb "github.com/gravitl/netmaker/grpc"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logic"
@@ -63,7 +62,6 @@ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.Object)
 	if err != nil {
 		return nil, err
 	}
-	log.Println("DELETE ME: Operating System = " + node.OS)
 	if !validKey {
 		if node.NetworkSettings.AllowManualSignUp == "yes" {
 			node.IsPending = "yes"
@@ -71,10 +69,6 @@ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.Object)
 			return nil, errors.New("invalid key, and network does not allow no-key signups")
 		}
 	}
-	unique, _ := functions.IsMacAddressUnique(node.MacAddress, node.Network)
-	if !unique {
-		return nil, errors.New("macaddress is not unique")
-	}
 
 	getServerAddrs(&node)
 
@@ -83,6 +77,14 @@ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.Object)
 		logger.Log(0, "error retrieving key: ", keyErr.Error())
 		return nil, keyErr
 	}
+	if key == nil {
+		logger.Log(0, "error: server traffic key is nil")
+		return nil, fmt.Errorf("error: server traffic key is nil")
+	}
+	if node.TrafficKeys.Mine == nil {
+		logger.Log(0, "error: node traffic key is nil")
+		return nil, fmt.Errorf("error: node traffic key is nil")
+	}
 
 	node.TrafficKeys = models.TrafficKeys{
 		Mine:   node.TrafficKeys.Mine,

+ 0 - 11
functions/helpers.go

@@ -127,17 +127,6 @@ func IsNetworkDisplayNameUnique(name string) (bool, error) {
 	return isunique, nil
 }
 
-// IsMacAddressUnique - checks if mac is unique
-func IsMacAddressUnique(macaddress string, networkName string) (bool, error) {
-
-	_, err := database.FetchRecord(database.NODES_TABLE_NAME, macaddress+"###"+networkName)
-	if err != nil {
-		return database.IsEmptyRecord(err), err
-	}
-
-	return true, nil
-}
-
 // IsKeyValidGlobal - checks if a key is valid globally
 func IsKeyValidGlobal(keyvalue string) bool {
 

+ 1 - 0
logic/networks.go

@@ -25,6 +25,7 @@ func GetNetworks() ([]models.Network, error) {
 	collection, err := database.FetchRecords(database.NETWORKS_TABLE_NAME)
 
 	if err != nil {
+		networks = make([]models.Network, 0)
 		return networks, err
 	}
 

+ 8 - 6
logic/server.go

@@ -45,6 +45,7 @@ func ServerJoin(networkSettings *models.Network) (models.Node, error) {
 		IsLocal:      networkSettings.IsLocal,
 		LocalRange:   networkSettings.LocalRange,
 		OS:           runtime.GOOS,
+		Version:      servercfg.Version,
 	}
 
 	SetNodeDefaults(node)
@@ -140,11 +141,11 @@ func ServerJoin(networkSettings *models.Network) (models.Node, error) {
 // ServerUpdate - updates the server
 // replaces legacy Checkin code
 func ServerUpdate(serverNode *models.Node, ifaceDelta bool) error {
-	var err = serverPull(serverNode, ifaceDelta)
+	var err = ServerPull(serverNode, ifaceDelta)
 	if isDeleteError(err) {
 		return DeleteNodeByID(serverNode, true)
 	} else if err != nil && !ifaceDelta {
-		err = serverPull(serverNode, true)
+		err = ServerPull(serverNode, true)
 		if err != nil {
 			return err
 		}
@@ -366,9 +367,8 @@ func checkNodeActions(node *models.Node) string {
 	return ""
 }
 
-// == Private ==
-
-func serverPull(serverNode *models.Node, ifaceDelta bool) error {
+// ServerPull - pull latest from DB and apply
+func ServerPull(serverNode *models.Node, ifaceDelta bool) error {
 
 	var err error
 	if serverNode.IPForwarding == "yes" {
@@ -399,7 +399,7 @@ func serverPull(serverNode *models.Node, ifaceDelta bool) error {
 	} else {
 		if err = setWGConfig(serverNode, true); err != nil {
 			if errors.Is(err, os.ErrNotExist) {
-				return serverPull(serverNode, true)
+				return ServerPull(serverNode, true)
 			} else {
 				return err
 			}
@@ -409,6 +409,8 @@ func serverPull(serverNode *models.Node, ifaceDelta bool) error {
 	return nil
 }
 
+// private functions
+
 func getServerLocalIP(networkSettings *models.Network) (string, error) {
 
 	var networkCIDR = networkSettings.LocalRange

+ 0 - 1
main.go

@@ -82,7 +82,6 @@ func initialize() { // Client Mode Prereq Check
 
 		}
 	}
-
 	if servercfg.IsDNSMode() {
 		err := functions.SetDNSDir()
 		if err != nil {

+ 11 - 3
netclient/functions/daemon.go

@@ -46,7 +46,10 @@ func insert(network, which, cache string) {
 func read(network, which string) string {
 	val, isok := messageCache.Load(fmt.Sprintf("%s%s", network, which))
 	if isok {
-		var readMessage = val.(cachedMessage)                        // fetch current cached message
+		var readMessage = val.(cachedMessage) // fetch current cached message
+		if readMessage.LastSeen.IsZero() {
+			return ""
+		}
 		if time.Now().After(readMessage.LastSeen.Add(time.Minute)) { // check if message has been there over a minute
 			messageCache.Delete(fmt.Sprintf("%s%s", network, which)) // remove old message if expired
 			ncutils.Log("cached message expired")
@@ -92,12 +95,14 @@ func SetupMQTT(cfg *config.ClientConfig) mqtt.Client {
 	tperiod := time.Now().Add(12 * time.Second)
 	for {
 		//if after 12 seconds, try a gRPC pull on the last try
+		var exitnow bool
 		if time.Now().After(tperiod) {
+			exitnow = true
 			ncutils.Log("running pull for " + cfg.Node.Network)
 			_, err := Pull(cfg.Node.Network, true)
 			if err != nil {
 				ncutils.Log("could not run pull, exiting " + cfg.Node.Network + " setup: " + err.Error())
-				return client
+				continue
 			}
 			time.Sleep(2 * time.Second)
 		}
@@ -105,11 +110,14 @@ func SetupMQTT(cfg *config.ClientConfig) mqtt.Client {
 			ncutils.Log("unable to connect to broker, retrying ...")
 			if time.Now().After(tperiod) {
 				ncutils.Log("could not connect to broker, exiting " + cfg.Node.Network + " setup: " + token.Error().Error())
-				return client
+				continue
 			}
 		} else {
 			break
 		}
+		if exitnow {
+			break
+		}
 		time.Sleep(2 * time.Second)
 	}
 	return client

+ 2 - 0
netclient/functions/join.go

@@ -60,6 +60,8 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error {
 	trafficPubKeyBytes, err := ncutils.ConvertKeyToBytes(trafficPubKey)
 	if err != nil {
 		return err
+	} else if trafficPubKeyBytes == nil {
+		return fmt.Errorf("traffic key is nil")
 	}
 
 	cfg.Node.TrafficKeys.Mine = trafficPubKeyBytes

+ 13 - 0
serverctl/serverctl.go

@@ -2,6 +2,7 @@ package serverctl
 
 import (
 	"errors"
+	"fmt"
 	"net"
 	"os"
 	"strings"
@@ -23,6 +24,18 @@ func InitServerNetclient() error {
 		logger.Log(1, "could not find or create", netclientDir)
 		return err
 	}
+	networks, err := logic.GetNetworks()
+	if err != nil {
+		return err
+	}
+	for _, network := range networks {
+		node, err := logic.GetNetworkServerLocal(network.NetID)
+		if err == nil {
+			if err = logic.ServerPull(&node, true); err != nil {
+				logger.Log(1, fmt.Sprintf("error pulling server settings for network %s: %s", network.NetID, err.Error()))
+			}
+		}
+	}
 	return nil
 }