bridge_auth.go

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