diff --git a/group/create.go b/group/create.go index 4c1b8ae..b90a2f6 100644 --- a/group/create.go +++ b/group/create.go @@ -2,6 +2,7 @@ package group import ( "context" + "encoding/json" "fmt" "github.com/passbolt/go-passbolt-cli/util" @@ -40,6 +41,10 @@ func GroupCreate(cmd *cobra.Command, args []string) error { if err != nil { return err } + jsonOutput, err := cmd.Flags().GetBool("json") + if err != nil { + return err + } ops := []helper.GroupMembershipOperation{} for _, user := range users { @@ -74,6 +79,18 @@ func GroupCreate(cmd *cobra.Command, args []string) error { return fmt.Errorf("Creating Group: %w", err) } - fmt.Printf("GroupID: %v\n", id) + if jsonOutput { + jsonId, err := json.MarshalIndent( + map[string]string{"id": id}, + "", + " ", + ) + if err != nil { + return err + } + fmt.Println(string(jsonId)) + } else { + fmt.Printf("GroupID: %v\n", id) + } return nil } diff --git a/group/get.go b/group/get.go index f7dcdeb..fce1996 100644 --- a/group/get.go +++ b/group/get.go @@ -2,6 +2,7 @@ package group import ( "context" + "encoding/json" "fmt" "strings" @@ -37,6 +38,10 @@ func GroupGet(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() @@ -55,34 +60,58 @@ func GroupGet(cmd *cobra.Command, args []string) error { if err != nil { return fmt.Errorf("Getting Group: %w", err) } - fmt.Printf("Name: %v\n", name) - // Print Memberships - if len(columns) != 0 { - data := pterm.TableData{columns} - for _, membership := range memberships { - entry := make([]string, len(columns)) - for i := range columns { - switch strings.ToLower(columns[i]) { - case "userid": - entry[i] = membership.UserID - case "isgroupmanager": - entry[i] = fmt.Sprint(membership.IsGroupManager) - case "username": - entry[i] = shellescape.StripUnsafe(membership.Username) - case "userfirstname": - entry[i] = shellescape.StripUnsafe(membership.UserFirstName) - case "userlastname": - entry[i] = shellescape.StripUnsafe(membership.UserLastName) - default: - cmd.SilenceUsage = false - return fmt.Errorf("Unknown Column: %v", columns[i]) - } - } - data = append(data, entry) + if jsonOutput { + group, err := client.GetGroup(ctx, id) + if err != nil { + return err + } + jsonGroup, err := json.MarshalIndent(group, "", " ") + if err != nil { + return err } - pterm.DefaultTable.WithHasHeader().WithData(data).Render() + var tempMap map[string]interface{} + if err := json.Unmarshal(jsonGroup, &tempMap); err != nil { + return err + } + tempMap["group_users"] = memberships + jsonResult, err := json.MarshalIndent(tempMap, "", " ") + if err != nil { + return err + } + + fmt.Println(string(jsonResult)) + } else { + fmt.Printf("Name: %v\n", name) + // Print Memberships + if len(columns) != 0 { + data := pterm.TableData{columns} + + for _, membership := range memberships { + entry := make([]string, len(columns)) + for i := range columns { + switch strings.ToLower(columns[i]) { + case "userid": + entry[i] = membership.UserID + case "isgroupmanager": + entry[i] = fmt.Sprint(membership.IsGroupManager) + case "username": + entry[i] = shellescape.StripUnsafe(membership.Username) + case "userfirstname": + entry[i] = shellescape.StripUnsafe(membership.UserFirstName) + case "userlastname": + entry[i] = shellescape.StripUnsafe(membership.UserLastName) + default: + cmd.SilenceUsage = false + return fmt.Errorf("Unknown Column: %v", columns[i]) + } + } + data = append(data, entry) + } + + pterm.DefaultTable.WithHasHeader().WithData(data).Render() + } } return nil } diff --git a/group/list.go b/group/list.go index e7e8332..8b24c96 100644 --- a/group/list.go +++ b/group/list.go @@ -2,6 +2,7 @@ package group import ( "context" + "encoding/json" "fmt" "strings" @@ -45,7 +46,10 @@ func GroupList(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) @@ -56,31 +60,42 @@ func GroupList(cmd *cobra.Command, args []string) error { cmd.SilenceUsage = true resources, err := client.GetGroups(ctx, &api.GetGroupsOptions{ - FilterHasUsers: users, - FilterHasManagers: managers, + FilterHasUsers: users, + FilterHasManagers: managers, + ContainGroupsUsers: true, + ContainGroupsUsersUser: true, + ContainGroupsUsersUserProfile: true, }) if err != nil { return fmt.Errorf("Listing Group: %w", err) } - data := pterm.TableData{columns} - - for _, resource := range resources { - entry := make([]string, len(columns)) - for i := range columns { - switch strings.ToLower(columns[i]) { - case "id": - entry[i] = resource.ID - case "name": - entry[i] = shellescape.StripUnsafe(resource.Name) - default: - cmd.SilenceUsage = false - return fmt.Errorf("Unknown Column: %v", columns[i]) - } + if jsonOutput { + jsonGroup, err := json.MarshalIndent(resources, "", " ") + if err != nil { + return err } - data = append(data, entry) - } + fmt.Println(string(jsonGroup)) + } else { + data := pterm.TableData{columns} - pterm.DefaultTable.WithHasHeader().WithData(data).Render() + for _, resource := range resources { + entry := make([]string, len(columns)) + for i := range columns { + switch strings.ToLower(columns[i]) { + case "id": + entry[i] = resource.ID + case "name": + entry[i] = shellescape.StripUnsafe(resource.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 }