diff --git a/controllers/dns.go b/controllers/dns.go index 4a38aa0c..482e2d31 100644 --- a/controllers/dns.go +++ b/controllers/dns.go @@ -70,8 +70,9 @@ func getAllDNS(w http.ResponseWriter, r *http.Request) { logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) return } + sortedDns := logic.SortDNSEntrys(dns) w.WriteHeader(http.StatusOK) - json.NewEncoder(w).Encode(dns) + json.NewEncoder(w).Encode(sortedDns) } // swagger:route GET /api/dns/adm/{network}/custom dns getCustomDNS diff --git a/controllers/ext_client.go b/controllers/ext_client.go index 8a1c2541..c2359a5e 100644 --- a/controllers/ext_client.go +++ b/controllers/ext_client.go @@ -117,8 +117,9 @@ func getAllExtClients(w http.ResponseWriter, r *http.Request) { } //Return all the extclients in JSON format + sortedClients := logic.SortExtClient(clients) w.WriteHeader(http.StatusOK) - json.NewEncoder(w).Encode(clients) + json.NewEncoder(w).Encode(sortedClients) } // swagger:route GET /api/extclients/{network}/{clientid} ext_client getExtClient diff --git a/controllers/hosts.go b/controllers/hosts.go index a9380d22..e3c8bf3b 100644 --- a/controllers/hosts.go +++ b/controllers/hosts.go @@ -51,8 +51,9 @@ 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") + sortedApiHosts := logic.SortApiHosts(apiHosts) w.WriteHeader(http.StatusOK) - json.NewEncoder(w).Encode(apiHosts) + json.NewEncoder(w).Encode(sortedApiHosts) } // swagger:route GET /api/v1/host pull pullHost diff --git a/controllers/network.go b/controllers/network.go index 8ab08a5b..2aa638ac 100644 --- a/controllers/network.go +++ b/controllers/network.go @@ -71,8 +71,9 @@ func getNetworks(w http.ResponseWriter, r *http.Request) { } logger.Log(2, r.Header.Get("user"), "fetched networks.") + sortedAllNetworks := logic.SortNetworks(allnetworks) w.WriteHeader(http.StatusOK) - json.NewEncoder(w).Encode(allnetworks) + json.NewEncoder(w).Encode(sortedAllNetworks) } // swagger:route GET /api/networks/{networkname} networks getNetwork diff --git a/controllers/node.go b/controllers/node.go index 6cfc5e3c..7775facd 100644 --- a/controllers/node.go +++ b/controllers/node.go @@ -340,8 +340,9 @@ 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") + sortedApiNodes := logic.SortApiNodes(apiNodes) w.WriteHeader(http.StatusOK) - json.NewEncoder(w).Encode(apiNodes) + json.NewEncoder(w).Encode(sortedApiNodes) } func getUsersNodes(user models.User) ([]models.Node, error) { diff --git a/logic/clients.go b/logic/clients.go index 01427e5f..2ddedbb3 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,11 @@ 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) []models.ExtClient { + sort.Slice(unsortedExtClient, func(i, j int) bool { + return unsortedExtClient[i].ClientID < unsortedExtClient[j].ClientID + }) + return nil +} diff --git a/logic/dns.go b/logic/dns.go index 4a0955f5..7e7a901a 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,14 @@ 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) []models.DNSEntry { + sort.Slice(unsortedDNSEntrys, func(i, j int) bool { + return unsortedDNSEntrys[i].Address < unsortedDNSEntrys[j].Address + }) + return nil +} + // ValidateDNSCreate - checks if an entry is valid func ValidateDNSCreate(entry models.DNSEntry) error { diff --git a/logic/hosts.go b/logic/hosts.go index 19feda1a..865fe443 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" @@ -424,3 +425,11 @@ 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) []models.ApiHost { + sort.Slice(unsortedHosts, func(i, j int) bool { + return unsortedHosts[i].ID < unsortedHosts[j].ID + }) + return nil +} diff --git a/logic/networks.go b/logic/networks.go index b24795a9..0d526c95 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,11 @@ 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) []models.Network { + sort.Slice(unsortedNetworks, func(i, j int) bool { + return unsortedNetworks[i].NetID < unsortedNetworks[j].NetID + }) + return nil +} diff --git a/logic/nodes.go b/logic/nodes.go index f68602a7..0f0c9c31 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,12 @@ 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) []models.ApiNode { + sort.Slice(unsortedNodes, func(i, j int) bool { + return unsortedNodes[i].ID < unsortedNodes[j].ID + }) + return nil +} + // == END PRO ==