diff --git a/controllers/dns.go b/controllers/dns.go index 4a38aa0c..eb038fc0 100644 --- a/controllers/dns.go +++ b/controllers/dns.go @@ -70,6 +70,7 @@ func getAllDNS(w http.ResponseWriter, r *http.Request) { logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) return } + logic.SortDNSEntrys(dns[:]) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(dns) } diff --git a/controllers/ext_client.go b/controllers/ext_client.go index 8a1c2541..057a8239 100644 --- a/controllers/ext_client.go +++ b/controllers/ext_client.go @@ -117,6 +117,7 @@ func getAllExtClients(w http.ResponseWriter, r *http.Request) { } //Return all the extclients in JSON format + logic.SortExtClient(clients[:]) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(clients) } diff --git a/controllers/hosts.go b/controllers/hosts.go index 360c745f..64c88939 100644 --- a/controllers/hosts.go +++ b/controllers/hosts.go @@ -52,6 +52,7 @@ func getHosts(w http.ResponseWriter, r *http.Request) { // return JSON/API formatted hosts apiHosts := logic.GetAllHostsAPI(currentHosts[:]) logger.Log(2, r.Header.Get("user"), "fetched all hosts") + logic.SortApiHosts(apiHosts[:]) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(apiHosts) } diff --git a/controllers/network.go b/controllers/network.go index f96c6902..d489c19f 100644 --- a/controllers/network.go +++ b/controllers/network.go @@ -70,6 +70,7 @@ func getNetworks(w http.ResponseWriter, r *http.Request) { } logger.Log(2, r.Header.Get("user"), "fetched networks.") + logic.SortNetworks(allnetworks[:]) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(allnetworks) } diff --git a/controllers/node.go b/controllers/node.go index 51518106..92852c64 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -340,6 +340,7 @@ func getAllNodes(w http.ResponseWriter, r *http.Request) { // return all the nodes in JSON/API format apiNodes := logic.GetAllNodesAPI(nodes[:]) logger.Log(3, r.Header.Get("user"), "fetched all nodes they have access to") + logic.SortApiNodes(apiNodes[:]) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(apiNodes) } diff --git a/controllers/user.go b/controllers/user.go index 9cd1d3fc..b6b470c9 100644 --- a/controllers/user.go +++ b/controllers/user.go @@ -186,6 +186,7 @@ func getUsers(w http.ResponseWriter, r *http.Request) { return } + logic.SortUsers(users[:]) logger.Log(2, r.Header.Get("user"), "fetched users") json.NewEncoder(w).Encode(users) } diff --git a/logic/clients.go b/logic/clients.go index 01427e5f..2eb58fed 100644 --- a/logic/clients.go +++ b/logic/clients.go @@ -1,6 +1,10 @@ package logic -import "github.com/gravitl/netmaker/models" +import ( + "sort" + + "github.com/gravitl/netmaker/models" +) // functions defined here, handle client ACLs, should be set on ee @@ -51,3 +55,10 @@ func IsClientNodeAllowedByID(clientID, networkName, clientOrNodeID string) bool } return IsClientNodeAllowed(&client, clientOrNodeID) } + +// SortExtClient - Sorts slice of ExtClients by their ClientID alphabetically with numbers first +func SortExtClient(unsortedExtClient []models.ExtClient) { + sort.Slice(unsortedExtClient, func(i, j int) bool { + return unsortedExtClient[i].ClientID < unsortedExtClient[j].ClientID + }) +} diff --git a/logic/dns.go b/logic/dns.go index 4a0955f5..146a72fe 100644 --- a/logic/dns.go +++ b/logic/dns.go @@ -3,6 +3,7 @@ package logic import ( "encoding/json" "os" + "sort" validator "github.com/go-playground/validator/v10" "github.com/gravitl/netmaker/database" @@ -194,6 +195,13 @@ func GetDNSEntryNum(domain string, network string) (int, error) { return num, nil } +// SortDNSEntrys - Sorts slice of DNSEnteys by their Address alphabetically with numbers first +func SortDNSEntrys(unsortedDNSEntrys []models.DNSEntry) { + sort.Slice(unsortedDNSEntrys, func(i, j int) bool { + return unsortedDNSEntrys[i].Address < unsortedDNSEntrys[j].Address + }) +} + // ValidateDNSCreate - checks if an entry is valid func ValidateDNSCreate(entry models.DNSEntry) error { diff --git a/logic/hosts.go b/logic/hosts.go index f3b0bc26..a3c9dc09 100644 --- a/logic/hosts.go +++ b/logic/hosts.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "log" + "sort" "github.com/google/uuid" "github.com/gravitl/netmaker/database" @@ -429,3 +430,10 @@ func GetHostByNodeID(id string) *models.Host { } return nil } + +// SortApiHosts - Sorts slice of ApiHosts by their ID alphabetically with numbers first +func SortApiHosts(unsortedHosts []models.ApiHost) { + sort.Slice(unsortedHosts, func(i, j int) bool { + return unsortedHosts[i].ID < unsortedHosts[j].ID + }) +} diff --git a/logic/networks.go b/logic/networks.go index b24795a9..5806e117 100644 --- a/logic/networks.go +++ b/logic/networks.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "net" + "sort" "strings" "github.com/c-robinson/iplib" @@ -622,3 +623,10 @@ func networkNodesUpdateAction(networkName string, action string) error { } return nil } + +// SortNetworks - Sorts slice of Networks by their NetID alphabetically with numbers first +func SortNetworks(unsortedNetworks []models.Network) { + sort.Slice(unsortedNetworks, func(i, j int) bool { + return unsortedNetworks[i].NetID < unsortedNetworks[j].NetID + }) +} diff --git a/logic/nodes.go b/logic/nodes.go index f68602a7..955a7b54 100644 --- a/logic/nodes.go +++ b/logic/nodes.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "net" + "sort" "time" validator "github.com/go-playground/validator/v10" @@ -546,4 +547,11 @@ func createNode(node *models.Node) error { return err } +// SortApiNodes - Sorts slice of ApiNodes by their ID alphabetically with numbers first +func SortApiNodes(unsortedNodes []models.ApiNode) { + sort.Slice(unsortedNodes, func(i, j int) bool { + return unsortedNodes[i].ID < unsortedNodes[j].ID + }) +} + // == END PRO == diff --git a/logic/users.go b/logic/users.go index 1761a999..4c86f3c1 100644 --- a/logic/users.go +++ b/logic/users.go @@ -2,6 +2,7 @@ package logic import ( "encoding/json" + "sort" "github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/logger" @@ -77,3 +78,10 @@ func SetUserDefaults(user *models.User) { user.Groups = []string{pro.DEFAULT_ALLOWED_GROUPS} } } + +// SortUsers - Sorts slice of Users by username +func SortUsers(unsortedUsers []models.ReturnUser) { + sort.Slice(unsortedUsers, func(i, j int) bool { + return unsortedUsers[i].UserName < unsortedUsers[j].UserName + }) +}