bridge_auth.go

 1package bridgecmd
 2
 3import (
 4	"sort"
 5	"strings"
 6
 7	text "github.com/MichaelMure/go-term-text"
 8	"github.com/spf13/cobra"
 9
10	"github.com/git-bug/git-bug/bridge/core/auth"
11	"github.com/git-bug/git-bug/commands/execenv"
12	"github.com/git-bug/git-bug/util/colors"
13)
14
15func newBridgeAuthCommand(env *execenv.Env) *cobra.Command {
16	cmd := &cobra.Command{
17		Use:     "auth",
18		Short:   "List all known bridge authentication credentials",
19		PreRunE: execenv.LoadBackend(env),
20		RunE: execenv.CloseBackend(env, func(cmd *cobra.Command, args []string) error {
21			return runBridgeAuth(env)
22		}),
23		Args: cobra.NoArgs,
24	}
25
26	cmd.AddCommand(newBridgeAuthAddTokenCommand(env))
27	cmd.AddCommand(newBridgeAuthRm(env))
28	cmd.AddCommand(newBridgeAuthShow(env))
29
30	return cmd
31}
32
33func runBridgeAuth(env *execenv.Env) error {
34	creds, err := auth.List(env.Backend)
35	if err != nil {
36		return err
37	}
38
39	for _, cred := range creds {
40		targetFmt := text.LeftPadMaxLine(cred.Target(), 10, 0)
41
42		var value string
43		switch cred := cred.(type) {
44		case *auth.Token:
45			value = cred.Value
46		}
47
48		meta := make([]string, 0, len(cred.Metadata()))
49		for k, v := range cred.Metadata() {
50			meta = append(meta, k+":"+v)
51		}
52		sort.Strings(meta)
53		metaFmt := strings.Join(meta, ",")
54
55		env.Out.Printf("%s %s %s %s %s\n",
56			colors.Cyan(cred.ID().Human()),
57			colors.Yellow(targetFmt),
58			colors.Magenta(cred.Kind()),
59			value,
60			metaFmt,
61		)
62	}
63
64	return nil
65}