From f1f6760cd690e286ffdc3fd7077f525957d531cc Mon Sep 17 00:00:00 2001 From: abhishek9686 Date: Mon, 18 Mar 2024 14:26:12 +0700 Subject: [PATCH 1/5] set clean session --- mq/mq.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mq/mq.go b/mq/mq.go index 28359b6fc..b09128c47 100644 --- a/mq/mq.go +++ b/mq/mq.go @@ -33,8 +33,9 @@ func setMqOptions(user, password string, opts *mqtt.ClientOptions) { opts.SetPassword(password) opts.SetAutoReconnect(true) opts.SetConnectRetry(true) - opts.SetConnectRetryInterval(time.Second << 2) + opts.SetConnectRetryInterval(time.Second * 4) opts.SetKeepAlive(time.Minute) + opts.SetCleanSession(true) opts.SetWriteTimeout(time.Minute) } From bc93bb4ebd7b8ceeb0fdecc4a309b436f8e9e1ea Mon Sep 17 00:00:00 2001 From: abhishek9686 Date: Mon, 18 Mar 2024 17:18:52 +0700 Subject: [PATCH 2/5] delete emqx hosts creds api --- controllers/hosts.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/controllers/hosts.go b/controllers/hosts.go index 4cee62f61..4f617e545 100644 --- a/controllers/hosts.go +++ b/controllers/hosts.go @@ -32,6 +32,7 @@ func hostHandlers(r *mux.Router) { r.HandleFunc("/api/v1/host", Authorize(true, false, "host", http.HandlerFunc(pull))).Methods(http.MethodGet) r.HandleFunc("/api/v1/host/{hostid}/signalpeer", Authorize(true, false, "host", http.HandlerFunc(signalPeer))).Methods(http.MethodPost) r.HandleFunc("/api/v1/fallback/host/{hostid}", Authorize(true, false, "host", http.HandlerFunc(hostUpdateFallback))).Methods(http.MethodPut) + r.HandleFunc("/api/emqx/hosts", logic.SecurityCheck(true, http.HandlerFunc(delEmqxHosts))).Methods(http.MethodDelete) r.HandleFunc("/api/v1/auth-register/host", socketHandler) } @@ -749,3 +750,31 @@ func syncHost(w http.ResponseWriter, r *http.Request) { slog.Info("requested host pull", "user", r.Header.Get("user"), "host", host.ID) w.WriteHeader(http.StatusOK) } + +// swagger:route DELETE /api/emqx/hosts hosts delEmqxHosts +// +// Lists all hosts. +// +// Schemes: https +// +// Security: +// oauth +// +// Responses: +// 200: apiHostResponse +func delEmqxHosts(w http.ResponseWriter, r *http.Request) { + currentHosts, err := logic.GetAllHosts() + if err != nil { + logger.Log(0, r.Header.Get("user"), "failed to fetch hosts: ", err.Error()) + logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) + return + } + for _, host := range currentHosts { + // delete EMQX credentials for host + if err := mq.GetEmqxHandler().DeleteEmqxUser(host.ID.String()); err != nil { + slog.Error("failed to remove host credentials from EMQX", "id", host.ID, "error", err) + } + } + + logic.ReturnSuccessResponse(w, r, "deleted hosts data on emqx") +} From 0fc756c77497377eef26a9603c67fe4e1efadba3 Mon Sep 17 00:00:00 2001 From: abhishek9686 Date: Mon, 18 Mar 2024 17:43:49 +0700 Subject: [PATCH 3/5] add emqx hosts del api to limited middleware controller --- pro/controllers/middleware.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/pro/controllers/middleware.go b/pro/controllers/middleware.go index 3e939b57d..7ec633f17 100644 --- a/pro/controllers/middleware.go +++ b/pro/controllers/middleware.go @@ -1,16 +1,24 @@ package controllers import ( + "net/http" + "github.com/gravitl/netmaker/logic" "github.com/gravitl/netmaker/servercfg" - "net/http" ) +var limitedApis = map[string]struct{}{ + "/api/server/status": {}, + "/api/emqx/hosts": {}, +} + func OnlyServerAPIWhenUnlicensedMiddleware(handler http.Handler) http.Handler { return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { - if servercfg.ErrLicenseValidation != nil && request.URL.Path != "/api/server/status" { - logic.ReturnErrorResponse(writer, request, logic.FormatError(servercfg.ErrLicenseValidation, "forbidden")) - return + if servercfg.ErrLicenseValidation != nil { + if _, ok := limitedApis[request.URL.Path]; !ok { + logic.ReturnErrorResponse(writer, request, logic.FormatError(servercfg.ErrLicenseValidation, "forbidden")) + return + } } handler.ServeHTTP(writer, request) }) From 8c4ea6d0476fe6d1da7affd436e77a3ba1daaf44 Mon Sep 17 00:00:00 2001 From: abhishek9686 Date: Mon, 18 Mar 2024 18:07:38 +0700 Subject: [PATCH 4/5] add emqx hosts del api to limited middleware controller --- pro/controllers/middleware.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pro/controllers/middleware.go b/pro/controllers/middleware.go index 7ec633f17..b20847022 100644 --- a/pro/controllers/middleware.go +++ b/pro/controllers/middleware.go @@ -8,8 +8,9 @@ import ( ) var limitedApis = map[string]struct{}{ - "/api/server/status": {}, - "/api/emqx/hosts": {}, + "/api/server/status": {}, + "/api/emqx/hosts": {}, + "/api/users/adm/authenticate": {}, } func OnlyServerAPIWhenUnlicensedMiddleware(handler http.Handler) http.Handler { From f3f92793cd489cdff41df6a418d2d162a98f335c Mon Sep 17 00:00:00 2001 From: abhishek9686 Date: Mon, 18 Mar 2024 18:22:21 +0700 Subject: [PATCH 5/5] remove server creds from emqx --- controllers/hosts.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/controllers/hosts.go b/controllers/hosts.go index 4f617e545..672134ac3 100644 --- a/controllers/hosts.go +++ b/controllers/hosts.go @@ -775,6 +775,9 @@ func delEmqxHosts(w http.ResponseWriter, r *http.Request) { slog.Error("failed to remove host credentials from EMQX", "id", host.ID, "error", err) } } - + err = mq.GetEmqxHandler().DeleteEmqxUser(servercfg.GetMqUserName()) + if err != nil { + slog.Error("failed to remove server credentials from EMQX", "user", servercfg.GetMqUserName(), "error", err) + } logic.ReturnSuccessResponse(w, r, "deleted hosts data on emqx") }