Skip to content
Snippets Groups Projects
Commit eb6191f0 authored by Florent Gluck's avatar Florent Gluck
Browse files

Reworked client code to better structure it

parent dfc598c4
Branches
No related tags found
No related merge requests found
package cmdTemplate
import (
"fmt"
"errors"
"regexp"
"strings"
......@@ -40,68 +39,6 @@ Regex examples:
u.PrintlnErr(usage)
}
// Prints a list of filtered templates for a given route.
// Return 0 if everything went well or 1 in case of failure.
func printFilteredTemplates(c cmd.Command, args []string, route string) int {
if len(args) < 1 {
c.PrintUsage()
return 1
}
// Check if a "-l" argument is specified
foundLongOutputFlag := -1
for idx, arg := range args {
if arg == "-l" {
foundLongOutputFlag = idx
}
}
if foundLongOutputFlag >= 0 {
args = u.RemoveArgAtIndex(args, foundLongOutputFlag)
}
templates, err := getFilteredTemplates(route, args)
if err != nil {
u.PrintlnErr("Error: "+err.Error())
return 1
}
if foundLongOutputFlag >= 0 {
for _, template := range templates {
str, err := template.String()
if err != nil {
u.PrintlnErr("Failed decoding template "+template.ID.String()+" to string. Skipped.")
} else {
u.Println(str)
}
}
} else {
// Compute the length of the longest name and access (used for padding columns)
nameLen := 0
idLen := 0
accessLen := 0
for _, template := range templates {
l := len(template.Name)
if l > nameLen {
nameLen = l
}
idLen = len(template.ID.String()) // ID is a UUID of constant length
l = len(template.Access)
if l > accessLen {
accessLen = l
}
}
paddedFmt := fmt.Sprintf("%%-%ds | %%-%ds | %%-%ds\n",nameLen, idLen, accessLen)
for _, template := range templates {
fmt.Printf(paddedFmt, template.Name, template.ID, template.Access)
}
}
return 0
}
// Returns a list of filtered templates for a given route.
// Filters are based on patterns describing IDs or regexes.
// Patterns can either be:
......
package cmdTemplate
import (
"fmt"
u "nexus-client/utils"
)
......@@ -30,5 +31,67 @@ func (cmd *List)PrintUsage() {
}
func (cmd *List)Run(args []string) int {
return printFilteredTemplates(cmd, args, "/templates")
return cmd.printFilteredTemplates(args, "/templates")
}
// Prints a list of filtered templates for a given route.
// Return 0 if everything went well or 1 in case of failure.
func (cmd *List)printFilteredTemplates(args []string, route string) int {
if len(args) < 1 {
cmd.PrintUsage()
return 1
}
// Check if a "-l" argument is specified
foundLongOutputFlag := -1
for idx, arg := range args {
if arg == "-l" {
foundLongOutputFlag = idx
}
}
if foundLongOutputFlag >= 0 {
args = u.RemoveArgAtIndex(args, foundLongOutputFlag)
}
templates, err := getFilteredTemplates(route, args)
if err != nil {
u.PrintlnErr("Error: "+err.Error())
return 1
}
if foundLongOutputFlag >= 0 {
for _, template := range templates {
str, err := template.String()
if err != nil {
u.PrintlnErr("Failed decoding template "+template.ID.String()+" to string. Skipped.")
} else {
u.Println(str)
}
}
} else {
// Compute the length of the longest name and access (used for padding columns)
nameLen := 0
idLen := 0
accessLen := 0
for _, template := range templates {
l := len(template.Name)
if l > nameLen {
nameLen = l
}
idLen = len(template.ID.String()) // ID is a UUID of constant length
l = len(template.Access)
if l > accessLen {
accessLen = l
}
}
paddedFmt := fmt.Sprintf("%%-%ds | %%-%ds | %%-%ds\n",nameLen, idLen, accessLen)
for _, template := range templates {
fmt.Printf(paddedFmt, template.Name, template.ID, template.Access)
}
}
return 0
}
package cmdUser
import (
"fmt"
"regexp"
"strings"
"encoding/json"
"nexus-client/cmd"
u "nexus-client/utils"
g "nexus-client/globals"
"github.com/go-resty/resty/v2"
)
......@@ -40,108 +36,7 @@ Regex examples:
u.PrintlnErr(usage)
}
// 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.
// Regular expression examples:
// "" -> matches everything
// "." -> matches everything
// "bla" -> matches any user containing "bla"
func printFilteredUsers(c cmd.Command, args []string, route string) int {
if len(args) < 1 {
c.PrintUsage()
return 1
}
// Check if a "-l" argument is specified
foundLongOutputFlag := -1
for idx, arg := range args {
if arg == "-l" {
foundLongOutputFlag = idx
}
}
if foundLongOutputFlag >= 0 {
args = u.RemoveArgAtIndex(args, foundLongOutputFlag)
}
client := g.GetInstance().Client
host := g.GetInstance().Host
resp, err := client.R().Get(host + route)
if err != nil {
u.PrintlnErr("Error: " + err.Error())
return 1
}
if resp.IsSuccess() {
users, err := getUsers(resp)
if err != nil {
u.PrintlnErr("Error: " + err.Error())
return 1
}
userList := []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 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
}
l = len(user.FirstName)
if l > firstNameLen {
firstNameLen = l
}
l = len(user.Email)
if l > emailLen {
emailLen = l
}
}
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
} else {
u.PrintlnErr("Error: " + resp.Status() + ": " + resp.String())
return 1
}
}
func getUsers(resp *resty.Response) ([]UserWithoutPwd, error) {
func deserializeUsers(resp *resty.Response) ([]UserWithoutPwd, error) {
users := []UserWithoutPwd{}
if err := json.Unmarshal(resp.Body(), &users); err != nil {
return nil, err
......
package cmdUser
import (
"fmt"
"regexp"
"strings"
u "nexus-client/utils"
g "nexus-client/globals"
)
type List struct {
......@@ -30,5 +34,106 @@ func (cmd *List)PrintUsage() {
}
func (cmd *List)Run(args []string) int {
return printFilteredUsers(cmd, args, "/users")
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.
// Regular expression examples:
// "" -> matches everything
// "." -> matches everything
// "bla" -> matches any user containing "bla"
func (cmd *List)printFilteredUsers(args []string, route string) int {
if len(args) < 1 {
cmd.PrintUsage()
return 1
}
// Check if a "-l" argument is specified
foundLongOutputFlag := -1
for idx, arg := range args {
if arg == "-l" {
foundLongOutputFlag = idx
}
}
if foundLongOutputFlag >= 0 {
args = u.RemoveArgAtIndex(args, foundLongOutputFlag)
}
client := g.GetInstance().Client
host := g.GetInstance().Host
resp, err := client.R().Get(host + route)
if err != nil {
u.PrintlnErr("Error: " + err.Error())
return 1
}
if resp.IsSuccess() {
users, err := deserializeUsers(resp)
if err != nil {
u.PrintlnErr("Error: " + err.Error())
return 1
}
userList := []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 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
}
l = len(user.FirstName)
if l > firstNameLen {
firstNameLen = l
}
l = len(user.Email)
if l > emailLen {
emailLen = l
}
}
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
} else {
u.PrintlnErr("Error: " + resp.Status() + ": " + resp.String())
return 1
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment