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