From ef92f57e7dbd9b770b0dd235dfb8cf67636ae277 Mon Sep 17 00:00:00 2001 From: Ben McClelland Date: Thu, 7 Sep 2023 08:30:28 -0700 Subject: [PATCH] feat: format admin cli list-users output in table Format list-users output in an easier to read table: % versitygw admin list-users Account Role ------- ---- myadmin admin myuser user --- cmd/versitygw/admin.go | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/cmd/versitygw/admin.go b/cmd/versitygw/admin.go index 84359c22..307822ff 100644 --- a/cmd/versitygw/admin.go +++ b/cmd/versitygw/admin.go @@ -21,6 +21,8 @@ import ( "fmt" "io" "net/http" + "os" + "text/tabwriter" "time" "github.com/aws/aws-sdk-go-v2/aws" @@ -254,16 +256,32 @@ func listUsers(ctx *cli.Context) error { return err } - jsonData, err := json.MarshalIndent(accs, "", " ") - if err != nil { - return err - } - - fmt.Println(string(jsonData)) + printAcctTable(accs) return nil } +const ( + // account table formatting + minwidth int = 2 // minimal cell width including any padding + tabwidth int = 0 // width of tab characters (equivalent number of spaces) + padding int = 2 // padding added to a cell before computing its width + padchar byte = ' ' // ASCII char used for padding + flags uint = 0 // formatting control flags +) + +func printAcctTable(accs []auth.Account) { + w := new(tabwriter.Writer) + w.Init(os.Stdout, minwidth, tabwidth, padding, padchar, flags) + fmt.Fprintln(w, "Account\tRole") + fmt.Fprintln(w, "-------\t----") + for _, acc := range accs { + fmt.Fprintf(w, "%v\t%v\n", acc.Access, acc.Role) + } + fmt.Fprintln(w) + w.Flush() +} + func changeBucketOwner(ctx *cli.Context) error { bucket, owner := ctx.String("bucket"), ctx.String("owner") req, err := http.NewRequest(http.MethodPatch, fmt.Sprintf("%v/change-bucket-owner/?bucket=%v&owner=%v", adminEndpoint, bucket, owner), nil)