|
@@ -2,6 +2,7 @@ package controllers
|
|
|
|
|
|
import (
|
|
|
"encoding/json"
|
|
|
+ "errors"
|
|
|
"net/http"
|
|
|
|
|
|
"github.com/gorilla/mux"
|
|
@@ -18,12 +19,88 @@ type FailOverMeReq struct {
|
|
|
PeerPubKey string `json:"peer_pub_key"`
|
|
|
}
|
|
|
|
|
|
-// RelayHandlers - handle Pro Relays
|
|
|
-func FailOverHandler(r *mux.Router) {
|
|
|
- r.HandleFunc("/api/v1/host/{hostid}/failoverme", controller.Authorize(true, false, "host", http.HandlerFunc(failOverME))).Methods(http.MethodPost)
|
|
|
+// FailOverHandlers - handlers for FailOver
|
|
|
+func FailOverHandlers(r *mux.Router) {
|
|
|
+ r.HandleFunc("/api/v1/node/{nodeid}/failover", logic.SecurityCheck(true, http.HandlerFunc(createfailOver))).Methods(http.MethodPost)
|
|
|
+ r.HandleFunc("/api/v1/node/{nodeid}/failover", logic.SecurityCheck(true, http.HandlerFunc(deletefailOver))).Methods(http.MethodDelete)
|
|
|
+ r.HandleFunc("/api/v1/host/{hostid}/failover_me", controller.Authorize(true, false, "host", http.HandlerFunc(failOverME))).Methods(http.MethodPost)
|
|
|
}
|
|
|
|
|
|
-// swagger:route POST /api/host/failOverME host failOverME
|
|
|
+// swagger:route POST /api/v1/node/failover node createfailOver
|
|
|
+//
|
|
|
+// Create a relay.
|
|
|
+//
|
|
|
+// Schemes: https
|
|
|
+//
|
|
|
+// Security:
|
|
|
+// oauth
|
|
|
+//
|
|
|
+// Responses:
|
|
|
+// 200: nodeResponse
|
|
|
+func createfailOver(w http.ResponseWriter, r *http.Request) {
|
|
|
+ var params = mux.Vars(r)
|
|
|
+ nodeid := params["nodeid"]
|
|
|
+ // confirm host exists
|
|
|
+ node, err := logic.GetNodeByID(nodeid)
|
|
|
+ if err != nil {
|
|
|
+ slog.Error("failed to get node:", "error", err.Error())
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if proLogic.FailOverExists(node.Network) {
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("failover exists already in the network"), "badrequest"))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ node.IsFailOver = true
|
|
|
+ err = logic.UpsertNode(&node)
|
|
|
+ if err != nil {
|
|
|
+ slog.Error("failed to upsert node", "node", node.ID.String(), "error", err)
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ go mq.PublishPeerUpdate()
|
|
|
+ w.Header().Set("Content-Type", "application/json")
|
|
|
+ logic.ReturnSuccessResponse(w, r, "relayed successfully")
|
|
|
+}
|
|
|
+
|
|
|
+// swagger:route DELETE /api/v1/node/failover node deletefailOver
|
|
|
+//
|
|
|
+// Create a relay.
|
|
|
+//
|
|
|
+// Schemes: https
|
|
|
+//
|
|
|
+// Security:
|
|
|
+// oauth
|
|
|
+//
|
|
|
+// Responses:
|
|
|
+// 200: nodeResponse
|
|
|
+func deletefailOver(w http.ResponseWriter, r *http.Request) {
|
|
|
+ var params = mux.Vars(r)
|
|
|
+ nodeid := params["nodeid"]
|
|
|
+ // confirm host exists
|
|
|
+ node, err := logic.GetNodeByID(nodeid)
|
|
|
+ if err != nil {
|
|
|
+ slog.Error("failed to get node:", "error", err.Error())
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ node.IsFailOver = false
|
|
|
+ // Reset FailOvered Peers
|
|
|
+ err = logic.UpsertNode(&node)
|
|
|
+ if err != nil {
|
|
|
+ slog.Error("failed to upsert node", "node", node.ID.String(), "error", err)
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ go func() {
|
|
|
+ proLogic.ResetFailOveredPeers(&node)
|
|
|
+ mq.PublishPeerUpdate()
|
|
|
+ }()
|
|
|
+ w.Header().Set("Content-Type", "application/json")
|
|
|
+ logic.ReturnSuccessResponse(w, r, "relayed successfully")
|
|
|
+}
|
|
|
+
|
|
|
+// swagger:route POST /api/host/failOverME host failOver_me
|
|
|
//
|
|
|
// Create a relay.
|
|
|
//
|
|
@@ -44,10 +121,6 @@ func failOverME(w http.ResponseWriter, r *http.Request) {
|
|
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
|
|
return
|
|
|
}
|
|
|
- /*
|
|
|
- 1. Set On victimNode that needs failedOver to reach - the FailOver and FailedOverBY
|
|
|
- 2. On the Node that needs to reach Victim Node, add to failovered Peers
|
|
|
- */
|
|
|
var failOverReq FailOverMeReq
|
|
|
err = json.NewDecoder(r.Body).Decode(&failOverReq)
|
|
|
if err != nil {
|