From 7602e97950a178b141a46bb872dd43e200951e08 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Thu, 4 May 2023 16:37:13 -0400 Subject: [PATCH 1/7] return {} if no records found for acls/metrics --- controllers/network.go | 6 ++++++ ee/ee_controllers/metrics.go | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/controllers/network.go b/controllers/network.go index 8be03dca..5f09286f 100644 --- a/controllers/network.go +++ b/controllers/network.go @@ -170,6 +170,12 @@ func getNetworkACL(w http.ResponseWriter, r *http.Request) { var networkACL acls.ACLContainer networkACL, err := networkACL.Get(acls.ContainerID(netname)) if err != nil { + if database.IsEmptyRecord(err) { + networkACL = acls.ACLContainer{} + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(networkACL) + return + } logger.Log(0, r.Header.Get("user"), fmt.Sprintf("failed to fetch ACLs for network [%s]: %v", netname, err)) logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) diff --git a/ee/ee_controllers/metrics.go b/ee/ee_controllers/metrics.go index f010bf92..d2379d27 100644 --- a/ee/ee_controllers/metrics.go +++ b/ee/ee_controllers/metrics.go @@ -5,6 +5,7 @@ import ( "net/http" "github.com/gorilla/mux" + "github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/logic" "github.com/gravitl/netmaker/models" @@ -91,6 +92,12 @@ func getNetworkExtMetrics(w http.ResponseWriter, r *http.Request) { clients, err := logic.GetNetworkExtClients(network) // grab all the network ext clients if err != nil { + if database.IsEmptyRecord(err) { + var metrics struct{} + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(metrics) + return + } logger.Log(1, r.Header.Get("user"), "failed to fetch metrics of ext clients in network", network, err.Error()) logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) return From 676e9b35f96a022c4fae354d23f3e81d3612ddec Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Thu, 4 May 2023 16:40:32 -0400 Subject: [PATCH 2/7] Revert "return {} if no records found for acls/metrics" pushed to wrong branch This reverts commit 7602e97950a178b141a46bb872dd43e200951e08. --- controllers/network.go | 6 ------ ee/ee_controllers/metrics.go | 7 ------- 2 files changed, 13 deletions(-) diff --git a/controllers/network.go b/controllers/network.go index 5f09286f..8be03dca 100644 --- a/controllers/network.go +++ b/controllers/network.go @@ -170,12 +170,6 @@ func getNetworkACL(w http.ResponseWriter, r *http.Request) { var networkACL acls.ACLContainer networkACL, err := networkACL.Get(acls.ContainerID(netname)) if err != nil { - if database.IsEmptyRecord(err) { - networkACL = acls.ACLContainer{} - w.WriteHeader(http.StatusOK) - json.NewEncoder(w).Encode(networkACL) - return - } logger.Log(0, r.Header.Get("user"), fmt.Sprintf("failed to fetch ACLs for network [%s]: %v", netname, err)) logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) diff --git a/ee/ee_controllers/metrics.go b/ee/ee_controllers/metrics.go index d2379d27..f010bf92 100644 --- a/ee/ee_controllers/metrics.go +++ b/ee/ee_controllers/metrics.go @@ -5,7 +5,6 @@ import ( "net/http" "github.com/gorilla/mux" - "github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/logic" "github.com/gravitl/netmaker/models" @@ -92,12 +91,6 @@ func getNetworkExtMetrics(w http.ResponseWriter, r *http.Request) { clients, err := logic.GetNetworkExtClients(network) // grab all the network ext clients if err != nil { - if database.IsEmptyRecord(err) { - var metrics struct{} - w.WriteHeader(http.StatusOK) - json.NewEncoder(w).Encode(metrics) - return - } logger.Log(1, r.Header.Get("user"), "failed to fetch metrics of ext clients in network", network, err.Error()) logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) return From 3567811aab8f2822f9ec71252a2cff6d340c5928 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Fri, 5 May 2023 11:03:59 -0400 Subject: [PATCH 3/7] add type to enrollement key --- logic/enrollmentkey.go | 6 +++++ main.go | 4 +++- migrate/migrate.go | 51 ++++++++++++++++++++++++++++++++++++++++ models/enrollment_key.go | 17 ++++++++++++++ 4 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 migrate/migrate.go diff --git a/logic/enrollmentkey.go b/logic/enrollmentkey.go index 9888f3c3..ae923b42 100644 --- a/logic/enrollmentkey.go +++ b/logic/enrollmentkey.go @@ -41,12 +41,18 @@ func CreateEnrollmentKey(uses int, expiration time.Time, networks, tags []string Unlimited: unlimited, Networks: []string{}, Tags: []string{}, + Type: models.Undefined, } if uses > 0 { k.UsesRemaining = uses + k.Type = models.Uses } if !expiration.IsZero() { k.Expiration = expiration + k.Type = models.TimeExpiration + } + if k.Unlimited { + k.Type = models.Unlimited } if len(networks) > 0 { k.Networks = networks diff --git a/main.go b/main.go index 480d3f30..897251f2 100644 --- a/main.go +++ b/main.go @@ -19,6 +19,7 @@ import ( "github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/logic" "github.com/gravitl/netmaker/logic/pro" + "github.com/gravitl/netmaker/migrate" "github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/mq" "github.com/gravitl/netmaker/netclient/ncutils" @@ -27,7 +28,7 @@ import ( stunserver "github.com/gravitl/netmaker/stun-server" ) -var version = "v0.19.0" +var version = "v0.18.7" // Start DB Connection and start API Request Handler func main() { @@ -74,6 +75,7 @@ func initialize() { // Client Mode Prereq Check logger.FatalLog("Error connecting to database: ", err.Error()) } logger.Log(0, "database successfully connected") + migrate.Run() logic.SetJWTSecret() diff --git a/migrate/migrate.go b/migrate/migrate.go new file mode 100644 index 00000000..baae2840 --- /dev/null +++ b/migrate/migrate.go @@ -0,0 +1,51 @@ +package migrate + +import ( + "encoding/json" + + "github.com/gravitl/netmaker/database" + "github.com/gravitl/netmaker/logger" + "github.com/gravitl/netmaker/models" +) + +func Run() { + updateEnrollmentKeys() +} + +func updateEnrollmentKeys() { + rows, err := database.FetchRecords(database.ENROLLMENT_KEYS_TABLE_NAME) + if err != nil { + return + } + for _, row := range rows { + var key models.EnrollmentKey + if err = json.Unmarshal([]byte(row), &key); err != nil { + continue + } + if key.Type != models.Undefined { + logger.Log(2, "migration: enrollment key type already set") + continue + } else { + logger.Log(2, "migration: updating enrollment key type") + if key.Unlimited { + key.Type = models.Unlimited + } + if key.UsesRemaining > 0 { + key.Type = models.Uses + } + if !key.Expiration.IsZero() { + key.Type = models.TimeExpiration + } + } + data, err := json.Marshal(key) + if err != nil { + logger.Log(0, "migration: marshalling enrollment key: "+err.Error()) + continue + } + if err = database.Insert(key.Value, string(data), database.ENROLLMENT_KEYS_TABLE_NAME); err != nil { + logger.Log(0, "migration: inserting enrollment key: "+err.Error()) + continue + } + + } +} diff --git a/models/enrollment_key.go b/models/enrollment_key.go index 63d1b6dd..94f7cd3b 100644 --- a/models/enrollment_key.go +++ b/models/enrollment_key.go @@ -4,6 +4,19 @@ import ( "time" ) +const ( + Undefined KeyType = iota + TimeExpiration + Uses + Unlimited +) + +type KeyType int + +func (k KeyType) String() string { + return [...]string{"Undefined", "TimeExpiration", "Uses", "Unlimited"}[k] +} + // EnrollmentToken - the tokenized version of an enrollmentkey; // to be used for host registration type EnrollmentToken struct { @@ -23,6 +36,7 @@ type EnrollmentKey struct { Unlimited bool `json:"unlimited"` Tags []string `json:"tags"` Token string `json:"token,omitempty"` // B64 value of EnrollmentToken + Type KeyType `json:"type"` } // APIEnrollmentKey - used to create enrollment keys via API @@ -51,6 +65,9 @@ func (k *EnrollmentKey) IsValid() bool { if !k.Expiration.IsZero() && time.Now().Before(k.Expiration) { return true } + if k.Type == Undefined { + return false + } return k.Unlimited } From 204ed4be26d54a5e7fdc4b967ca0000cc1bff539 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Fri, 5 May 2023 11:06:06 -0400 Subject: [PATCH 4/7] update version --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index 897251f2..ae9be8cc 100644 --- a/main.go +++ b/main.go @@ -28,7 +28,7 @@ import ( stunserver "github.com/gravitl/netmaker/stun-server" ) -var version = "v0.18.7" +var version = "v0.19.1" // Start DB Connection and start API Request Handler func main() { From 3ccd81eac84aa0a62a5c898dfce696121f80052b Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 8 May 2023 06:30:55 -0400 Subject: [PATCH 5/7] add type to APIEnrollementKey --- models/enrollment_key.go | 1 + 1 file changed, 1 insertion(+) diff --git a/models/enrollment_key.go b/models/enrollment_key.go index 94f7cd3b..77089e37 100644 --- a/models/enrollment_key.go +++ b/models/enrollment_key.go @@ -46,6 +46,7 @@ type APIEnrollmentKey struct { Networks []string `json:"networks"` Unlimited bool `json:"unlimited"` Tags []string `json:"tags"` + Type KeyType `json:"type"` } // RegisterResponse - the response to a successful enrollment register From 33249f37ac5993abeab30d2a677ea619184ff88d Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 8 May 2023 06:42:16 -0400 Subject: [PATCH 6/7] if -- else to determine type --- logic/enrollmentkey.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/logic/enrollmentkey.go b/logic/enrollmentkey.go index ae923b42..4909aa11 100644 --- a/logic/enrollmentkey.go +++ b/logic/enrollmentkey.go @@ -46,12 +46,10 @@ func CreateEnrollmentKey(uses int, expiration time.Time, networks, tags []string if uses > 0 { k.UsesRemaining = uses k.Type = models.Uses - } - if !expiration.IsZero() { + } else if !expiration.IsZero() { k.Expiration = expiration k.Type = models.TimeExpiration - } - if k.Unlimited { + } else if k.Unlimited { k.Type = models.Unlimited } if len(networks) > 0 { From 13473f4dd77ae42fd29f510ca2f982fd5e5d4325 Mon Sep 17 00:00:00 2001 From: Matthew R Kasun Date: Mon, 8 May 2023 13:44:32 -0400 Subject: [PATCH 7/7] review comments --- migrate/migrate.go | 7 +++---- models/enrollment_key.go | 2 ++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/migrate/migrate.go b/migrate/migrate.go index baae2840..2f064528 100644 --- a/migrate/migrate.go +++ b/migrate/migrate.go @@ -8,6 +8,7 @@ import ( "github.com/gravitl/netmaker/models" ) +// Run - runs all migrations func Run() { updateEnrollmentKeys() } @@ -29,11 +30,9 @@ func updateEnrollmentKeys() { logger.Log(2, "migration: updating enrollment key type") if key.Unlimited { key.Type = models.Unlimited - } - if key.UsesRemaining > 0 { + } else if key.UsesRemaining > 0 { key.Type = models.Uses - } - if !key.Expiration.IsZero() { + } else if !key.Expiration.IsZero() { key.Type = models.TimeExpiration } } diff --git a/models/enrollment_key.go b/models/enrollment_key.go index 77089e37..581ff6a3 100644 --- a/models/enrollment_key.go +++ b/models/enrollment_key.go @@ -11,8 +11,10 @@ const ( Unlimited ) +// KeyType - the type of enrollment key type KeyType int +// String - returns the string representation of a KeyType func (k KeyType) String() string { return [...]string{"Undefined", "TimeExpiration", "Uses", "Unlimited"}[k] }