55 "io"
66 "os"
77
8- "github.com/olekukonko/tablewriter"
9-
108 "github.com/ovh/okms-cli/cmd/okms/common"
119 "github.com/ovh/okms-cli/common/flagsmgmt"
1210 "github.com/ovh/okms-cli/common/flagsmgmt/restflags"
@@ -37,7 +35,7 @@ func secretListCmd() *cobra.Command {
3735 if cmd .Flag ("output" ).Value .String () == string (flagsmgmt .JSON_OUTPUT_FORMAT ) {
3836 output .JsonPrint (resp )
3937 } else if resp .Results != nil {
40- renderSecretListTable (resp . Results )
38+ renderList (resp )
4139 }
4240 },
4341 }
@@ -52,7 +50,6 @@ func secretPostCmd() *cobra.Command {
5250 casRequired bool
5351 maxVersions uint32
5452 deactivateVersionAfter string
55- // TODO Add customMetadata ? How ?
5653 )
5754 cmd := & cobra.Command {
5855 Use : "create [FLAGS] PATH [DATA]" ,
@@ -88,29 +85,7 @@ func secretPostCmd() *cobra.Command {
8885 if cmd .Flag ("output" ).Value .String () == string (flagsmgmt .JSON_OUTPUT_FORMAT ) {
8986 output .JsonPrint (resp )
9087 } else {
91- casRequired = utils .DerefOrDefault (resp .Metadata .CasRequired )
92- createdAt := utils .DerefOrDefault (resp .Metadata .CreatedAt )
93- deactivateVersionAfter := utils .DerefOrDefault (resp .Metadata .DeactivateVersionAfter )
94- maxVersions := utils .DerefOrDefault (resp .Metadata .MaxVersions )
95-
96- var customMetadata string
97- if resp .Metadata .CustomMetadata != nil {
98- customMetadata = fmt .Sprintf ("%v" , * resp .Metadata .CustomMetadata )
99- }
100-
101- fmt .Println ("Metadata" )
102- table := tablewriter .NewWriter (os .Stdout )
103- table .SetHeader ([]string {"Key" , "Value" })
104- table .AppendBulk ([][]string {
105- {"Cas Required" , fmt .Sprintf ("%t" , casRequired )},
106- {"Created at" , createdAt },
107- {"Deactivate Version After" , deactivateVersionAfter },
108- {"Max Versions" , fmt .Sprintf ("%d" , maxVersions )},
109- {"Custom metadata" , customMetadata },
110- {"Path" , * resp .Path }, // Path is displayed in the metadata Table, which can be confusing since it's not a metadata
111- // TODO : improve path display, maybe on top of the table `Path: ...`
112- })
113- table .Render ()
88+ renderMetadata (utils .DerefOrDefault (resp .Path ), utils .DerefOrDefault (resp .Metadata ))
11489 }
11590 },
11691 }
@@ -135,37 +110,9 @@ func secretGetCmd() *cobra.Command {
135110 if cmd .Flag ("output" ).Value .String () == string (flagsmgmt .JSON_OUTPUT_FORMAT ) {
136111 output .JsonPrint (resp )
137112 } else {
138- casRequired := utils .DerefOrDefault (resp .Metadata .CasRequired )
139- createdAt := utils .DerefOrDefault (resp .Metadata .CreatedAt )
140- deactivateVersionAfter := utils .DerefOrDefault (resp .Metadata .DeactivateVersionAfter )
141- maxVersions := utils .DerefOrDefault (resp .Metadata .MaxVersions )
142-
143- var customMetadata string
144- if resp .Metadata .CustomMetadata != nil {
145- customMetadata = fmt .Sprintf ("%v" , * resp .Metadata .CustomMetadata )
146- }
147-
148- fmt .Println ("Metadata" )
149- table := tablewriter .NewWriter (os .Stdout )
150- table .SetHeader ([]string {"Key" , "Value" })
151- table .AppendBulk ([][]string {
152- {"Cas Required" , fmt .Sprintf ("%t" , casRequired )},
153- {"Created at" , createdAt },
154- {"Deactivate Version After" , deactivateVersionAfter },
155- {"Max Versions" , fmt .Sprintf ("%d" , maxVersions )},
156- {"Custom metadata" , customMetadata },
157- {"Path" , * resp .Path },
158- })
159- table .Render ()
160-
113+ renderMetadata (utils .DerefOrDefault (resp .Path ), utils .DerefOrDefault (resp .Metadata ))
161114 if includeData && resp .Version .Data != nil {
162- fmt .Println ("Data" )
163- tableData := tablewriter .NewWriter (os .Stdout )
164- tableData .SetHeader ([]string {"Key" , "Value" })
165- for k , v := range * resp .Version .Data {
166- tableData .Append ([]string {k , fmt .Sprintf ("%v" , v )})
167- }
168- tableData .Render ()
115+ renderDataVersion (* resp .Version .Data )
169116 }
170117 }
171118 },
@@ -182,7 +129,6 @@ func secretPutCmd() *cobra.Command {
182129 maxVersions uint32
183130 deactivateVersionAfter string
184131 cas uint32
185- // TODO Add customMetadata ? How ?
186132 )
187133 cmd := & cobra.Command {
188134 Use : "update [FLAGS] PATH [DATA]" ,
@@ -220,28 +166,63 @@ func secretPutCmd() *cobra.Command {
220166 if cmd .Flag ("output" ).Value .String () == string (flagsmgmt .JSON_OUTPUT_FORMAT ) {
221167 output .JsonPrint (resp )
222168 } else {
223- casRequired = utils .DerefOrDefault (resp .Metadata . CasRequired )
224- createdAt := utils . DerefOrDefault ( resp . Metadata . CreatedAt )
225- deactivateVersionAfter := utils . DerefOrDefault ( resp . Metadata . DeactivateVersionAfter )
226- maxVersions := utils . DerefOrDefault ( resp . Metadata . MaxVersions )
169+ renderMetadata ( utils . DerefOrDefault ( resp . Path ), utils .DerefOrDefault (resp .Metadata ) )
170+ }
171+ },
172+ }
227173
228- var customMetadata string
229- if resp . Metadata . CustomMetadata != nil {
230- customMetadata = fmt . Sprintf ( "%v " , * resp . Metadata . CustomMetadata )
231- }
174+ cmd . Flags (). BoolVar ( & casRequired , "cas-required" , false , "The cas parameter will be required for all write requests if set to true" )
175+ cmd . Flags (). Uint32Var ( & maxVersions , "max-versions" , 10 , "The number of versions to keep (10 default)" )
176+ cmd . Flags (). StringVar ( & deactivateVersionAfter , "deactivate-version-after " , "" , "Time duration before a version is deactivated" )
177+ cmd . Flags (). Uint32Var ( & cas , "cas" , 0 , "Secret version number. Required if cas-required is set to true." )
232178
233- fmt .Println ("Metadata" )
234- table := tablewriter .NewWriter (os .Stdout )
235- table .SetHeader ([]string {"Key" , "Value" })
236- table .AppendBulk ([][]string {
237- {"Cas Required" , fmt .Sprintf ("%t" , casRequired )},
238- {"Created at" , createdAt },
239- {"Deactivate Version After" , deactivateVersionAfter },
240- {"Max Versions" , fmt .Sprintf ("%d" , maxVersions )},
241- {"Custom metadata" , customMetadata },
242- {"Path" , * resp .Path },
243- })
244- table .Render ()
179+ return cmd
180+ }
181+
182+ func secretPutCustomMetadataCmd () * cobra.Command {
183+ var (
184+ casRequired bool
185+ maxVersions uint32
186+ deactivateVersionAfter string
187+ cas uint32
188+ )
189+ cmd := & cobra.Command {
190+ Use : "update-metadata [FLAGS] PATH [CUSTOM-DATA]" ,
191+ Short : "Update a secret" ,
192+ Args : cobra .MinimumNArgs (2 ),
193+ Run : func (cmd * cobra.Command , args []string ) {
194+ in := io .Reader (os .Stdin )
195+ body := types.PutSecretV2Request {
196+ Metadata : & types.SecretV2MetadataShort {},
197+ Version : & types.SecretV2VersionShort {},
198+ }
199+ var c * uint32
200+ if cmd .Flag ("cas" ).Changed {
201+ c = & cas
202+ }
203+
204+ if cmd .Flag ("cas-required" ).Changed {
205+ body .Metadata .CasRequired = & casRequired
206+ }
207+ if cmd .Flag ("max-versions" ).Changed {
208+ body .Metadata .MaxVersions = & maxVersions
209+ }
210+ if cmd .Flag ("deactivate-version-after" ).Changed {
211+ body .Metadata .DeactivateVersionAfter = & deactivateVersionAfter
212+ }
213+
214+ customMetadata , err := restflags .ParseArgsCustomMetadata (in , args [1 :])
215+ if err != nil {
216+ fmt .Fprintln (os .Stderr , "Failed to parse K=V data:" , err )
217+ os .Exit (1 )
218+ }
219+ body .Metadata .CustomMetadata = utils .PtrTo (types .SecretV2CustomMetadata (customMetadata ))
220+
221+ resp := exit .OnErr2 (common .Client ().PutSecretV2 (cmd .Context (), args [0 ], c , body ))
222+ if cmd .Flag ("output" ).Value .String () == string (flagsmgmt .JSON_OUTPUT_FORMAT ) {
223+ output .JsonPrint (resp )
224+ } else {
225+ renderMetadata (utils .DerefOrDefault (resp .Path ), utils .DerefOrDefault (resp .Metadata ))
245226 }
246227 },
247228 }
@@ -266,52 +247,3 @@ func secretDeleteCmd() *cobra.Command {
266247 }
267248 return cmd
268249}
269-
270- func renderSecretListTable (data * []types.GetSecretV2Response ) {
271- if data == nil {
272- return
273- }
274- for _ , v := range * data {
275- renderSecretTable (v )
276- }
277- }
278-
279- func renderSecretTable (data types.GetSecretV2Response ) {
280- casRequired := utils .DerefOrDefault (data .Metadata .CasRequired )
281- createdAt := utils .DerefOrDefault (data .Metadata .CreatedAt )
282- currentVersion := utils .DerefOrDefault (data .Metadata .CurrentVersion )
283- deactivateVersionAfter := utils .DerefOrDefault (data .Metadata .DeactivateVersionAfter )
284- maxVersions := utils .DerefOrDefault (data .Metadata .MaxVersions )
285- oldestVersion := utils .DerefOrDefault (data .Metadata .OldestVersion )
286- updatedAt := utils .DerefOrDefault (data .Metadata .UpdatedAt )
287-
288- var customMetadata string
289- if data .Metadata .CustomMetadata != nil {
290- customMetadata = fmt .Sprintf ("%v" , * data .Metadata .CustomMetadata )
291- }
292-
293- fmt .Println ("Metadata" )
294- table := tablewriter .NewWriter (os .Stdout )
295- table .SetHeader ([]string {"Key" , "Value" })
296- table .AppendBulk ([][]string {
297- {"Cas Required" , fmt .Sprintf ("%t" , casRequired )},
298- {"Created at" , createdAt },
299- {"Current Version" , fmt .Sprintf ("%d" , currentVersion )},
300- {"Deactivate Version After" , deactivateVersionAfter },
301- {"Max Versions" , fmt .Sprintf ("%d" , maxVersions )},
302- {"Oldest Version" , fmt .Sprintf ("%d" , oldestVersion )},
303- {"Updated at" , updatedAt },
304- {"Custom metadata" , customMetadata },
305- })
306- table .Render ()
307-
308- if data .Version .Data != nil {
309- fmt .Println ("Data" )
310- tableData := tablewriter .NewWriter (os .Stdout )
311- tableData .SetHeader ([]string {"Key" , "Value" })
312- for k , v := range * data .Version .Data {
313- tableData .Append ([]string {k , fmt .Sprintf ("%v" , v )})
314- }
315- tableData .Render ()
316- }
317- }
0 commit comments