mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-16 13:51:42 +08:00
massive number of changes to schema and error handling.
This commit is contained in:
@@ -16,7 +16,7 @@ import (
|
||||
|
||||
)
|
||||
|
||||
func GetPeersList(groupName string) ([]models.PeersResponse, error) {
|
||||
func GetPeersList(networkName string) ([]models.PeersResponse, error) {
|
||||
|
||||
var peers []models.PeersResponse
|
||||
|
||||
@@ -25,8 +25,8 @@ func GetPeersList(groupName string) ([]models.PeersResponse, error) {
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
|
||||
//Get all nodes in the relevant group which are NOT in pending state
|
||||
filter := bson.M{"group": groupName, "ispending": false}
|
||||
//Get all nodes in the relevant network which are NOT in pending state
|
||||
filter := bson.M{"network": networkName, "ispending": false}
|
||||
cur, err := collection.Find(ctx, filter)
|
||||
|
||||
if err != nil {
|
||||
@@ -59,18 +59,18 @@ func GetPeersList(groupName string) ([]models.PeersResponse, error) {
|
||||
}
|
||||
|
||||
|
||||
func ValidateNode(operation string, groupName string, node models.Node) error {
|
||||
func ValidateNode(operation string, networkName string, node models.Node) error {
|
||||
|
||||
v := validator.New()
|
||||
|
||||
_ = v.RegisterValidation("endpoint_check", func(fl validator.FieldLevel) bool {
|
||||
//var isFieldUnique bool = functions.IsFieldUnique(groupName, "endpoint", node.Endpoint)
|
||||
//var isFieldUnique bool = functions.IsFieldUnique(networkName, "endpoint", node.Endpoint)
|
||||
isIpv4 := functions.IsIpv4Net(node.Endpoint)
|
||||
notEmptyCheck := node.Endpoint != ""
|
||||
return (notEmptyCheck && isIpv4) || operation == "update"
|
||||
})
|
||||
_ = v.RegisterValidation("localaddress_check", func(fl validator.FieldLevel) bool {
|
||||
//var isFieldUnique bool = functions.IsFieldUnique(groupName, "endpoint", node.Endpoint)
|
||||
//var isFieldUnique bool = functions.IsFieldUnique(networkName, "endpoint", node.Endpoint)
|
||||
isIpv4 := functions.IsIpv4Net(node.LocalAddress)
|
||||
notEmptyCheck := node.LocalAddress != ""
|
||||
return (notEmptyCheck && isIpv4) || operation == "update"
|
||||
@@ -78,7 +78,7 @@ func ValidateNode(operation string, groupName string, node models.Node) error {
|
||||
|
||||
|
||||
_ = v.RegisterValidation("macaddress_unique", func(fl validator.FieldLevel) bool {
|
||||
var isFieldUnique bool = functions.IsFieldUnique(groupName, "macaddress", node.MacAddress)
|
||||
var isFieldUnique bool = functions.IsFieldUnique(networkName, "macaddress", node.MacAddress)
|
||||
return isFieldUnique || operation == "update"
|
||||
})
|
||||
|
||||
@@ -92,8 +92,8 @@ func ValidateNode(operation string, groupName string, node models.Node) error {
|
||||
return isvalid
|
||||
})
|
||||
|
||||
_ = v.RegisterValidation("group_exists", func(fl validator.FieldLevel) bool {
|
||||
_, err := node.GetGroup()
|
||||
_ = v.RegisterValidation("network_exists", func(fl validator.FieldLevel) bool {
|
||||
_, err := node.GetNetwork()
|
||||
return err == nil
|
||||
})
|
||||
_ = v.RegisterValidation("pubkey_check", func(fl validator.FieldLevel) bool {
|
||||
@@ -122,12 +122,12 @@ func UpdateNode(nodechange models.Node, node models.Node) (models.Node, error) {
|
||||
//Question: Is there a better way of doing this than a bunch of "if" statements? probably...
|
||||
//Eventually, lets have a better way to check if any of the fields are filled out...
|
||||
queryMac := node.MacAddress
|
||||
queryGroup := node.Group
|
||||
notifygroup := false
|
||||
queryNetwork := node.Network
|
||||
notifynetwork := false
|
||||
|
||||
if nodechange.Address != "" {
|
||||
node.Address = nodechange.Address
|
||||
notifygroup = true
|
||||
notifynetwork = true
|
||||
}
|
||||
if nodechange.Name != "" {
|
||||
node.Name = nodechange.Name
|
||||
@@ -155,7 +155,7 @@ func UpdateNode(nodechange models.Node, node models.Node) (models.Node, error) {
|
||||
}
|
||||
if nodechange.Endpoint != "" {
|
||||
node.Endpoint = nodechange.Endpoint
|
||||
notifygroup = true
|
||||
notifynetwork = true
|
||||
}
|
||||
if nodechange.SaveConfig != nil {
|
||||
node.SaveConfig = nodechange.SaveConfig
|
||||
@@ -180,7 +180,7 @@ func UpdateNode(nodechange models.Node, node models.Node) (models.Node, error) {
|
||||
if nodechange.PublicKey != "" {
|
||||
node.PublicKey = nodechange.PublicKey
|
||||
node.KeyUpdateTimeStamp = time.Now().Unix()
|
||||
notifygroup = true
|
||||
notifynetwork = true
|
||||
}
|
||||
|
||||
//collection := mongoconn.ConnectDB()
|
||||
@@ -189,7 +189,7 @@ func UpdateNode(nodechange models.Node, node models.Node) (models.Node, error) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
|
||||
// Create filter
|
||||
filter := bson.M{"macaddress": queryMac, "group": queryGroup}
|
||||
filter := bson.M{"macaddress": queryMac, "network": queryNetwork}
|
||||
|
||||
node.SetLastModified()
|
||||
|
||||
@@ -221,24 +221,24 @@ func UpdateNode(nodechange models.Node, node models.Node) (models.Node, error) {
|
||||
return nodeupdate, errN
|
||||
}
|
||||
|
||||
returnnode, errN := GetNode(node.MacAddress, node.Group)
|
||||
returnnode, errN := GetNode(node.MacAddress, node.Network)
|
||||
|
||||
defer cancel()
|
||||
|
||||
if notifygroup {
|
||||
errN = SetGroupNodesLastModified(node.Group)
|
||||
if notifynetwork {
|
||||
errN = SetNetworkNodesLastModified(node.Network)
|
||||
}
|
||||
|
||||
return returnnode, errN
|
||||
}
|
||||
|
||||
func DeleteNode(macaddress string, group string) (bool, error) {
|
||||
func DeleteNode(macaddress string, network string) (bool, error) {
|
||||
|
||||
deleted := false
|
||||
|
||||
collection := mongoconn.Client.Database("netmaker").Collection("nodes")
|
||||
|
||||
filter := bson.M{"macaddress": macaddress, "group": group}
|
||||
filter := bson.M{"macaddress": macaddress, "network": network}
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
|
||||
@@ -252,13 +252,13 @@ func DeleteNode(macaddress string, group string) (bool, error) {
|
||||
|
||||
defer cancel()
|
||||
|
||||
err = SetGroupNodesLastModified(group)
|
||||
fmt.Println("Deleted node " + macaddress + " from group " + group)
|
||||
err = SetNetworkNodesLastModified(network)
|
||||
fmt.Println("Deleted node " + macaddress + " from network " + network)
|
||||
|
||||
return deleted, err
|
||||
}
|
||||
|
||||
func GetNode(macaddress string, group string) (models.Node, error) {
|
||||
func GetNode(macaddress string, network string) (models.Node, error) {
|
||||
|
||||
var node models.Node
|
||||
|
||||
@@ -266,7 +266,7 @@ func GetNode(macaddress string, group string) (models.Node, error) {
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
|
||||
filter := bson.M{"macaddress": macaddress, "group": group}
|
||||
filter := bson.M{"macaddress": macaddress, "network": network}
|
||||
err := collection.FindOne(ctx, filter, options.FindOne().SetProjection(bson.M{"_id": 0})).Decode(&node)
|
||||
|
||||
defer cancel()
|
||||
@@ -274,7 +274,7 @@ func GetNode(macaddress string, group string) (models.Node, error) {
|
||||
return node, err
|
||||
}
|
||||
|
||||
func CreateNode(node models.Node, groupName string) (models.Node, error) {
|
||||
func CreateNode(node models.Node, networkName string) (models.Node, error) {
|
||||
|
||||
//encrypt that password so we never see it again
|
||||
hash, err := bcrypt.GenerateFromPassword([]byte(node.Password), 5)
|
||||
@@ -286,7 +286,7 @@ func CreateNode(node models.Node, groupName string) (models.Node, error) {
|
||||
node.Password = string(hash)
|
||||
|
||||
|
||||
node.Group = groupName
|
||||
node.Network = networkName
|
||||
|
||||
//node.SetDefaults()
|
||||
//Umm, why am I doing this again?
|
||||
@@ -296,9 +296,9 @@ func CreateNode(node models.Node, groupName string) (models.Node, error) {
|
||||
node.SetDefaults()
|
||||
|
||||
//Another DB call here...Inefficient
|
||||
//Anyways, this scrolls through all the IP Addresses in the group range and checks against nodes
|
||||
//Anyways, this scrolls through all the IP Addresses in the network range and checks against nodes
|
||||
//until one is open and then returns it
|
||||
node.Address, err = functions.UniqueAddress(groupName)
|
||||
node.Address, err = functions.UniqueAddress(networkName)
|
||||
|
||||
if err != nil {/*
|
||||
errorResponse := models.ErrorResponse{
|
||||
@@ -317,7 +317,7 @@ func CreateNode(node models.Node, groupName string) (models.Node, error) {
|
||||
node.KeyUpdateTimeStamp = time.Now().Unix()
|
||||
|
||||
//Create a JWT for the node
|
||||
tokenString, _ := functions.CreateJWT(node.MacAddress, groupName)
|
||||
tokenString, _ := functions.CreateJWT(node.MacAddress, networkName)
|
||||
|
||||
if tokenString == "" {
|
||||
//returnErrorResponse(w, r, errorResponse)
|
||||
@@ -341,26 +341,26 @@ func CreateNode(node models.Node, groupName string) (models.Node, error) {
|
||||
//return response for if node is pending
|
||||
if !node.IsPending {
|
||||
|
||||
functions.DecrimentKey(node.Group, node.AccessKey)
|
||||
functions.DecrimentKey(node.Network, node.AccessKey)
|
||||
|
||||
}
|
||||
|
||||
SetGroupNodesLastModified(node.Group)
|
||||
SetNetworkNodesLastModified(node.Network)
|
||||
|
||||
return node, err
|
||||
}
|
||||
|
||||
func NodeCheckIn(node models.Node, groupName string) (models.CheckInResponse, error) {
|
||||
func NodeCheckIn(node models.Node, networkName string) (models.CheckInResponse, error) {
|
||||
|
||||
var response models.CheckInResponse
|
||||
|
||||
parentgroup, err := functions.GetParentGroup(groupName)
|
||||
parentnetwork, err := functions.GetParentNetwork(networkName)
|
||||
if err != nil{
|
||||
err = fmt.Errorf("%w; Couldnt retrieve Group " + groupName + ": ", err)
|
||||
err = fmt.Errorf("%w; Couldnt retrieve Network " + networkName + ": ", err)
|
||||
return response, err
|
||||
}
|
||||
|
||||
parentnode, err := functions.GetNodeByMacAddress(groupName, node.MacAddress)
|
||||
parentnode, err := functions.GetNodeByMacAddress(networkName, node.MacAddress)
|
||||
if err != nil{
|
||||
err = fmt.Errorf("%w; Couldnt Get Node " + node.MacAddress, err)
|
||||
return response, err
|
||||
@@ -371,9 +371,9 @@ func NodeCheckIn(node models.Node, groupName string) (models.CheckInResponse, er
|
||||
return response, err
|
||||
}
|
||||
|
||||
grouplm := parentgroup.GroupLastModified
|
||||
peerslm := parentgroup.NodesLastModified
|
||||
gkeyupdate := parentgroup.KeyUpdateTimeStamp
|
||||
networklm := parentnetwork.NetworkLastModified
|
||||
peerslm := parentnetwork.NodesLastModified
|
||||
gkeyupdate := parentnetwork.KeyUpdateTimeStamp
|
||||
nkeyupdate := parentnode.KeyUpdateTimeStamp
|
||||
peerlistlm := parentnode.LastPeerUpdate
|
||||
parentnodelm := parentnode.LastModified
|
||||
@@ -383,7 +383,7 @@ func NodeCheckIn(node models.Node, groupName string) (models.CheckInResponse, er
|
||||
response.NeedConfigUpdate = true
|
||||
}
|
||||
|
||||
if parentnodelm < grouplm {
|
||||
if parentnodelm < networklm {
|
||||
response.NeedConfigUpdate = true
|
||||
}
|
||||
if peerlistlm < peerslm {
|
||||
@@ -394,7 +394,7 @@ func NodeCheckIn(node models.Node, groupName string) (models.CheckInResponse, er
|
||||
}
|
||||
if time.Now().Unix() > parentnode.ExpirationDateTime {
|
||||
response.NeedDelete = true
|
||||
_, err = DeleteNode(node.MacAddress, groupName)
|
||||
_, err = DeleteNode(node.MacAddress, networkName)
|
||||
} else {
|
||||
err = TimestampNode(parentnode, true, false, false)
|
||||
|
||||
@@ -408,16 +408,16 @@ func NodeCheckIn(node models.Node, groupName string) (models.CheckInResponse, er
|
||||
return response, err
|
||||
}
|
||||
|
||||
func SetGroupNodesLastModified(groupName string) error {
|
||||
func SetNetworkNodesLastModified(networkName string) error {
|
||||
|
||||
timestamp := time.Now().Unix()
|
||||
|
||||
collection := mongoconn.Client.Database("netmaker").Collection("groups")
|
||||
collection := mongoconn.Client.Database("netmaker").Collection("networks")
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
|
||||
// Create filter
|
||||
filter := bson.M{"nameid": groupName}
|
||||
filter := bson.M{"netid": networkName}
|
||||
|
||||
// prepare update model.
|
||||
update := bson.D{
|
||||
@@ -453,7 +453,7 @@ func TimestampNode(node models.Node, updatecheckin bool, updatepeers bool, updat
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
|
||||
// Create filter
|
||||
filter := bson.M{"macaddress": node.MacAddress, "group": node.Group}
|
||||
filter := bson.M{"macaddress": node.MacAddress, "network": node.Network}
|
||||
|
||||
// prepare update model.
|
||||
update := bson.D{
|
||||
|
Reference in New Issue
Block a user