1package commands
2
3import (
4 "fmt"
5 "strings"
6
7 "github.com/spf13/cobra"
8
9 "github.com/MichaelMure/git-bug/bridge/core"
10 "github.com/MichaelMure/git-bug/cache"
11 "github.com/MichaelMure/git-bug/util/colors"
12 "github.com/MichaelMure/git-bug/util/interrupt"
13 "github.com/MichaelMure/git-bug/util/text"
14)
15
16var (
17 bridgeTokenLocalOnly bool
18 bridgeTokenGlobalOnly bool
19)
20
21func runTokenBridge(cmd *cobra.Command, args []string) error {
22 backend, err := cache.NewRepoCache(repo)
23 if err != nil {
24 return err
25 }
26 defer backend.Close()
27 interrupt.RegisterCleaner(backend.Close)
28
29 var tokens []*core.Token
30 if !bridgeTokenGlobalOnly {
31 localTokens, err := core.ListTokens(backend)
32 if err != nil {
33 return err
34 }
35
36 for _, id := range localTokens {
37 token, err := core.GetToken(repo, id)
38 if err != nil {
39 return err
40 }
41 tokens = append(tokens, token)
42 }
43 }
44
45 if !bridgeTokenLocalOnly {
46 globalTokens, err := core.ListGlobalTokens(backend)
47 if err != nil {
48 return err
49 }
50
51 for _, id := range globalTokens {
52 token, err := core.GetGlobalToken(repo, id)
53 if err != nil {
54 return err
55 }
56 tokens = append(tokens, token)
57 }
58 }
59
60 for _, token := range tokens {
61 valueFmt := text.LeftPadMaxLine(token.Value, 20, 0)
62 targetFmt := text.LeftPadMaxLine(token.Target, 8, 0)
63 scopesFmt := text.LeftPadMaxLine(strings.Join(token.Scopes, ","), 20, 0)
64
65 fmt.Printf("%s %s %s %s\n",
66 valueFmt,
67 colors.Magenta(targetFmt),
68 colors.Yellow(token.Global),
69 scopesFmt,
70 )
71 }
72 return nil
73}
74
75var bridgeTokenCmd = &cobra.Command{
76 Use: "token",
77 Short: "Configure and use bridge tokens.",
78 PreRunE: loadRepo,
79 RunE: runTokenBridge,
80 Args: cobra.NoArgs,
81}
82
83func init() {
84 bridgeCmd.AddCommand(bridgeTokenCmd)
85 bridgeTokenCmd.Flags().BoolVarP(&bridgeTokenLocalOnly, "local", "l", false, "")
86 bridgeTokenCmd.Flags().BoolVarP(&bridgeTokenGlobalOnly, "global", "g", false, "")
87 bridgeTokenCmd.Flags().SortFlags = false
88}