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) {
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)
......
......@@ -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))
})
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment