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)
13
14func newBridgeAuthShow() *cobra.Command {
15	env := newEnv()
16
17	cmd := &cobra.Command{
18		Use:      "show",
19		Short:    "Display an authentication credential.",
20		PreRunE:  loadBackend(env),
21		PostRunE: closeBackend(env),
22		RunE: func(cmd *cobra.Command, args []string) error {
23			return runBridgeAuthShow(env, args)
24		},
25		Args: cobra.ExactArgs(1),
26	}
27
28	return cmd
29}
30
31func runBridgeAuthShow(env *Env, args []string) error {
32	cred, err := auth.LoadWithPrefix(env.repo, args[0])
33	if err != nil {
34		return err
35	}
36
37	env.out.Printf("Id: %s\n", cred.ID())
38	env.out.Printf("Target: %s\n", cred.Target())
39	env.out.Printf("Kind: %s\n", cred.Kind())
40	env.out.Printf("Creation: %s\n", cred.CreateTime().Format(time.RFC822))
41
42	switch cred := cred.(type) {
43	case *auth.Token:
44		env.out.Printf("Value: %s\n", cred.Value)
45	}
46
47	env.out.Println("Metadata:")
48
49	meta := make([]string, 0, len(cred.Metadata()))
50	for key, value := range cred.Metadata() {
51		meta = append(meta, fmt.Sprintf("    %s --> %s\n", key, value))
52	}
53	sort.Strings(meta)
54
55	env.out.Print(strings.Join(meta, ""))
56
57	return nil
58}