Răsfoiți Sursa

move endpoint detection to server config

Abhishek Kondur 2 ani în urmă
părinte
comite
e8a559ad34
5 a modificat fișierele cu 117 adăugiri și 20 ștergeri
  1. 96 0
      controllers/relay.go
  2. 0 1
      models/host.go
  3. 18 17
      models/structs.go
  4. 2 2
      mq/handlers.go
  5. 1 0
      servercfg/serverconf.go

+ 96 - 0
controllers/relay.go

@@ -0,0 +1,96 @@
+package controller
+
+import (
+	"encoding/json"
+	"fmt"
+	"net/http"
+
+	"github.com/gorilla/mux"
+	"github.com/gravitl/netmaker/logger"
+	"github.com/gravitl/netmaker/logic"
+	"github.com/gravitl/netmaker/models"
+	"github.com/gravitl/netmaker/mq"
+)
+
+// swagger:route POST /api/nodes/{network}/{nodeid}/createrelay nodes createRelay
+//
+// Create a relay.
+//
+//			Schemes: https
+//
+//			Security:
+//	  		oauth
+//
+//			Responses:
+//				200: nodeResponse
+func createRelay(w http.ResponseWriter, r *http.Request) {
+	var relay models.RelayRequest
+	var params = mux.Vars(r)
+	w.Header().Set("Content-Type", "application/json")
+	err := json.NewDecoder(r.Body).Decode(&relay)
+	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
+	}
+	relay.NetID = params["network"]
+	relay.NodeID = params["nodeid"]
+	updatenodes, node, err := logic.CreateRelay(relay)
+	if err != nil {
+		logger.Log(0, r.Header.Get("user"),
+			fmt.Sprintf("failed to create relay on node [%s] on network [%s]: %v", relay.NodeID, relay.NetID, err))
+		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
+		return
+	}
+
+	logger.Log(1, r.Header.Get("user"), "created relay on node", relay.NodeID, "on network", relay.NetID)
+	for _, relayedNode := range updatenodes {
+
+		err = mq.NodeUpdate(&relayedNode)
+		if err != nil {
+			logger.Log(1, "error sending update to relayed node ", relayedNode.ID.String(), "on network", relay.NetID, ": ", err.Error())
+		}
+	}
+	go mq.PublishPeerUpdate()
+
+	apiNode := node.ConvertToAPINode()
+	w.WriteHeader(http.StatusOK)
+	json.NewEncoder(w).Encode(apiNode)
+	runUpdates(&node, true)
+}
+
+// swagger:route DELETE /api/nodes/{network}/{nodeid}/deleterelay nodes deleteRelay
+//
+// Remove a relay.
+//
+//			Schemes: https
+//
+//			Security:
+//	  		oauth
+//
+//			Responses:
+//				200: nodeResponse
+func deleteRelay(w http.ResponseWriter, r *http.Request) {
+	w.Header().Set("Content-Type", "application/json")
+	var params = mux.Vars(r)
+	nodeid := params["nodeid"]
+	netid := params["network"]
+	updatenodes, node, err := logic.DeleteRelay(netid, nodeid)
+	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
+	}
+	logger.Log(1, r.Header.Get("user"), "deleted relay server", nodeid, "on network", netid)
+	for _, relayedNode := range updatenodes {
+		err = mq.NodeUpdate(&relayedNode)
+		if err != nil {
+			logger.Log(1, "error sending update to relayed node ", relayedNode.ID.String(), "on network", netid, ": ", err.Error())
+		}
+	}
+	go mq.PublishPeerUpdate()
+	apiNode := node.ConvertToAPINode()
+	w.WriteHeader(http.StatusOK)
+	json.NewEncoder(w).Encode(apiNode)
+	runUpdates(&node, true)
+}

+ 0 - 1
models/host.go

