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/util/colors"
13)
14
15func newBridgeAuthCommand() *cobra.Command {
16	env := newEnv()
17
18	cmd := &cobra.Command{
19		Use:     "auth",
20		Short:   "List all known bridge authentication credentials.",
21		PreRunE: loadBackend(env),
22		RunE: closeBackend(env, func(cmd *cobra.Command, args []string) error {
23			return runBridgeAuth(env)
24		}),
25		Args: cobra.NoArgs,
26	}
27
28	cmd.AddCommand(newBridgeAuthAddTokenCommand())
29	cmd.AddCommand(newBridgeAuthRm())
30	cmd.AddCommand(newBridgeAuthShow())
31
32	return cmd
33}
34
35func runBridgeAuth(env *Env) error {
36	creds, err := auth.List(env.backend)
37	if err != nil {
38		return err
39	}
40
41	for _, cred := range creds {
42		targetFmt := text.LeftPadMaxLine(cred.Target(), 10, 0)
43
44		var value string
45		switch cred := cred.(type) {
46		case *auth.Token:
47			value = cred.Value
48		}
49
50		meta := make([]string, 0, len(cred.Metadata()))
51		for k, v := range cred.Metadata() {
52			meta = append(meta, k+":"+v)
53		}
54		sort.Strings(meta)
55		metaFmt := strings.Join(meta, ",")
56
57		env.out.Printf("%s %s %s %s %s\n",
58			colors.Cyan(cred.ID().Human()),
59			colors.Yellow(targetFmt),
60			colors.Magenta(cred.Kind()),
61			value,
62			metaFmt,
63		)
64	}
65
66	return nil
67}