massive number of changes to schema and error handling.

This commit is contained in:
afeiszli
2021-04-13 00:42:35 -04:00
parent ae6fd73cce
commit 2ea497c6ff
30 changed files with 1054 additions and 1015 deletions

View File

@@ -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{