@@ -47,7 +47,6 @@ type Host struct {
 	IPForwarding       bool             `json:"ipforwarding" yaml:"ipforwarding"`
 	DaemonInstalled    bool             `json:"daemoninstalled" yaml:"daemoninstalled"`
 	AutoUpdate         bool             `json:"autoupdate" yaml:"autoupdate"`
-	EndpointDetection  bool             `json:"endpointdetection" yaml:"endpointdetection"`
 	HostPass           string           `json:"hostpass" yaml:"hostpass"`
 	Name               string           `json:"name" yaml:"name"`
 	OS                 string           `json:"os" yaml:"os"`

+ 18 - 17
models/structs.go

@@ -227,23 +227,24 @@ type NodeJoinResponse struct {
 
 // ServerConfig - struct for dealing with the server information for a netclient
 type ServerConfig struct {
-	CoreDNSAddr string       `yaml:"corednsaddr"`
-	API         string       `yaml:"api"`
-	APIPort     string       `yaml:"apiport"`
-	DNSMode     string       `yaml:"dnsmode"`
-	Version     string       `yaml:"version"`
-	MQPort      string       `yaml:"mqport"`
-	MQUserName  string       `yaml:"mq_username"`
-	MQPassword  string       `yaml:"mq_password"`
-	Server      string       `yaml:"server"`
-	Broker      string       `yaml:"broker"`
-	Is_EE       bool         `yaml:"isee"`
-	StunPort    int          `yaml:"stun_port"`
-	StunList    []StunServer `yaml:"stun_list"`
-	TrafficKey  []byte       `yaml:"traffickey"`
-	TurnDomain  string       `yaml:"turn_domain"`
-	TurnPort    int          `yaml:"turn_port"`
-	UseTurn     bool         `yaml:"use_turn"`
+	CoreDNSAddr       string       `yaml:"corednsaddr"`
+	API               string       `yaml:"api"`
+	APIPort           string       `yaml:"apiport"`
+	DNSMode           string       `yaml:"dnsmode"`
+	Version           string       `yaml:"version"`
+	MQPort            string       `yaml:"mqport"`
+	MQUserName        string       `yaml:"mq_username"`
+	MQPassword        string       `yaml:"mq_password"`
+	Server            string       `yaml:"server"`
+	Broker            string       `yaml:"broker"`
+	Is_EE             bool         `yaml:"isee"`
+	StunPort          int          `yaml:"stun_port"`
+	StunList          []StunServer `yaml:"stun_list"`
+	TrafficKey        []byte       `yaml:"traffickey"`
+	TurnDomain        string       `yaml:"turn_domain"`
+	TurnPort          int          `yaml:"turn_port"`
+	UseTurn           bool         `yaml:"use_turn"`
+	EndpointDetection bool         `yaml:"endpointdetection"`
 }
 
 // User.NameInCharset - returns if name is in charset below or not

+ 2 - 2
mq/handlers.go

@@ -191,6 +191,7 @@ func UpdateHost(client mqtt.Client, msg mqtt.Message) {
 	}
 
 	if sendPeerUpdate {
+		logger.Log(0, "Sending Host Update.......")
 		go BroadcastHostUpdate(currentHost, removeHost)
 	}
 	// if servercfg.Is_EE && ifaceDelta {
@@ -408,8 +409,7 @@ func handleHostCheckin(h, currentHost *models.Host) bool {
 	ifaceDelta := len(h.Interfaces) != len(currentHost.Interfaces) ||
 		!h.EndpointIP.Equal(currentHost.EndpointIP) ||
 		(len(h.NatType) > 0 && h.NatType != currentHost.NatType) ||
-		h.DefaultInterface != currentHost.DefaultInterface ||
-		h.EndpointDetection != servercfg.EndpointDetectionEnabled()
+		h.DefaultInterface != currentHost.DefaultInterface
 	if ifaceDelta { // only save if something changes
 		currentHost.EndpointIP = h.EndpointIP
 		currentHost.Interfaces = h.Interfaces

+ 1 - 0
servercfg/serverconf.go

@@ -113,6 +113,7 @@ func GetServerInfo() models.ServerConfig {
 	cfg.TurnDomain = GetTurnHost()
 	cfg.TurnPort = GetTurnPort()
 	cfg.UseTurn = IsUsingTurn()
+	cfg.EndpointDetection = EndpointDetectionEnabled()
 	return cfg
 }