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}