mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-06 05:04:27 +08:00
adding logic for key checks, OS on server
This commit is contained in:
parent
3248717585
commit
2cbf08ad1e
7 changed files with 42 additions and 26 deletions
|
@ -2,7 +2,6 @@ package controller
|
|||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
@ -610,10 +609,7 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
func runUpdates(node *models.Node, nodeUpdate bool) error {
|
||||
//don't publish to server node
|
||||
if node.IsServer == "yes" {
|
||||
return errors.New("attempt to publish to server node")
|
||||
}
|
||||
if nodeUpdate {
|
||||
if nodeUpdate && !isServer(node) {
|
||||
if err := mq.NodeUpdate(node); err != nil {
|
||||
logger.Log(1, "error publishing node update", err.Error())
|
||||
return err
|
||||
|
|
|
@ -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,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")
|
||||
}
|
||||
}
|
||||
unique, _ := functions.IsMacAddressUnique(node.MacAddress, node.Network)
|
||||
if !unique {
|
||||
return nil, errors.New("macaddress is not unique")
|
||||
}
|
||||
|
||||
getServerAddrs(&node)
|
||||
|
||||
key, keyErr := logic.RetrievePublicTrafficKey()
|
||||
|
@ -84,6 +77,15 @@ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.Object)
|
|||
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,
|
||||
Server: key,
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -175,8 +175,10 @@ func ValidateNode(node *models.Node, isUpdate bool) error {
|
|||
if isUpdate {
|
||||
return true
|
||||
}
|
||||
unique, _ := isMacAddressUnique(node.MacAddress, node.Network)
|
||||
|
||||
isFieldUnique, _ := IsNodeIDUnique(node)
|
||||
return isFieldUnique
|
||||
return isFieldUnique && unique
|
||||
})
|
||||
_ = v.RegisterValidation("network_exists", func(fl validator.FieldLevel) bool {
|
||||
_, err := GetNetworkByNode(node)
|
||||
|
@ -592,3 +594,23 @@ func validateServer(currentNode, newNode *models.Node) bool {
|
|||
newNode.ListenPort == currentNode.ListenPort &&
|
||||
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",
|
||||
IsLocal: networkSettings.IsLocal,
|
||||
LocalRange: networkSettings.LocalRange,
|
||||
OS: runtime.GOOS,
|
||||
Version: servercfg.Version,
|
||||
}
|
||||
|
||||
SetNodeDefaults(node)
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue