diff --git a/controllers/node.go b/controllers/node.go index 637f5a3b..562b0f62 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -571,9 +571,20 @@ func createNode(w http.ResponseWriter, r *http.Request) { // consume password before hashing for mq client creation hostPassword := data.Host.HostPass data.Node.Server = servercfg.GetServer() + if err := logic.CreateHost(&data.Host); err != nil { if errors.Is(err, logic.ErrHostExists) { logger.Log(3, "host exists .. no need to create") + networks := logic.GetHostNetworks(data.Host.ID.String()) + if err := mq.ModifyClient(&mq.MqClient{ + ID: data.Host.ID.String(), + Text: data.Host.Name, + Networks: networks, + }); err != nil { + logger.Log(0, fmt.Sprintf("failed to modify DynSec client: %v", err.Error())) + logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) + return + } } else { logger.Log(0, "error creating host", err.Error()) logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest")) @@ -592,12 +603,14 @@ func createNode(w http.ResponseWriter, r *http.Request) { return } } + host, err := logic.GetHost(data.Host.ID.String()) if err != nil { logger.Log(0, r.Header.Get("user"), "failed to find host:", err.Error()) logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) return } + err = logic.AssociateNodeToHost(&data.Node, host) if err != nil { logger.Log(0, r.Header.Get("user"), @@ -1074,7 +1087,10 @@ func deleteNode(w http.ResponseWriter, r *http.Request) { } logic.ReturnSuccessResponse(w, r, nodeid+" deleted.") logger.Log(1, r.Header.Get("user"), "Deleted node", nodeid, "from network", params["network"]) - runUpdates(&node, false) + if !fromNode { + runUpdates(&node, false) + } + } func runUpdates(node *models.Node, ifaceDelta bool) { diff --git a/logic/nodes.go b/logic/nodes.go index 7152cb14..0e3a2f7f 100644 --- a/logic/nodes.go +++ b/logic/nodes.go @@ -84,10 +84,10 @@ func UpdateNode(currentNode *models.Node, newNode *models.Node) error { // DeleteNode - marks node for deletion if called by UI or deletes node if called by node func DeleteNode(node *models.Node, purge bool) error { + node.Action = models.NODE_DELETE if !purge { newnode := *node newnode.PendingDelete = true - newnode.Action = models.NODE_DELETE if err := UpdateNode(node, &newnode); err != nil { return err }