From 99e8d1a1e0a12d13fca9f4cd0f9ab9b3b185255d Mon Sep 17 00:00:00 2001 From: Theo S Schult <tss24@inf.ufpr.br> Date: Wed, 19 Feb 2025 19:40:15 -0300 Subject: [PATCH] Add flag for case-insensitive search --- cmd/user/delete.go | 2 +- cmd/user/show.go | 32 ++++++++++++++++++++++++-------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/cmd/user/delete.go b/cmd/user/delete.go index 2157184..bdc5c6d 100644 --- a/cmd/user/delete.go +++ b/cmd/user/delete.go @@ -78,7 +78,7 @@ func locateUser(login string) (model.User, error) { if !loginExists(users, login) { return u, fmt.Errorf("Failed to find login in LDAP database: %v", err) } - filter := searchUser(users, login, "", "", "", "", "") + filter := searchUser(users, false, login, "", "", "", "", "") if len(filter) != 1 { return u, fmt.Errorf(`More than one user matched the login given. search made: "useradm user show -l %v"`, login) diff --git a/cmd/user/show.go b/cmd/user/show.go index 0fbd4ac..dd3fb55 100644 --- a/cmd/user/show.go +++ b/cmd/user/show.go @@ -32,6 +32,8 @@ func init() { ShowCmd.Flags().StringP("status", "s", "", "Search by user status (Active/Blocked)") ShowCmd.Flags().StringP("homedir", "d", "", "Search by user homedir") + ShowCmd.Flags().BoolP("ignore", "i", false, "Make the search case-insensitive") + // At least one is required! ShowCmd.MarkFlagsOneRequired("grr", "name", "login", "group", "homedir", "status") } @@ -49,10 +51,12 @@ func searchUserFunc(cmd *cobra.Command, args []string) error { if err != nil { return err } status, err := cmd.Flags().GetString("status") if err != nil { return err } + ig, err := cmd.Flags().GetBool("ignore") + if err != nil { return err } users, err := getUsers() if err != nil { return err } - filtered := searchUser(users, login, group, name, grr, status, homedir) + filtered := searchUser(users, ig, login, group, name, grr, status, homedir) for i := range filtered { fmt.Printf("%v\n\n",filtered[i].ToString()) @@ -61,14 +65,26 @@ func searchUserFunc(cmd *cobra.Command, args []string) error { return nil } -func searchUser(users []model.User, l, g, n, r, s, h string) []model.User { +func searchUser(users []model.User, ig bool, l, g, n, r, s, h string) []model.User { + return Filter(users, func(u model.User) bool { - return (r == "" || strings.Contains(u.GRR, r)) && - (n == "" || strings.Contains(u.Name, n)) && - (l == "" || strings.Contains(u.UID, l)) && - (g == "" || strings.Contains(u.GID, g)) && - (s == "" || strings.Contains(u.Status, s)) && - (h == "" || strings.Contains(u.Homedir, h)) + contains := func(src, substr string) bool { + if ig { + return strings.Contains( // normalize if set to ignore + strings.ToLower(src), + strings.ToLower(substr), + ) + } + return strings.Contains(src, substr) + } + + // Search + return (r == "" || contains(u.GRR, r)) && + (n == "" || contains(u.Name, n)) && + (l == "" || contains(u.UID, l)) && + (g == "" || contains(u.GID, g)) && + (s == "" || contains(u.Status, s)) && + (h == "" || contains(u.Homedir, h)) }) } -- GitLab