storj/cmd/uplink/cmd_access_list.go
Jeff Wendling 836fa188fa cmd/uplink: allow listing invalid access grants
if you somehow get an invalid access grant in your
config file, it'd be nice to be able to list it
and delete it and stuff.

Change-Id: I7e335bf32353f294d5abb6a7c5f8f3aa18f2f6a7
2022-05-17 20:00:36 +00:00

78 lines
1.5 KiB
Go

// Copyright (C) 2021 Storj Labs, Inc.
// See LICENSE for copying information.
package main
import (
"sort"
"strconv"
"strings"
"github.com/zeebo/clingy"
"storj.io/storj/cmd/uplink/ulext"
"storj.io/uplink"
)
type cmdAccessList struct {
ex ulext.External
verbose bool
}
func newCmdAccessList(ex ulext.External) *cmdAccessList {
return &cmdAccessList{ex: ex}
}
func (c *cmdAccessList) Setup(params clingy.Parameters) {
c.verbose = params.Flag("verbose", "Verbose output of accesses", false,
clingy.Short('v'),
clingy.Transform(strconv.ParseBool), clingy.Boolean,
).(bool)
}
func (c *cmdAccessList) Execute(ctx clingy.Context) error {
defaultName, accesses, err := c.ex.GetAccessInfo(true)
if err != nil {
return err
}
var tw *tabbedWriter
if c.verbose {
tw = newTabbedWriter(ctx.Stdout(), "CURRENT", "NAME", "SATELLITE", "VALUE")
} else {
tw = newTabbedWriter(ctx.Stdout(), "CURRENT", "NAME", "SATELLITE")
}
defer tw.Done()
var names []string
for name := range accesses {
names = append(names, name)
}
sort.Strings(names)
for _, name := range names {
address := "<access parse error>"
if access, err := uplink.ParseAccess(accesses[name]); err == nil {
address = access.SatelliteAddress()
if idx := strings.IndexByte(address, '@'); !c.verbose && idx >= 0 {
address = address[idx+1:]
}
}
inUse := ' '
if name == defaultName {
inUse = '*'
}
if c.verbose {
tw.WriteLine(inUse, name, address, accesses[name])
} else {
tw.WriteLine(inUse, name, address)
}
}
return nil
}