added ability to remove legacy nodes

This commit is contained in:
0xdcarns 2023-03-07 09:58:48 -05:00
parent 8f05238875
commit 692441279b
4 changed files with 89 additions and 2 deletions

View file

@ -27,6 +27,7 @@ var HttpHandlers = []interface{}{
loggerHandlers,
hostHandlers,
enrollmentKeyHandlers,
legacyHandlers,
}
// HandleRESTRequests - handles the rest requests

35
controllers/legacy.go Normal file
View file

@ -0,0 +1,35 @@
package controller
import (
"net/http"
"github.com/gorilla/mux"
"github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/logic"
)
func legacyHandlers(r *mux.Router) {
r.HandleFunc("/api/v1/legacy/nodes", logic.SecurityCheck(true, http.HandlerFunc(wipeLegacyNodes))).Methods(http.MethodDelete)
}
// swagger:route DELETE /api/v1/legacy/nodes nodes wipeLegacyNodes
//
// Delete all legacy nodes from DB.
//
// Schemes: https
//
// Security:
// oauth
//
// Responses:
// 200: wipeLegacyNodesResponse
func wipeLegacyNodes(w http.ResponseWriter, r *http.Request) {
// Set header
w.Header().Set("Content-Type", "application/json")
if err := logic.RemoveAllLegacyNodes(); err != nil {
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
logger.Log(0, "error occurred when removing legacy nodes", err.Error())
}
logger.Log(0, r.Header.Get("user"), "wiped legacy nodes")
logic.ReturnSuccessResponse(w, r, "wiped all legacy nodes")
}

View file

@ -975,8 +975,13 @@ func deleteNode(w http.ResponseWriter, r *http.Request) {
fromNode := r.Header.Get("requestfrom") == "node"
node, err := logic.GetNodeByID(nodeid)
if err != nil {
logger.Log(0, "error retrieving node to delete", err.Error())
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
if logic.CheckAndRemoveLegacyNode(nodeid) {
logger.Log(0, "removed legacy node", nodeid)
logic.ReturnSuccessResponse(w, r, nodeid+" deleted.")
} else {
logger.Log(0, "error retrieving node to delete", err.Error())
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
}
return
}
if r.Header.Get("ismaster") != "yes" {

46
logic/legacy.go Normal file
View file

@ -0,0 +1,46 @@
package logic
import (
"encoding/json"
"github.com/gravitl/netmaker/database"
"github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/models"
)
// IsLegacyNode - checks if a node is legacy or not
func IsLegacyNode(nodeID string) bool {
record, err := database.FetchRecord(database.NODES_TABLE_NAME, nodeID)
if err != nil {
return false
}
var currentNode models.Node
var legacyNode models.LegacyNode
currentNodeErr := json.Unmarshal([]byte(record), &currentNode)
legacyNodeErr := json.Unmarshal([]byte(record), &legacyNode)
return currentNodeErr != nil && legacyNodeErr == nil
}
// CheckAndRemoveLegacyNode - checks for legacy node and removes
func CheckAndRemoveLegacyNode(nodeID string) bool {
if IsLegacyNode(nodeID) {
if err := database.DeleteRecord(database.NODES_TABLE_NAME, nodeID); err == nil {
return true
}
}
return false
}
// RemoveAllLegacyNodes - fetches all legacy nodes from DB and removes
func RemoveAllLegacyNodes() error {
records, err := database.FetchRecords(database.NODES_TABLE_NAME)
if err != nil {
return err
}
for k := range records {
if CheckAndRemoveLegacyNode(k) {
logger.Log(0, "removed legacy node", k)
}
}
return nil
}