Browse Source

ext client logic for peer updates

afeiszli 3 years ago
parent
commit
7215fc539f
3 changed files with 39 additions and 15 deletions
  1. 19 9
      controllers/ext_client.go
  2. 6 6
      mq/mq.go
  3. 14 0
      netclient/local/dns.go

+ 19 - 9
controllers/ext_client.go

@@ -239,7 +239,7 @@ func createExtClient(w http.ResponseWriter, r *http.Request) {
 		return
 	}
 	w.WriteHeader(http.StatusOK)
-	err = mq.PublishExtPeerUpdate(nodeid)
+	err = mq.PublishExtPeerUpdate(&node)
 	if err != nil {
 		logger.Log(1, "error setting ext peers on "+nodeid+": "+err.Error())
 	}
@@ -287,20 +287,30 @@ func deleteExtClient(w http.ResponseWriter, r *http.Request) {
 	// get params
 	var params = mux.Vars(r)
 
-	err := logic.DeleteExtClient(params["network"], params["clientid"])
+	extclient, err := logic.GetExtClient(params["clientid"], params["network"])
+	if err != nil {
+		err = errors.New("Could not delete extclient " + params["clientid"])
+		returnErrorResponse(w, r, formatError(err, "internal"))
+		return
+	}
+	ingressnode, err := logic.GetNodeByID(extclient.IngressGatewayID)
+	if err != nil {
+		returnErrorResponse(w, r, formatError(err, "internal"))
+		return
+	}
+
+	err = logic.DeleteExtClient(params["network"], params["clientid"])
 
 	if err != nil {
 		err = errors.New("Could not delete extclient " + params["clientid"])
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		return
 	}
-	/*
-		// we dont currently have logic to get the nodeid when we delete ext clients, apparently
-		err = mq.PublishExtPeerUpdate(nodeid)
-		if err != nil {
-			logger.Log("error setting ext peers on " + nodeid + ": " + err.Error())
-		}
-	*/
+
+	err = mq.PublishExtPeerUpdate(&ingressnode)
+	if err != nil {
+		logger.Log(1, "error setting ext peers on "+ingressnode.ID+": "+err.Error())
+	}
 	logger.Log(1, r.Header.Get("user"),
 		"Deleted extclient client", params["clientid"], "from network", params["network"])
 	returnSuccessResponse(w, r, params["clientid"]+" deleted.")

+ 6 - 6
mq/mq.go

@@ -134,10 +134,10 @@ func PublishPeerUpdate(newNode *models.Node) error {
 }
 
 // PublishPeerUpdate --- deterines and publishes a peer update to all the peers of a node
-func PublishExtPeerUpdate(nodeid string) error {
-	node, err := logic.GetNodeByID(nodeid)
-	if logic.IsLocalServer(&node) {
-		if err = logic.ServerUpdate(&node, false); err != nil {
+func PublishExtPeerUpdate(node *models.Node) error {
+	var err error
+	if logic.IsLocalServer(node) {
+		if err = logic.ServerUpdate(node, false); err != nil {
 			logger.Log(1, "server node:", node.ID, "failed to update peers with ext clients")
 			return err
 		} else {
@@ -147,7 +147,7 @@ func PublishExtPeerUpdate(nodeid string) error {
 	if !servercfg.IsMessageQueueBackend() {
 		return nil
 	}
-	peerUpdate, err := logic.GetPeerUpdate(&node)
+	peerUpdate, err := logic.GetPeerUpdate(node)
 	if err != nil {
 		return err
 	}
@@ -155,7 +155,7 @@ func PublishExtPeerUpdate(nodeid string) error {
 	if err != nil {
 		return err
 	}
-	return publish(&node, fmt.Sprintf("peers/%s/%s", node.Network, node.ID), data)
+	return publish(node, fmt.Sprintf("peers/%s/%s", node.Network, node.ID), data)
 }
 
 // GetID -- decodes a message queue topic and returns the embedded node.ID

+ 14 - 0
netclient/local/dns.go

@@ -108,3 +108,17 @@ func IsDNSReachable(nameserver string) bool {
 	}
 	return true
 }
+
+func IsDNSWorking(network string, nameserver string) bool {
+	var isworking bool
+	servers, err := net.LookupNS("netmaker" + "." + "network")
+	if err != nil {
+		return isworking
+	}
+	for _, ns := range servers {
+		if strings.Contains(ns.Host, nameserver) {
+			isworking = true
+		}
+	}
+	return isworking
+}