From 01484eec7bcc0c115d625a4f07a2b1a2bf2799c5 Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Fri, 11 Mar 2022 09:41:14 -0500 Subject: [PATCH] added ability to disable ext clients --- controllers/ext_client.go | 13 ++++++++++++- logic/extpeers.go | 5 +++-- models/extclient.go | 1 + 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/controllers/ext_client.go b/controllers/ext_client.go index 345e9e63..deca71d4 100644 --- a/controllers/ext_client.go +++ b/controllers/ext_client.go @@ -228,6 +228,8 @@ func createExtClient(w http.ResponseWriter, r *http.Request) { return } 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) if err != nil && !errors.Is(err, io.EOF) { returnErrorResponse(w, r, formatError(err, "internal")) @@ -268,12 +270,21 @@ func updateExtClient(w http.ResponseWriter, r *http.Request) { returnErrorResponse(w, r, formatError(err, "internal")) 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 { returnErrorResponse(w, r, formatError(err, "internal")) return } 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) json.NewEncoder(w).Encode(newclient) } diff --git a/logic/extpeers.go b/logic/extpeers.go index 5985b4bb..1cf21184 100644 --- a/logic/extpeers.go +++ b/logic/extpeers.go @@ -33,7 +33,7 @@ func GetExtPeersList(node *models.Node) ([]models.ExtPeersResponse, error) { logger.Log(2, "failed to unmarshal ext client") 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) } } @@ -162,13 +162,14 @@ func CreateExtClient(extclient *models.ExtClient) error { } // 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) if err != nil { return client, err } client.ClientID = newclientid + client.Enabled = enabled CreateExtClient(client) return client, err } diff --git a/models/extclient.go b/models/extclient.go index aed5684c..84593f5f 100644 --- a/models/extclient.go +++ b/models/extclient.go @@ -12,4 +12,5 @@ type ExtClient struct { IngressGatewayID string `json:"ingressgatewayid" bson:"ingressgatewayid"` IngressGatewayEndpoint string `json:"ingressgatewayendpoint" bson:"ingressgatewayendpoint"` LastModified int64 `json:"lastmodified" bson:"lastmodified"` + Enabled bool `json:"enabled" bson:"enabled"` }