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}