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/MichaelMure/git-bug/bridge/core/auth"
11 "github.com/MichaelMure/git-bug/commands/execenv"
12 "github.com/MichaelMure/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}