1package commands
2
3import (
4 "fmt"
5 "sort"
6 "strings"
7 "time"
8
9 "github.com/spf13/cobra"
10
11 "github.com/MichaelMure/git-bug/bridge/core/auth"
12 "github.com/MichaelMure/git-bug/cache"
13 "github.com/MichaelMure/git-bug/util/interrupt"
14)
15
16func newBridgeAuthShow() *cobra.Command {
17 env := newEnv()
18
19 cmd := &cobra.Command{
20 Use: "show",
21 Short: "Display an authentication credential.",
22 PreRunE: loadRepo(env),
23 RunE: func(cmd *cobra.Command, args []string) error {
24 return runBridgeAuthShow(env, args)
25 },
26 Args: cobra.ExactArgs(1),
27 }
28
29 return cmd
30}
31
32func runBridgeAuthShow(env *Env, args []string) error {
33 backend, err := cache.NewRepoCache(env.repo)
34 if err != nil {
35 return err
36 }
37 defer backend.Close()
38 interrupt.RegisterCleaner(backend.Close)
39
40 cred, err := auth.LoadWithPrefix(env.repo, args[0])
41 if err != nil {
42 return err
43 }
44
45 env.out.Printf("Id: %s\n", cred.ID())
46 env.out.Printf("Target: %s\n", cred.Target())
47 env.out.Printf("Kind: %s\n", cred.Kind())
48 env.out.Printf("Creation: %s\n", cred.CreateTime().Format(time.RFC822))
49
50 switch cred := cred.(type) {
51 case *auth.Token:
52 env.out.Printf("Value: %s\n", cred.Value)
53 }
54
55 env.out.Println("Metadata:")
56
57 meta := make([]string, 0, len(cred.Metadata()))
58 for key, value := range cred.Metadata() {
59 meta = append(meta, fmt.Sprintf(" %s --> %s\n", key, value))
60 }
61 sort.Strings(meta)
62
63 env.out.Print(strings.Join(meta, ""))
64
65 return nil
66}