From e8bb79168633506360c34385b7c6ad617d5a1423 Mon Sep 17 00:00:00 2001 From: Samuel Lorch Date: Fri, 30 Dec 2022 16:08:29 +0100 Subject: [PATCH] Add Folder Json Output --- folder/get.go | 27 ++++++++++++++------ folder/json.go | 11 ++++++++ folder/list.go | 69 +++++++++++++++++++++++++++++++++----------------- 3 files changed, 76 insertions(+), 31 deletions(-) create mode 100644 folder/json.go diff --git a/folder/get.go b/folder/get.go index edf5e72..d6350c7 100644 --- a/folder/get.go +++ b/folder/get.go @@ -2,11 +2,11 @@ package folder 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 FolderGet(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,15 +43,22 @@ func FolderGet(cmd *cobra.Command, args []string) error { defer client.Logout(context.TODO()) cmd.SilenceUsage = true - folderParentID, name, err := helper.GetFolder( - ctx, - client, - id, - ) + folder, err := client.GetFolder(ctx, id, nil) if err != nil { return fmt.Errorf("Getting Folder: %w", err) } - fmt.Printf("FolderParentID: %v\n", folderParentID) - fmt.Printf("Name: %v\n", shellescape.StripUnsafe(name)) + if jsonOutput { + jsonGroup, err := json.MarshalIndent(FolderJsonOutput{ + FolderParentID: &folder.FolderParentID, + Name: &folder.Name, + }, "", " ") + if err != nil { + return err + } + fmt.Println(string(jsonGroup)) + } else { + fmt.Printf("FolderParentID: %v\n", folder.FolderParentID) + fmt.Printf("Name: %v\n", shellescape.StripUnsafe(folder.Name)) + } return nil } diff --git a/folder/json.go b/folder/json.go new file mode 100644 index 0000000..c74b9d5 --- /dev/null +++ b/folder/json.go @@ -0,0 +1,11 @@ +package folder + +import "time" + +type FolderJsonOutput struct { + ID *string `json:"id,omitempty"` + FolderParentID *string `json:"folder_parent_id,omitempty"` + Name *string `json:"name,omitempty"` + CreatedTimestamp *time.Time `json:"created_timestamp,omitempty"` + ModifiedTimestamp *time.Time `json:"modified_timestamp,omitempty"` +} diff --git a/folder/list.go b/folder/list.go index 796c3cf..be92a52 100644 --- a/folder/list.go +++ b/folder/list.go @@ -2,6 +2,7 @@ package folder import ( "context" + "encoding/json" "fmt" "strings" "time" @@ -46,6 +47,10 @@ func FolderList(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() cmd.SilenceUsage = true @@ -64,30 +69,48 @@ func FolderList(cmd *cobra.Command, args []string) error { return fmt.Errorf("Listing Folder: %w", err) } - data := pterm.TableData{columns} - - for _, folder := range folders { - entry := make([]string, len(columns)) - for i := range columns { - switch strings.ToLower(columns[i]) { - case "id": - entry[i] = folder.ID - case "folderparentid": - entry[i] = folder.FolderParentID - case "name": - entry[i] = shellescape.StripUnsafe(folder.Name) - case "createdtimestamp": - entry[i] = folder.Created.Format(time.RFC3339) - case "modifiedtimestamp": - entry[i] = folder.Modified.Format(time.RFC3339) - default: - cmd.SilenceUsage = false - return fmt.Errorf("Unknown Column: %v", columns[i]) - } + if jsonOutput { + outputFolders := []FolderJsonOutput{} + for i := range folders { + outputFolders = append(outputFolders, FolderJsonOutput{ + ID: &folders[i].ID, + FolderParentID: &folders[i].FolderParentID, + Name: &folders[i].Name, + CreatedTimestamp: &folders[i].Created.Time, + ModifiedTimestamp: &folders[i].Modified.Time, + }) } - data = append(data, entry) - } + jsonFolders, err := json.MarshalIndent(outputFolders, "", " ") + if err != nil { + return err + } + fmt.Println(string(jsonFolders)) + } else { + data := pterm.TableData{columns} - pterm.DefaultTable.WithHasHeader().WithData(data).Render() + for _, folder := range folders { + entry := make([]string, len(columns)) + for i := range columns { + switch strings.ToLower(columns[i]) { + case "id": + entry[i] = folder.ID + case "folderparentid": + entry[i] = folder.FolderParentID + case "name": + entry[i] = shellescape.StripUnsafe(folder.Name) + case "createdtimestamp": + entry[i] = folder.Created.Format(time.RFC3339) + case "modifiedtimestamp": + entry[i] = folder.Modified.Format(time.RFC3339) + default: + cmd.SilenceUsage = false + return fmt.Errorf("Unknown Column: %v", columns[i]) + } + } + data = append(data, entry) + } + + pterm.DefaultTable.WithHasHeader().WithData(data).Render() + } return nil }