From 30c7e8b217830a42f005fd9f080463861c81fd4c Mon Sep 17 00:00:00 2001 From: "Matthew R. Kasun" Date: Thu, 12 Jan 2023 10:27:24 -0500 Subject: [PATCH] refactor migrate for new models --- controllers/node.go | 96 ++++++++++++--------------------------------- main.go | 2 +- 2 files changed, 25 insertions(+), 73 deletions(-) diff --git a/controllers/node.go b/controllers/node.go index 4ea427ad..be6af3ce 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "fmt" + "io" "net/http" "strings" @@ -26,7 +27,7 @@ func nodeHandlers(r *mux.Router) { r.HandleFunc("/api/nodes/{network}", authorize(false, true, "network", http.HandlerFunc(getNetworkNodes))).Methods(http.MethodGet) r.HandleFunc("/api/nodes/{network}/{nodeid}", authorize(true, true, "node", http.HandlerFunc(getNode))).Methods(http.MethodGet) r.HandleFunc("/api/nodes/{network}/{nodeid}", authorize(false, true, "node", http.HandlerFunc(updateNode))).Methods(http.MethodPut) - r.HandleFunc("/api/nodes/{network}/{nodeid}/migrate", authorize(true, true, "node", http.HandlerFunc(nodeNodeUpdate))).Methods("PUT") + r.HandleFunc("/api/nodes/{network}/{nodeid}/migrate", authorize(true, true, "node", http.HandlerFunc(migrate))).Methods("PUT") r.HandleFunc("/api/nodes/{network}/{nodeid}", authorize(true, true, "node", http.HandlerFunc(deleteNode))).Methods(http.MethodDelete) r.HandleFunc("/api/nodes/{network}/{nodeid}/createrelay", authorize(false, true, "user", http.HandlerFunc(createRelay))).Methods(http.MethodPost) r.HandleFunc("/api/nodes/{network}/{nodeid}/deleterelay", authorize(false, true, "user", http.HandlerFunc(deleteRelay))).Methods(http.MethodDelete) @@ -841,88 +842,39 @@ func deleteIngressGateway(w http.ResponseWriter, r *http.Request) { // oauth // // Responses: -// 200: nodeResponse -func nodeNodeUpdate(w http.ResponseWriter, r *http.Request) { - // should only be used by nodes - w.Header().Set("Content-Type", "application/json") - - var params = mux.Vars(r) - - //start here - nodeid := params["nodeid"] - currentNode, err := logic.GetNodeByID(nodeid) - if err != nil { - logger.Log(0, - fmt.Sprintf("error fetching node [ %s ] info: %v during migrate", nodeid, err)) - logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) - return - } - - var newNode models.Node +// 200: nodeJoinResponse +func migrate(w http.ResponseWriter, r *http.Request) { // we decode our body request params - err = json.NewDecoder(r.Body).Decode(&newNode) + data := models.JoinData{} + err := json.NewDecoder(r.Body).Decode(&data) if err != nil { logger.Log(0, r.Header.Get("user"), "error decoding request body: ", err.Error()) logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest")) return } - relayupdate := false - if currentNode.IsRelay && len(newNode.RelayAddrs) > 0 { - if len(newNode.RelayAddrs) != len(currentNode.RelayAddrs) { - relayupdate = true - } else { - for i, addr := range newNode.RelayAddrs { - if addr != currentNode.RelayAddrs[i] { - relayupdate = true - } - } - } - } - relayedUpdate := false - if currentNode.IsRelayed && (currentNode.Address.String() != newNode.Address.String() || currentNode.Address6.String() != newNode.Address6.String()) { - relayedUpdate = true - } - - if !servercfg.GetRce() { - newNode.PostDown = currentNode.PostDown - newNode.PostUp = currentNode.PostUp - } - - ifaceDelta := logic.IfaceDelta(¤tNode, &newNode) - - if ifaceDelta && servercfg.Is_EE { - if err = logic.EnterpriseResetAllPeersFailovers(currentNode.ID.String(), currentNode.Network); err != nil { - logger.Log(0, "failed to reset failover lists during node update for node", currentNode.ID.String(), currentNode.Network) - } - } - - err = logic.UpdateNode(¤tNode, &newNode) + params := mux.Vars(r) + network, err := logic.GetNetwork(params["network"]) if err != nil { - logger.Log(0, r.Header.Get("user"), - fmt.Sprintf("failed to update node info [ %s ] info: %v", nodeid, err)) - logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) + logger.Log(0, "error retrieving network: ", err.Error()) + logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest")) return } - if relayupdate { - updatenodes := logic.UpdateRelay(currentNode.Network, currentNode.RelayAddrs, newNode.RelayAddrs) - if len(updatenodes) > 0 { - for _, relayedNode := range updatenodes { - runUpdates(&relayedNode, false) - } - } + key, err := logic.CreateAccessKey(models.AccessKey{}, network) + if err != nil { + logger.Log(0, "error creating key: ", err.Error()) + logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest")) + return } - if relayedUpdate { - updateRelay(¤tNode, &newNode) + data.Key = key.Value + payload, err := json.Marshal(data) + if err != nil { + logger.Log(0, "error encoding data: ", err.Error()) + logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest")) + return } - if servercfg.IsDNSMode() { - logic.SetDNS() - } - - logger.Log(1, r.Header.Get("user"), "updated node", currentNode.ID.String(), "on network", currentNode.Network) - w.WriteHeader(http.StatusOK) - json.NewEncoder(w).Encode(newNode) - - runUpdates(&newNode, ifaceDelta) + r.Body = io.NopCloser(strings.NewReader(string(payload))) + r.ContentLength = int64(len(string(payload))) + createNode(w, r) } // swagger:route PUT /api/nodes/{network}/{nodeid} nodes updateNode diff --git a/main.go b/main.go index 8d71333d..1335ee2c 100644 --- a/main.go +++ b/main.go @@ -28,7 +28,7 @@ import ( stunserver "github.com/gravitl/netmaker/stun-server" ) -var version = "dev" +var version = "v0.18.0" // Start DB Connection and start API Request Handler func main() {