Skip to content
Snippets Groups Projects
Commit 99e8d1a1 authored by Theo's avatar Theo :troll:
Browse files

Add flag for case-insensitive search

parent 5f812d79
No related branches found
No related tags found
No related merge requests found
...@@ -78,7 +78,7 @@ func locateUser(login string) (model.User, error) { ...@@ -78,7 +78,7 @@ func locateUser(login string) (model.User, error) {
if !loginExists(users, login) { if !loginExists(users, login) {
return u, fmt.Errorf("Failed to find login in LDAP database: %v", err) 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 { if len(filter) != 1 {
return u, fmt.Errorf(`More than one user matched the login given. return u, fmt.Errorf(`More than one user matched the login given.
search made: "useradm user show -l %v"`, login) search made: "useradm user show -l %v"`, login)
......
...@@ -32,6 +32,8 @@ func init() { ...@@ -32,6 +32,8 @@ func init() {
ShowCmd.Flags().StringP("status", "s", "", "Search by user status (Active/Blocked)") ShowCmd.Flags().StringP("status", "s", "", "Search by user status (Active/Blocked)")
ShowCmd.Flags().StringP("homedir", "d", "", "Search by user homedir") 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! // At least one is required!
ShowCmd.MarkFlagsOneRequired("grr", "name", "login", "group", "homedir", "status") ShowCmd.MarkFlagsOneRequired("grr", "name", "login", "group", "homedir", "status")
} }
...@@ -49,10 +51,12 @@ func searchUserFunc(cmd *cobra.Command, args []string) error { ...@@ -49,10 +51,12 @@ func searchUserFunc(cmd *cobra.Command, args []string) error {
if err != nil { return err } if err != nil { return err }
status, err := cmd.Flags().GetString("status") status, err := cmd.Flags().GetString("status")
if err != nil { return err } if err != nil { return err }
ig, err := cmd.Flags().GetBool("ignore")
if err != nil { return err }
users, err := getUsers() users, err := getUsers()
if err != nil { return err } 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 { for i := range filtered {
fmt.Printf("%v\n\n",filtered[i].ToString()) fmt.Printf("%v\n\n",filtered[i].ToString())
...@@ -61,14 +65,26 @@ func searchUserFunc(cmd *cobra.Command, args []string) error { ...@@ -61,14 +65,26 @@ func searchUserFunc(cmd *cobra.Command, args []string) error {
return nil 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 Filter(users, func(u model.User) bool {
return (r == "" || strings.Contains(u.GRR, r)) && contains := func(src, substr string) bool {
(n == "" || strings.Contains(u.Name, n)) && if ig {
(l == "" || strings.Contains(u.UID, l)) && return strings.Contains( // normalize if set to ignore
(g == "" || strings.Contains(u.GID, g)) && strings.ToLower(src),
(s == "" || strings.Contains(u.Status, s)) && strings.ToLower(substr),
(h == "" || strings.Contains(u.Homedir, h)) )
}
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))
}) })
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment