Skip to content

Commit 269e117

Browse files
committed
Add Resource Json Output
1 parent e8bb791 commit 269e117

File tree

3 files changed

+109
-42
lines changed

3 files changed

+109
-42
lines changed

resource/get.go

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package resource
22

33
import (
44
"context"
5+
"encoding/json"
56
"fmt"
67

78
"github.com/alessio/shellescape"
@@ -29,6 +30,10 @@ func ResourceGet(cmd *cobra.Command, args []string) error {
2930
if err != nil {
3031
return err
3132
}
33+
jsonOutput, err := cmd.Flags().GetBool("json")
34+
if err != nil {
35+
return err
36+
}
3237

3338
ctx := util.GetContext()
3439

@@ -47,11 +52,27 @@ func ResourceGet(cmd *cobra.Command, args []string) error {
4752
if err != nil {
4853
return fmt.Errorf("Getting Resource: %w", err)
4954
}
50-
fmt.Printf("FolderParentID: %v\n", folderParentID)
51-
fmt.Printf("Name: %v\n", shellescape.StripUnsafe(name))
52-
fmt.Printf("Username: %v\n", shellescape.StripUnsafe(username))
53-
fmt.Printf("URI: %v\n", shellescape.StripUnsafe(uri))
54-
fmt.Printf("Password: %v\n", shellescape.StripUnsafe(password))
55-
fmt.Printf("Description: %v\n", shellescape.StripUnsafe(description))
55+
56+
if jsonOutput {
57+
jsonResource, err := json.MarshalIndent(ResourceJsonOutput{
58+
FolderParentID: &folderParentID,
59+
Name: &name,
60+
Username: &username,
61+
URI: &uri,
62+
Password: &password,
63+
Description: &description,
64+
}, "", " ")
65+
if err != nil {
66+
return err
67+
}
68+
fmt.Println(string(jsonResource))
69+
} else {
70+
fmt.Printf("FolderParentID: %v\n", folderParentID)
71+
fmt.Printf("Name: %v\n", shellescape.StripUnsafe(name))
72+
fmt.Printf("Username: %v\n", shellescape.StripUnsafe(username))
73+
fmt.Printf("URI: %v\n", shellescape.StripUnsafe(uri))
74+
fmt.Printf("Password: %v\n", shellescape.StripUnsafe(password))
75+
fmt.Printf("Description: %v\n", shellescape.StripUnsafe(description))
76+
}
5677
return nil
5778
}

resource/json.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package resource
2+
3+
import "time"
4+
5+
type ResourceJsonOutput struct {
6+
ID *string `json:"id,omitempty"`
7+
FolderParentID *string `json:"folder_parent_id,omitempty"`
8+
Name *string `json:"name,omitempty"`
9+
Username *string `json:"username,omitempty"`
10+
URI *string `json:"uri,omitempty"`
11+
Password *string `json:"password,omitempty"`
12+
Description *string `json:"description,omitempty"`
13+
CreatedTimestamp *time.Time `json:"created_timestamp,omitempty"`
14+
ModifiedTimestamp *time.Time `json:"modified_timestamp,omitempty"`
15+
}

resource/list.go

Lines changed: 67 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package resource
22

33
import (
44
"context"
5+
"encoding/json"
56
"fmt"
67
"strings"
78
"time"
@@ -58,6 +59,10 @@ func ResourceList(cmd *cobra.Command, args []string) error {
5859
if len(columns) == 0 {
5960
return fmt.Errorf("You need to specify atleast one column to return")
6061
}
62+
jsonOutput, err := cmd.Flags().GetBool("json")
63+
if err != nil {
64+
return err
65+
}
6166

6267
ctx := util.GetContext()
6368

@@ -78,46 +83,72 @@ func ResourceList(cmd *cobra.Command, args []string) error {
7883
return fmt.Errorf("Listing Resource: %w", err)
7984
}
8085

81-
data := pterm.TableData{columns}
86+
if jsonOutput {
87+
outputResources := []ResourceJsonOutput{}
88+
for i := range resources {
89+
_, _, _, _, pass, desc, err := helper.GetResource(ctx, client, resources[i].ID)
90+
if err != nil {
91+
return fmt.Errorf("Get Resource %w", err)
92+
}
93+
outputResources = append(outputResources, ResourceJsonOutput{
94+
ID: &resources[i].ID,
95+
FolderParentID: &resources[i].FolderParentID,
96+
Name: &resources[i].Name,
97+
Username: &resources[i].Username,
98+
URI: &resources[i].URI,
99+
Password: &pass,
100+
Description: &desc,
101+
CreatedTimestamp: &resources[i].Created.Time,
102+
ModifiedTimestamp: &resources[i].Modified.Time,
103+
})
104+
}
105+
jsonResources, err := json.MarshalIndent(outputResources, "", " ")
106+
if err != nil {
107+
return err
108+
}
109+
fmt.Println(string(jsonResources))
110+
} else {
111+
data := pterm.TableData{columns}
82112

83-
for _, resource := range resources {
84-
entry := make([]string, len(columns))
85-
for i := range columns {
86-
switch strings.ToLower(columns[i]) {
87-
case "id":
88-
entry[i] = resource.ID
89-
case "folderparentid":
90-
entry[i] = resource.FolderParentID
91-
case "name":
92-
entry[i] = shellescape.StripUnsafe(resource.Name)
93-
case "username":
94-
entry[i] = shellescape.StripUnsafe(resource.Username)
95-
case "uri":
96-
entry[i] = shellescape.StripUnsafe(resource.URI)
97-
case "password":
98-
_, _, _, _, pass, _, err := helper.GetResource(ctx, client, resource.ID)
99-
if err != nil {
100-
return fmt.Errorf("Get Resource %w", err)
101-
}
102-
entry[i] = shellescape.StripUnsafe(pass)
103-
case "description":
104-
_, _, _, _, _, desc, err := helper.GetResource(ctx, client, resource.ID)
105-
if err != nil {
106-
return fmt.Errorf("Get Resource %w", err)
113+
for _, resource := range resources {
114+
entry := make([]string, len(columns))
115+
for i := range columns {
116+
switch strings.ToLower(columns[i]) {
117+
case "id":
118+
entry[i] = resource.ID
119+
case "folderparentid":
120+
entry[i] = resource.FolderParentID
121+
case "name":
122+
entry[i] = shellescape.StripUnsafe(resource.Name)
123+
case "username":
124+
entry[i] = shellescape.StripUnsafe(resource.Username)
125+
case "uri":
126+
entry[i] = shellescape.StripUnsafe(resource.URI)
127+
case "password":
128+
_, _, _, _, pass, _, err := helper.GetResource(ctx, client, resource.ID)
129+
if err != nil {
130+
return fmt.Errorf("Get Resource %w", err)
131+
}
132+
entry[i] = shellescape.StripUnsafe(pass)
133+
case "description":
134+
_, _, _, _, _, desc, err := helper.GetResource(ctx, client, resource.ID)
135+
if err != nil {
136+
return fmt.Errorf("Get Resource %w", err)
137+
}
138+
entry[i] = shellescape.StripUnsafe(desc)
139+
case "createdtimestamp":
140+
entry[i] = resource.Created.Format(time.RFC3339)
141+
case "modifiedtimestamp":
142+
entry[i] = resource.Modified.Format(time.RFC3339)
143+
default:
144+
cmd.SilenceUsage = false
145+
return fmt.Errorf("Unknown Column: %v", columns[i])
107146
}
108-
entry[i] = shellescape.StripUnsafe(desc)
109-
case "createdtimestamp":
110-
entry[i] = resource.Created.Format(time.RFC3339)
111-
case "modifiedtimestamp":
112-
entry[i] = resource.Modified.Format(time.RFC3339)
113-
default:
114-
cmd.SilenceUsage = false
115-
return fmt.Errorf("Unknown Column: %v", columns[i])
116147
}
148+
data = append(data, entry)
117149
}
118-
data = append(data, entry)
119-
}
120150

121-
pterm.DefaultTable.WithHasHeader().WithData(data).Render()
151+
pterm.DefaultTable.WithHasHeader().WithData(data).Render()
152+
}
122153
return nil
123154
}

0 commit comments

Comments
 (0)