diff --git a/user/create.go b/user/create.go index 4c1b937..5d13e0f 100644 --- a/user/create.go +++ b/user/create.go @@ -2,10 +2,11 @@ package user import ( "context" + "encoding/json" "fmt" "github.com/passbolt/go-passbolt-cli/util" - "github.com/passbolt/go-passbolt/helper" + "github.com/passbolt/go-passbolt/api" "github.com/spf13/cobra" ) @@ -45,6 +46,11 @@ func UserCreate(cmd *cobra.Command, args []string) error { if err != nil { return err } + jsonOutput, err := cmd.Flags().GetBool("json") + if err != nil { + return err + } + ctx := util.GetContext() client, err := util.GetClient(ctx) @@ -54,18 +60,31 @@ func UserCreate(cmd *cobra.Command, args []string) error { defer client.Logout(context.TODO()) cmd.SilenceUsage = true - id, err := helper.CreateUser( + user, err := client.CreateUser( ctx, - client, - role, - username, - firstname, - lastname, + api.User{ + Username: username, + Profile: &api.Profile{ + FirstName: firstname, + LastName: lastname, + }, + Role: &api.Role{ + Name: role, + }, + }, ) if err != nil { return fmt.Errorf("Creating User: %w", err) } - fmt.Printf("UserID: %v\n", id) - return nil + if jsonOutput { + jsonUser, err := json.MarshalIndent(user, "", " ") + if err != nil { + return err + } + fmt.Println(string(jsonUser)) + } else { + fmt.Printf("UserID: %v\n", user.ID) + } + return nil } diff --git a/user/get.go b/user/get.go index 62029c8..bee1f89 100644 --- a/user/get.go +++ b/user/get.go @@ -2,11 +2,11 @@ package user import ( "context" + "encoding/json" "fmt" "github.com/alessio/shellescape" "github.com/passbolt/go-passbolt-cli/util" - "github.com/passbolt/go-passbolt/helper" "github.com/spf13/cobra" ) @@ -29,6 +29,10 @@ func UserGet(cmd *cobra.Command, args []string) error { if err != nil { return err } + jsonOutput, err := cmd.Flags().GetBool("json") + if err != nil { + return err + } ctx := util.GetContext() @@ -39,18 +43,22 @@ func UserGet(cmd *cobra.Command, args []string) error { defer client.Logout(context.TODO()) cmd.SilenceUsage = true - role, username, firstname, lastname, err := helper.GetUser( - ctx, - client, - id, - ) + user, err := client.GetUser(ctx, id) if err != nil { return fmt.Errorf("Getting User: %w", err) } - fmt.Printf("Username: %v\n", shellescape.StripUnsafe(username)) - fmt.Printf("FirstName: %v\n", shellescape.StripUnsafe(firstname)) - fmt.Printf("LastName: %v\n", shellescape.StripUnsafe(lastname)) - fmt.Printf("Role: %v\n", shellescape.StripUnsafe(role)) + if jsonOutput { + jsonUser, err := json.MarshalIndent(*user, "", " ") + if err != nil { + return err + } + fmt.Println(string(jsonUser)) + } else { + fmt.Printf("Username: %v\n", shellescape.StripUnsafe(user.Username)) + fmt.Printf("FirstName: %v\n", shellescape.StripUnsafe(user.Profile.FirstName)) + fmt.Printf("LastName: %v\n", shellescape.StripUnsafe(user.Profile.LastName)) + fmt.Printf("Role: %v\n", shellescape.StripUnsafe(user.Role.Name)) + } return nil } diff --git a/user/list.go b/user/list.go index 52644ba..e6c72ad 100644 --- a/user/list.go +++ b/user/list.go @@ -2,6 +2,7 @@ package user import ( "context" + "encoding/json" "fmt" "strings" @@ -56,7 +57,10 @@ func UserList(cmd *cobra.Command, args []string) error { if len(columns) == 0 { return fmt.Errorf("You need to specify atleast one column to return") } - + jsonOutput, err := cmd.Flags().GetBool("json") + if err != nil { + return err + } ctx := util.GetContext() client, err := util.GetClient(ctx) @@ -76,30 +80,38 @@ func UserList(cmd *cobra.Command, args []string) error { return fmt.Errorf("Listing User: %w", err) } - data := pterm.TableData{columns} + if jsonOutput { + jsonUser, err := json.MarshalIndent(users, "", " ") + if err != nil { + return err + } + fmt.Println(string(jsonUser)) + } else { + data := pterm.TableData{columns} - for _, user := range users { - entry := make([]string, len(columns)) - for i := range columns { - switch strings.ToLower(columns[i]) { - case "id": - entry[i] = user.ID - case "username": - entry[i] = shellescape.StripUnsafe(user.Username) - case "firstname": - entry[i] = shellescape.StripUnsafe(user.Profile.FirstName) - case "lastname": - entry[i] = shellescape.StripUnsafe(user.Profile.LastName) - case "role": - entry[i] = shellescape.StripUnsafe(user.Role.Name) - default: - cmd.SilenceUsage = false - return fmt.Errorf("Unknown Column: %v", columns[i]) - } - } - data = append(data, entry) - } + for _, user := range users { + entry := make([]string, len(columns)) + for i := range columns { + switch strings.ToLower(columns[i]) { + case "id": + entry[i] = user.ID + case "username": + entry[i] = shellescape.StripUnsafe(user.Username) + case "firstname": + entry[i] = shellescape.StripUnsafe(user.Profile.FirstName) + case "lastname": + entry[i] = shellescape.StripUnsafe(user.Profile.LastName) + case "role": + entry[i] = shellescape.StripUnsafe(user.Role.Name) + default: + cmd.SilenceUsage = false + return fmt.Errorf("Unknown Column: %v", columns[i]) + } + } + data = append(data, entry) + } - pterm.DefaultTable.WithHasHeader().WithData(data).Render() - return nil + pterm.DefaultTable.WithHasHeader().WithData(data).Render() + } + return nil }