diff --git a/controllers/common.go b/controllers/common.go index ee205fde..dca70f62 100644 --- a/controllers/common.go +++ b/controllers/common.go @@ -177,12 +177,6 @@ func UpdateNode(nodechange models.Node, node models.Node) (models.Node, error) { if nodechange.MacAddress != "" { node.MacAddress = nodechange.MacAddress } - if nodechange.IsGateway != nil { - node.IsGateway = nodechange.IsGateway - } - if nodechange.GatewayRange != "" { - node.GatewayRange = nodechange.GatewayRange - } if nodechange.PublicKey != "" { node.PublicKey = nodechange.PublicKey node.KeyUpdateTimeStamp = time.Now().Unix() @@ -216,8 +210,6 @@ func UpdateNode(nodechange models.Node, node models.Node) (models.Node, error) { {"persistentkeepalive", node.PersistentKeepalive}, {"saveconfig", node.SaveConfig}, {"accesskey", node.AccessKey}, - {"isgateway", node.IsGateway}, - {"gatewayrange", node.GatewayRange}, {"interface", node.Interface}, {"lastmodified", node.LastModified}, }}, diff --git a/controllers/nodeHttpController.go b/controllers/nodeHttpController.go index 6197ecf8..692e9122 100644 --- a/controllers/nodeHttpController.go +++ b/controllers/nodeHttpController.go @@ -589,8 +589,7 @@ func createGateway(w http.ResponseWriter, r *http.Request) { var nodechange models.Node - isgateway := true - nodechange.IsGateway = &isgateway + nodechange.IsGateway = true nodechange.GatewayRange = gateway.RangeString if gateway.PostUp == "" { nodechange.PostUp = "iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o " + gateway.Interface + " -j MASQUERADE" @@ -603,20 +602,42 @@ func createGateway(w http.ResponseWriter, r *http.Request) { nodechange.PostDown = gateway.PostDown } - node, err = UpdateNode(nodechange, node) + collection := mongoconn.Client.Database("netmaker").Collection("nodes") + + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + + // Create filter + filter := bson.M{"macaddress": params["macaddress"], "network": params["network"]} + + nodechange.SetLastModified() + + // prepare update model. + update := bson.D{ + {"$set", bson.D{ + {"postup", nodechange.PostUp}, + {"preup", nodechange.PostDown}, + {"isgateway", nodechange.IsGateway}, + {"gatewayrange", nodechange.GatewayRange}, + {"lastmodified", nodechange.LastModified}, + }}, + } + var nodeupdate models.Node + + err = collection.FindOneAndUpdate(ctx, filter, update).Decode(&nodeupdate) + + defer cancel() + if err != nil { returnErrorResponse(w,r,formatError(err, "internal")) return } - err = AlertNetwork(params["networkname"]) + err = SetNetworkNodesLastModified(params["network"]) if err != nil { returnErrorResponse(w,r,formatError(err, "internal")) return } - - w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(node) } @@ -647,19 +668,42 @@ func deleteGateway(w http.ResponseWriter, r *http.Request) { var nodechange models.Node - isgateway := false - nodechange.IsGateway = &isgateway + nodechange.IsGateway = false nodechange.GatewayRange = "" nodechange.PostUp = "" nodechange.PostDown = "" - node, err = UpdateNode(nodechange, node) - if err != nil { + collection := mongoconn.Client.Database("netmaker").Collection("nodes") + + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + + // Create filter + filter := bson.M{"macaddress": params["macaddress"], "network": params["network"]} + + nodechange.SetLastModified() + + // prepare update model. + update := bson.D{ + {"$set", bson.D{ + {"postup", nodechange.PostUp}, + {"preup", nodechange.PostDown}, + {"isgateway", nodechange.IsGateway}, + {"gatewayrange", nodechange.GatewayRange}, + {"lastmodified", nodechange.LastModified}, + }}, + } + var nodeupdate models.Node + + err = collection.FindOneAndUpdate(ctx, filter, update).Decode(&nodeupdate) + + defer cancel() + + if err != nil { returnErrorResponse(w,r,formatError(err, "internal")) return } - err = AlertNetwork(params["networkname"]) + err = SetNetworkNodesLastModified(params["networkname"]) if err != nil { returnErrorResponse(w,r,formatError(err, "internal")) return diff --git a/models/node.go b/models/node.go index b8e7df8f..99dce971 100644 --- a/models/node.go +++ b/models/node.go @@ -41,7 +41,7 @@ type Node struct { Password string `json:"password" bson:"password" validate:"password_check"` Network string `json:"network" bson:"network" validate:"network_exists"` IsPending bool `json:"ispending" bson:"ispending"` - IsGateway *bool `json:"isgateway" bson:"isgateway"` + IsGateway bool `json:"isgateway" bson:"isgateway"` GatewayRange string `json:"gatewayrange" bson:"gatewayrange"` PostChanges string `json:"postchanges" bson:"postchanges"` }