diff --git a/src/client/cmdTemplate/templateList.go b/src/client/cmdTemplate/templateList.go index 6941a14ce5606ad066e035db5d835f590b0db1a8..d15f07a5577c14426c908063e84d41353b20f41a 100644 --- a/src/client/cmdTemplate/templateList.go +++ b/src/client/cmdTemplate/templateList.go @@ -43,13 +43,9 @@ Regex examples: u.PrintlnErr(usage) } -func (cmd *List) Run(args []string) int { - return cmd.printFilteredTemplates(args, "/templates") -} - -// Prints a list of filtered templates for a given route. +// Prints a list of filtered templates. // Return 0 if everything went well or 1 in case of failure. -func (cmd *List) printFilteredTemplates(args []string, route string) int { +func (cmd *List) Run(args []string) int { if len(args) < 1 { cmd.PrintUsage() return 1 @@ -67,7 +63,7 @@ func (cmd *List) printFilteredTemplates(args []string, route string) int { args = u.RemoveArgAtIndex(args, foundLongOutputFlag) } - templates, err := cmd.getFilteredTemplates(route, args) + templates, err := cmd.getFilteredTemplates(args) if err != nil { u.PrintlnErr(err) return 1 @@ -121,7 +117,7 @@ func (cmd *List) printFilteredTemplates(args []string, route string) int { // // "." -> matches everything // "bla" -> matches any template name containing "bla" -func (cmd *List) getFilteredTemplates(route string, patterns []string) ([]t.TemplateSerialized, error) { +func (cmd *List) getFilteredTemplates(patterns []string) ([]t.TemplateSerialized, error) { if len(patterns) < 1 { return nil, errors.New("At least one ID or regex must be specified") } diff --git a/src/client/cmdUser/userList.go b/src/client/cmdUser/userList.go index 196d19e65f3f6b5b60877dcef46c0f09174f7d75..bc02c9150121f2046b2c322babb451051d2c57fb 100644 --- a/src/client/cmdUser/userList.go +++ b/src/client/cmdUser/userList.go @@ -4,7 +4,7 @@ import ( "fmt" u "nexus-client/utils" "nexus-common/params" - g "nexus-libclient/globals" + libclient "nexus-libclient/user" "regexp" "strings" ) @@ -34,10 +34,6 @@ func (cmd *List) PrintUsage() { printRegexUsageDetails() } -func (cmd *List) Run(args []string) int { - return cmd.printFilteredUsers(args, "/users") -} - // Prints a list of filtered users for a given route. // The filter is based on regexes. // Remark: the regex matches the user email, first name and last name and is case-insensitive. @@ -46,7 +42,7 @@ func (cmd *List) Run(args []string) int { // "" -> matches everything // "." -> matches everything // "bla" -> matches any user containing "bla" -func (cmd *List) printFilteredUsers(args []string, route string) int { +func (cmd *List) Run(args []string) int { if len(args) < 1 { cmd.PrintUsage() return 1 @@ -64,78 +60,64 @@ func (cmd *List) printFilteredUsers(args []string, route string) int { args = u.RemoveArgAtIndex(args, foundLongOutputFlag) } - client := g.GetInstance().Client - host := g.GetInstance().Host - - resp, err := client.R().Get(host + route) + users, err := libclient.GetUsers() if err != nil { - u.PrintlnErr("Error: " + err.Error()) + u.PrintlnErr(err) return 1 } - if resp.IsSuccess() { - users, err := deserializeUsers(resp) - if err != nil { - u.PrintlnErr("Error: " + err.Error()) - return 1 - } - - userList := []params.UserWithoutPwd{} - - for _, user := range users { - for _, regex := range args { - fieldsToMatch := user.Email + " " + user.FirstName + " " + user.LastName - match, err := regexp.MatchString(strings.ToLower(regex), strings.ToLower(fieldsToMatch)) - if err != nil { - u.PrintlnErr("Error matching \"" + regex + "\": " + err.Error()) - } else { - if match { - userList = append(userList, user) - break - } + userList := []params.UserWithoutPwd{} + + for _, user := range users { + for _, regex := range args { + fieldsToMatch := user.Email + " " + user.FirstName + " " + user.LastName + match, err := regexp.MatchString(strings.ToLower(regex), strings.ToLower(fieldsToMatch)) + if err != nil { + u.PrintlnErr("Error matching \"" + regex + "\": " + err.Error()) + } else { + if match { + userList = append(userList, user) + break } } } + } - if len(userList) == 0 { - u.PrintlnErr("Error: user(s) not found.") - return 1 - } + if len(userList) == 0 { + u.PrintlnErr("Error: user(s) not found.") + return 1 + } - if foundLongOutputFlag >= 0 { - for _, user := range userList { - u.Println(user.String()) + if foundLongOutputFlag >= 0 { + for _, user := range userList { + u.Println(user.String()) + } + } else { + // Compute the length of the longest LastName, FirstName and Email (used for padding columns) + lastNameLen := 0 + firstNameLen := 0 + emailLen := 0 + for _, user := range userList { + l := len(user.LastName) + if l > lastNameLen { + lastNameLen = l } - } else { - // Compute the length of the longest LastName, FirstName and Email (used for padding columns) - lastNameLen := 0 - firstNameLen := 0 - emailLen := 0 - for _, user := range userList { - l := len(user.LastName) - if l > lastNameLen { - lastNameLen = l - } - l = len(user.FirstName) - if l > firstNameLen { - firstNameLen = l - } - l = len(user.Email) - if l > emailLen { - emailLen = l - } + l = len(user.FirstName) + if l > firstNameLen { + firstNameLen = l } - - paddedFmt := fmt.Sprintf("%%-%ds | %%-%ds | %%-%ds\n", lastNameLen, firstNameLen, emailLen) - - for _, user := range userList { - fmt.Printf(paddedFmt, user.LastName, user.FirstName, user.Email) + l = len(user.Email) + if l > emailLen { + emailLen = l } } - return 0 - } else { - u.PrintlnErr(resp.Status() + ": " + resp.String()) - return 1 + paddedFmt := fmt.Sprintf("%%-%ds | %%-%ds | %%-%ds\n", lastNameLen, firstNameLen, emailLen) + + for _, user := range userList { + fmt.Printf(paddedFmt, user.LastName, user.FirstName, user.Email) + } } + + return 0 } diff --git a/src/libclient/user/helper.go b/src/libclient/user/helper.go new file mode 100644 index 0000000000000000000000000000000000000000..ee90383bbf3ad517fa606bae9f03b3e429202529 --- /dev/null +++ b/src/libclient/user/helper.go @@ -0,0 +1,26 @@ +package user + +import ( + "encoding/json" + "nexus-common/params" + + "github.com/go-resty/resty/v2" +) + +// Deserialize a list of users from an http response (no filtering). +func deserializeUsers(resp *resty.Response) ([]params.UserWithoutPwd, error) { + users := []params.UserWithoutPwd{} + if err := json.Unmarshal(resp.Body(), &users); err != nil { + return nil, err + } + return users, nil +} + +// Deserialize a single user from an http response. +func deserializeUser(resp *resty.Response) (*params.UserWithoutPwd, error) { + var user *params.UserWithoutPwd = ¶ms.UserWithoutPwd{} + if err := json.Unmarshal(resp.Body(), &user); err != nil { + return user, err + } + return user, nil +} diff --git a/src/libclient/user/userCreate.go b/src/libclient/user/userCreate.go index c0aba07a040c4eafc3953aff05f5be8159720fe8..a08f047afd50dddfe1b6ed00e8b18e9a29a85cbc 100644 --- a/src/libclient/user/userCreate.go +++ b/src/libclient/user/userCreate.go @@ -1,4 +1,4 @@ -package template +package user import ( "nexus-common/params" diff --git a/src/libclient/user/userDel.go b/src/libclient/user/userDel.go index 776ec3a9ce812447e391217686bd1dbf8e452f6d..9aaa78b39c034c79d431a24ef93e65b3423a7871 100644 --- a/src/libclient/user/userDel.go +++ b/src/libclient/user/userDel.go @@ -1,4 +1,4 @@ -package template +package user import ( g "nexus-libclient/globals" diff --git a/src/libclient/user/userList.go b/src/libclient/user/userList.go new file mode 100644 index 0000000000000000000000000000000000000000..a15fbf624dc72ca3824d1eac8594f57b037cd830 --- /dev/null +++ b/src/libclient/user/userList.go @@ -0,0 +1,48 @@ +package user + +import ( + "nexus-common/params" + g "nexus-libclient/globals" + "nexus-libclient/response" +) + +func GetUsers() ([]params.UserWithoutPwd, error) { + client := g.GetInstance().Client + host := g.GetInstance().Host + + resp, err := client.R().Get(host + "/users") + if err != nil { + return nil, err + } + + if resp.IsSuccess() { + templates, err := deserializeUsers(resp) + if err != nil { + return nil, err + } + return templates, nil + } else { + return nil, response.ErrorToMsg(resp) + } +} + +// NOTE: this route is not implemented in the backend yet. +func GetUser(email string) (*params.UserWithoutPwd, error) { + client := g.GetInstance().Client + host := g.GetInstance().Host + + resp, err := client.R().Get(host + "/users/" + email) + if err != nil { + return nil, err + } + + if resp.IsSuccess() { + template, err := deserializeUser(resp) + if err != nil { + return nil, err + } + return template, nil + } else { + return nil, response.ErrorToMsg(resp) + } +}