diff --git a/src/cmdUser/userAdd.go b/src/cmdUser/userAdd.go index 65812e592757ed8d5c4262e770afa8b94e7d2148..11f968e33cb28808f34cca54576ee9bdcffb6104 100644 --- a/src/cmdUser/userAdd.go +++ b/src/cmdUser/userAdd.go @@ -1,6 +1,7 @@ package cmdUser import ( + "errors" u "nexus-client/utils" g "nexus-client/globals" ) @@ -25,52 +26,87 @@ func (cmd *Add)PrintUsage() { } u.PrintlnErr("―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――") u.PrintlnErr("USAGE: "+cmd.Name+" email firstname lastname password [capability ...]") + u.PrintlnErr(" "+cmd.Name+" file.csv") u.PrintlnErr("―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――") + const usage string = `file.csv 5-column CSV file defining each new user: + column1 email + column2 firstname + column3 lastname + column4 password + column5 capabilities (comma-separated)` + u.PrintlnErr(usage) +} + +type cmdArgs struct { + Email string + FirstName string + LastName string + Pwd string + Caps map[string]int } func (cmd *Add)Run(args []string) int { - client := g.GetInstance().Client - host := g.GetInstance().Host argc := len(args) - if argc < 4 { + if argc >= 4 { + // Detected syntax: email firstname lastname pwd [caps] + cargs := &cmdArgs { + Email: args[0], + FirstName: args[1], + LastName: args[2], + Pwd: args[3], + Caps: make(map[string]int), + } + + if argc > 4 { + for _, cap := range args[4:] { + cargs.Caps[cap] = 1 + } + } + + if err := cmd.runRequest(cargs); err != nil { + u.PrintlnErr(err.Error()) + return 1 + } + } else if argc == 1 { + // Detected syntax: file.csv + /* + column1 email + column2 firstname + column3 lastname + column4 password + column5 capabilities (comma-separated)` + */ + + var userFields[5][] + + csvFile = args[0] + emails, err = u.ReadCSVColumn(csvFile, 0) + if err != nil { + u.PrintlnErr(err.Error()) + return 1 + } + } else { cmd.PrintUsage() return 1 } - type UserArgs struct { - Email string - FirstName string - LastName string - Pwd string - Caps map[string]int - } - - userArgs := &UserArgs { - Email: args[0], - FirstName: args[1], - LastName: args[2], - Pwd: args[3], - Caps: make(map[string]int), - } + return 0 +} - if argc > 4 { - for _, cap := range args[4:] { - userArgs.Caps[cap] = 1 - } - } +func (cmd *Add)runRequest(args *cmdArgs) error { + client := g.GetInstance().Client + host := g.GetInstance().Host - resp, err := client.R().SetBody(userArgs).Post(host+"/users") + resp, err := client.R().SetBody(args).Post(host+"/users") if err != nil { - u.PrintlnErr("Error: "+err.Error()) - return 1 + return errors.New("Error: "+err.Error()) } if resp.IsSuccess() { u.Println(resp) - return 0 + return nil } else { - u.PrintlnErr("Error: "+resp.Status()+": "+resp.String()) - return 1 + return errors.New("Error: "+resp.Status()+": "+resp.String()) } } diff --git a/src/cmdVM/vmCreate.go b/src/cmdVM/vmCreate.go index 345e37c012b788f48302a47f41c3801eefa11e1e..bfd6c6b93d7037defacf4bc967b1e754c3cff978 100644 --- a/src/cmdVM/vmCreate.go +++ b/src/cmdVM/vmCreate.go @@ -1,11 +1,8 @@ package cmdVM import ( - "os" "fmt" - "errors" "strconv" - "encoding/csv" u "nexus-client/utils" g "nexus-client/globals" ) @@ -77,7 +74,7 @@ func (cmd *Create)Run(args []string) int { // It's not a number, so we assume it's a CSV file. // Checks if the file exists. file := args[5] - csvEntries, err = cmd.getCSVColumn(file, 0) + csvEntries, err = u.ReadCSVColumn(file, 0) if err != nil { u.PrintlnErr(err.Error()) return 1 @@ -145,22 +142,3 @@ func (cmd *Create)Run(args []string) int { return statusCode } - -func (cmd *Create)getCSVColumn(csvFile string, column int) ([]string, error) { - file, err := os.Open(csvFile) - if err != nil { - return nil, errors.New("Failed opening \""+csvFile+"\"") - } - reader := csv.NewReader(file) - records, err := reader.ReadAll() - if err != nil { - return nil, errors.New("\""+csvFile+"\": "+err.Error()) - } - - var entries []string - for _, col := range(records) { - entries = append(entries, col[column]) - } - - return entries, nil -}