From f54e19da2c6681591ced71d0696f1ff1e478df9d Mon Sep 17 00:00:00 2001 From: ullbergm Date: Mon, 31 Oct 2022 08:17:50 -0400 Subject: [PATCH 1/4] Sort apps alphabetically (case-insensitive) --- internal/handlers/apps.go | 13 +++++++++++++ internal/util/strings/strings.go | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/internal/handlers/apps.go b/internal/handlers/apps.go index 4bdcd2ba..38e8330b 100644 --- a/internal/handlers/apps.go +++ b/internal/handlers/apps.go @@ -2,6 +2,8 @@ package handlers import ( "net/http" + "sort" + "strings" "github.com/go-chi/chi/v5" "github.com/go-chi/render" @@ -9,6 +11,7 @@ import ( "github.com/toboshii/hajimari/internal/hajimari/customapps" "github.com/toboshii/hajimari/internal/models" "github.com/toboshii/hajimari/internal/services" + utilStrings "github.com/toboshii/hajimari/internal/util/strings" ) type appResource struct { @@ -57,6 +60,16 @@ func (rs *appResource) ListApps(w http.ResponseWriter, r *http.Request) { customApps = append(customApps[:x], customApps[x+1:]...) } } + + sort.Slice(ingressApps[i].Apps, func(j, k int) bool { + switch strings.Compare(utilStrings.NormalizeString(ingressApps[i].Apps[j].Name), utilStrings.NormalizeString(ingressApps[i].Apps[k].Name)) { + case -1: + return true + case 1: + return false + } + return true + }) } apps = append(ingressApps, customApps...) diff --git a/internal/util/strings/strings.go b/internal/util/strings/strings.go index 5a0b9d92..25f7f6ea 100644 --- a/internal/util/strings/strings.go +++ b/internal/util/strings/strings.go @@ -23,3 +23,8 @@ func ContainsBetweenDelimiter(fullString string, search string, delimiter string } return false } + +// NormalizeString trims extra spaces and changes the string to lower-case +func NormalizeString(str string) string { + return strings.TrimSpace(strings.ToLower(str)) +} \ No newline at end of file From fa3ac11358df81dc7cfe3db83685bfeb6027d6f6 Mon Sep 17 00:00:00 2001 From: ullbergm Date: Mon, 31 Oct 2022 08:36:04 -0400 Subject: [PATCH 2/4] Clean up app sort code --- internal/handlers/apps.go | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/internal/handlers/apps.go b/internal/handlers/apps.go index 38e8330b..8b4e6c1b 100644 --- a/internal/handlers/apps.go +++ b/internal/handlers/apps.go @@ -61,14 +61,9 @@ func (rs *appResource) ListApps(w http.ResponseWriter, r *http.Request) { } } + // Sort ingressApps[i].Apps alphabetically sort.Slice(ingressApps[i].Apps, func(j, k int) bool { - switch strings.Compare(utilStrings.NormalizeString(ingressApps[i].Apps[j].Name), utilStrings.NormalizeString(ingressApps[i].Apps[k].Name)) { - case -1: - return true - case 1: - return false - } - return true + return strings.Compare(utilStrings.NormalizeString(ingressApps[i].Apps[j].Name), utilStrings.NormalizeString(ingressApps[i].Apps[k].Name)) == -1 }) } From 7b2ce6c7cf2f265330eb6129c344ee19fd661104 Mon Sep 17 00:00:00 2001 From: ullbergm Date: Mon, 31 Oct 2022 08:45:42 -0400 Subject: [PATCH 3/4] Refactor string comparison code --- internal/handlers/apps.go | 3 +-- internal/util/strings/strings.go | 7 ++++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/internal/handlers/apps.go b/internal/handlers/apps.go index 8b4e6c1b..9f6f7a2e 100644 --- a/internal/handlers/apps.go +++ b/internal/handlers/apps.go @@ -3,7 +3,6 @@ package handlers import ( "net/http" "sort" - "strings" "github.com/go-chi/chi/v5" "github.com/go-chi/render" @@ -63,7 +62,7 @@ func (rs *appResource) ListApps(w http.ResponseWriter, r *http.Request) { // Sort ingressApps[i].Apps alphabetically sort.Slice(ingressApps[i].Apps, func(j, k int) bool { - return strings.Compare(utilStrings.NormalizeString(ingressApps[i].Apps[j].Name), utilStrings.NormalizeString(ingressApps[i].Apps[k].Name)) == -1 + return utilStrings.CompareNormalized(ingressApps[i].Apps[j].Name, ingressApps[i].Apps[k].Name) == -1 }) } diff --git a/internal/util/strings/strings.go b/internal/util/strings/strings.go index 25f7f6ea..94a917cb 100644 --- a/internal/util/strings/strings.go +++ b/internal/util/strings/strings.go @@ -27,4 +27,9 @@ func ContainsBetweenDelimiter(fullString string, search string, delimiter string // NormalizeString trims extra spaces and changes the string to lower-case func NormalizeString(str string) string { return strings.TrimSpace(strings.ToLower(str)) -} \ No newline at end of file +} + +// CompareNormalized compares two strings after normalizing them +func CompareNormalized(a string, b string) int { + return strings.Compare(NormalizeString(a), NormalizeString(b)) +} From d21b5019c03340faceee52f7bbf3c3faacbd83a2 Mon Sep 17 00:00:00 2001 From: ullbergm Date: Mon, 31 Oct 2022 08:51:28 -0400 Subject: [PATCH 4/4] Fix app groups (#1) fix: Case-insensitive matching when adding custom apps to the app groups --- internal/hajimari/customapps/customapps.go | 5 ++--- internal/kube/wrappers/ingress.go | 4 ++-- internal/util/strings/strings.go | 5 +++++ 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/internal/hajimari/customapps/customapps.go b/internal/hajimari/customapps/customapps.go index 380e334c..0fe69cc6 100644 --- a/internal/hajimari/customapps/customapps.go +++ b/internal/hajimari/customapps/customapps.go @@ -1,10 +1,9 @@ package customapps import ( - "strings" - "github.com/toboshii/hajimari/internal/config" "github.com/toboshii/hajimari/internal/models" + utilStrings "github.com/toboshii/hajimari/internal/util/strings" ) // List struct is used for listing hajimari apps @@ -27,7 +26,7 @@ func (al *List) Populate() *List { var customApps []models.AppGroup for _, group := range al.appConfig.CustomApps { - group.Group = strings.ToLower(group.Group) + group.Group = utilStrings.NormalizeString(group.Group) customApps = append(customApps, group) } diff --git a/internal/kube/wrappers/ingress.go b/internal/kube/wrappers/ingress.go index 5695b572..d3fc3bb9 100644 --- a/internal/kube/wrappers/ingress.go +++ b/internal/kube/wrappers/ingress.go @@ -50,9 +50,9 @@ func (iw *IngressWrapper) GetNamespace() string { // GetGroup func extracts group name from the ingress func (iw *IngressWrapper) GetGroup() string { if groupFromAnnotation := iw.GetAnnotationValue(annotations.HajimariGroupAnnotation); groupFromAnnotation != "" { - return groupFromAnnotation + return utilStrings.NormalizeString(groupFromAnnotation) } - return iw.GetNamespace() + return utilStrings.NormalizeString(iw.GetNamespace()) } // GetGroup func extracts group name from the ingress diff --git a/internal/util/strings/strings.go b/internal/util/strings/strings.go index 5a0b9d92..25f7f6ea 100644 --- a/internal/util/strings/strings.go +++ b/internal/util/strings/strings.go @@ -23,3 +23,8 @@ func ContainsBetweenDelimiter(fullString string, search string, delimiter string } return false } + +// NormalizeString trims extra spaces and changes the string to lower-case +func NormalizeString(str string) string { + return strings.TrimSpace(strings.ToLower(str)) +} \ No newline at end of file