mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-05 08:47:35 +08:00
adding logic for key checks, OS on server
This commit is contained in:
@@ -2,7 +2,6 @@ package controller
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -610,10 +609,7 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
func runUpdates(node *models.Node, nodeUpdate bool) error {
|
func runUpdates(node *models.Node, nodeUpdate bool) error {
|
||||||
//don't publish to server node
|
//don't publish to server node
|
||||||
if node.IsServer == "yes" {
|
if nodeUpdate && !isServer(node) {
|
||||||
return errors.New("attempt to publish to server node")
|
|
||||||
}
|
|
||||||
if nodeUpdate {
|
|
||||||
if err := mq.NodeUpdate(node); err != nil {
|
if err := mq.NodeUpdate(node); err != nil {
|
||||||
logger.Log(1, "error publishing node update", err.Error())
|
logger.Log(1, "error publishing node update", err.Error())
|
||||||
return err
|
return err
|
||||||
|
@@ -4,10 +4,9 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"log"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gravitl/netmaker/functions"
|
|
||||||
nodepb "github.com/gravitl/netmaker/grpc"
|
nodepb "github.com/gravitl/netmaker/grpc"
|
||||||
"github.com/gravitl/netmaker/logger"
|
"github.com/gravitl/netmaker/logger"
|
||||||
"github.com/gravitl/netmaker/logic"
|
"github.com/gravitl/netmaker/logic"
|
||||||
@@ -63,7 +62,6 @@ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.Object)
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
log.Println("DELETE ME: Operating System = " + node.OS)
|
|
||||||
if !validKey {
|
if !validKey {
|
||||||
if node.NetworkSettings.AllowManualSignUp == "yes" {
|
if node.NetworkSettings.AllowManualSignUp == "yes" {
|
||||||
node.IsPending = "yes"
|
node.IsPending = "yes"
|
||||||
@@ -71,11 +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")
|
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)
|
getServerAddrs(&node)
|
||||||
|
|
||||||
key, keyErr := logic.RetrievePublicTrafficKey()
|
key, keyErr := logic.RetrievePublicTrafficKey()
|
||||||
@@ -84,6 +77,15 @@ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.Object)
|
|||||||
return nil, keyErr
|
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{
|
node.TrafficKeys = models.TrafficKeys{
|
||||||
Mine: node.TrafficKeys.Mine,
|
Mine: node.TrafficKeys.Mine,
|
||||||
Server: key,
|
Server: key,
|
||||||
|
@@ -127,17 +127,6 @@ func IsNetworkDisplayNameUnique(name string) (bool, error) {
|
|||||||
return isunique, nil
|
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
|
// IsKeyValidGlobal - checks if a key is valid globally
|
||||||
func IsKeyValidGlobal(keyvalue string) bool {
|
func IsKeyValidGlobal(keyvalue string) bool {
|
||||||
|
|
||||||
|
@@ -175,8 +175,10 @@ func ValidateNode(node *models.Node, isUpdate bool) error {
|
|||||||
if isUpdate {
|
if isUpdate {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
unique, _ := isMacAddressUnique(node.MacAddress, node.Network)
|
||||||
|
|
||||||
isFieldUnique, _ := IsNodeIDUnique(node)
|
isFieldUnique, _ := IsNodeIDUnique(node)
|
||||||
return isFieldUnique
|
return isFieldUnique && unique
|
||||||
})
|
})
|
||||||
_ = v.RegisterValidation("network_exists", func(fl validator.FieldLevel) bool {
|
_ = v.RegisterValidation("network_exists", func(fl validator.FieldLevel) bool {
|
||||||
_, err := GetNetworkByNode(node)
|
_, err := GetNetworkByNode(node)
|
||||||
@@ -592,3 +594,23 @@ func validateServer(currentNode, newNode *models.Node) bool {
|
|||||||
newNode.ListenPort == currentNode.ListenPort &&
|
newNode.ListenPort == currentNode.ListenPort &&
|
||||||
newNode.IsServer == "yes")
|
newNode.IsServer == "yes")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// isMacAddressUnique - checks if mac is unique
|
||||||
|
func isMacAddressUnique(macaddress string, networkName string) (bool, error) {
|
||||||
|
|
||||||
|
isunique := true
|
||||||
|
|
||||||
|
nodes, err := GetNetworkNodes(networkName)
|
||||||
|
if err != nil {
|
||||||
|
return database.IsEmptyRecord(err), err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, node := range nodes {
|
||||||
|
|
||||||
|
if node.MacAddress == macaddress {
|
||||||
|
isunique = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return isunique, nil
|
||||||
|
}
|
||||||
|
@@ -44,6 +44,8 @@ func ServerJoin(networkSettings *models.Network) (models.Node, error) {
|
|||||||
UDPHolePunch: "no",
|
UDPHolePunch: "no",
|
||||||
IsLocal: networkSettings.IsLocal,
|
IsLocal: networkSettings.IsLocal,
|
||||||
LocalRange: networkSettings.LocalRange,
|
LocalRange: networkSettings.LocalRange,
|
||||||
|
OS: runtime.GOOS,
|
||||||
|
Version: servercfg.Version,
|
||||||
}
|
}
|
||||||
|
|
||||||
SetNodeDefaults(node)
|
SetNodeDefaults(node)
|
||||||
|
@@ -47,6 +47,9 @@ func read(network, which string) string {
|
|||||||
val, isok := messageCache.Load(fmt.Sprintf("%s%s", network, which))
|
val, isok := messageCache.Load(fmt.Sprintf("%s%s", network, which))
|
||||||
if isok {
|
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
|
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
|
messageCache.Delete(fmt.Sprintf("%s%s", network, which)) // remove old message if expired
|
||||||
ncutils.Log("cached message expired")
|
ncutils.Log("cached message expired")
|
||||||
|
@@ -60,6 +60,8 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error {
|
|||||||
trafficPubKeyBytes, err := ncutils.ConvertKeyToBytes(trafficPubKey)
|
trafficPubKeyBytes, err := ncutils.ConvertKeyToBytes(trafficPubKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
} else if trafficPubKeyBytes == nil {
|
||||||
|
return fmt.Errorf("traffic key is nil")
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg.Node.TrafficKeys.Mine = trafficPubKeyBytes
|
cfg.Node.TrafficKeys.Mine = trafficPubKeyBytes
|
||||||
|
Reference in New Issue
Block a user