Browse Source

added ability to disable ext clients

0xdcarns 3 years ago
parent
commit
01484eec7b
3 changed files with 16 additions and 3 deletions
  1. 12 1
      controllers/ext_client.go
  2. 3 2
      logic/extpeers.go
  3. 1 0
      models/extclient.go

+ 12 - 1
controllers/ext_client.go

@@ -228,6 +228,8 @@ func createExtClient(w http.ResponseWriter, r *http.Request) {
 		return
 		return
 	}
 	}
 	extclient.IngressGatewayEndpoint = node.Endpoint + ":" + strconv.FormatInt(int64(node.ListenPort), 10)
 	extclient.IngressGatewayEndpoint = node.Endpoint + ":" + strconv.FormatInt(int64(node.ListenPort), 10)
+	// TODO, could rely on network template as well in future
+	extclient.Enabled = true
 	err = json.NewDecoder(r.Body).Decode(&extclient)
 	err = json.NewDecoder(r.Body).Decode(&extclient)
 	if err != nil && !errors.Is(err, io.EOF) {
 	if err != nil && !errors.Is(err, io.EOF) {
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		returnErrorResponse(w, r, formatError(err, "internal"))
@@ -268,12 +270,21 @@ func updateExtClient(w http.ResponseWriter, r *http.Request) {
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		return
 		return
 	}
 	}
-	newclient, err := logic.UpdateExtClient(newExtClient.ClientID, params["network"], &oldExtClient)
+	var changedEnabled = newExtClient.Enabled != oldExtClient.Enabled // indicates there was a change in enablement
+	newclient, err := logic.UpdateExtClient(newExtClient.ClientID, params["network"], newExtClient.Enabled, &oldExtClient)
 	if err != nil {
 	if err != nil {
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		return
 		return
 	}
 	}
 	logger.Log(1, r.Header.Get("user"), "updated client", newExtClient.ClientID)
 	logger.Log(1, r.Header.Get("user"), "updated client", newExtClient.ClientID)
+	if changedEnabled { // need to send a peer update to the ingress node as enablement of one of it's clients has changed
+		serverNode, err := logic.GetNetworkServerLocal(params["network"])
+		if err == nil {
+			if err = mq.PublishPeerUpdate(&serverNode); err != nil {
+				logger.Log(1, "failed to send peer update after enablement change for ext client", newExtClient.ClientID)
+			}
+		}
+	}
 	w.WriteHeader(http.StatusOK)
 	w.WriteHeader(http.StatusOK)
 	json.NewEncoder(w).Encode(newclient)
 	json.NewEncoder(w).Encode(newclient)
 }
 }

+ 3 - 2
logic/extpeers.go

@@ -33,7 +33,7 @@ func GetExtPeersList(node *models.Node) ([]models.ExtPeersResponse, error) {
 			logger.Log(2, "failed to unmarshal ext client")
 			logger.Log(2, "failed to unmarshal ext client")
 			continue
 			continue
 		}
 		}
-		if extClient.Network == node.Network && extClient.IngressGatewayID == node.ID {
+		if extClient.Enabled && extClient.Network == node.Network && extClient.IngressGatewayID == node.ID {
 			peers = append(peers, peer)
 			peers = append(peers, peer)
 		}
 		}
 	}
 	}
@@ -162,13 +162,14 @@ func CreateExtClient(extclient *models.ExtClient) error {
 }
 }
 
 
 // UpdateExtClient - only supports name changes right now
 // UpdateExtClient - only supports name changes right now
-func UpdateExtClient(newclientid string, network string, client *models.ExtClient) (*models.ExtClient, error) {
+func UpdateExtClient(newclientid string, network string, enabled bool, client *models.ExtClient) (*models.ExtClient, error) {
 
 
 	err := DeleteExtClient(network, client.ClientID)
 	err := DeleteExtClient(network, client.ClientID)
 	if err != nil {
 	if err != nil {
 		return client, err
 		return client, err
 	}
 	}
 	client.ClientID = newclientid
 	client.ClientID = newclientid
+	client.Enabled = enabled
 	CreateExtClient(client)
 	CreateExtClient(client)
 	return client, err
 	return client, err
 }
 }

+ 1 - 0
models/extclient.go

@@ -12,4 +12,5 @@ type ExtClient struct {
 	IngressGatewayID       string `json:"ingressgatewayid" bson:"ingressgatewayid"`
 	IngressGatewayID       string `json:"ingressgatewayid" bson:"ingressgatewayid"`
 	IngressGatewayEndpoint string `json:"ingressgatewayendpoint" bson:"ingressgatewayendpoint"`
 	IngressGatewayEndpoint string `json:"ingressgatewayendpoint" bson:"ingressgatewayendpoint"`
 	LastModified           int64  `json:"lastmodified" bson:"lastmodified"`
 	LastModified           int64  `json:"lastmodified" bson:"lastmodified"`
+	Enabled                bool   `json:"enabled" bson:"enabled"`
 }
 }