MCPcopy Create free account
hub / github.com/git-bug/git-bug / runBridgeAuthAddToken

Function runBridgeAuthAddToken

commands/bridge/bridge_auth_addtoken.go:55–132  ·  view source on GitHub ↗
(env *execenv.Env, opts bridgeAuthAddTokenOptions, args []string)

Source from the content-addressed store, hash-verified

53}
54
55func runBridgeAuthAddToken(env *execenv.Env, opts bridgeAuthAddTokenOptions, args []string) error {
56 // Note: as bridgeAuthAddTokenLogin is not checked against the remote bug-tracker,
57 // it's possible to register a credential with an incorrect login (including bad case).
58 // The consequence is that it will not get picked later by the bridge. I find that
59 // checking it would require a cumbersome UX (need to provide a base URL for some bridges, ...)
60 // so it's probably not worth it, unless we refactor that entirely.
61
62 if opts.target == "" {
63 return fmt.Errorf("flag --target is required")
64 }
65 if opts.login == "" {
66 return fmt.Errorf("flag --login is required")
67 }
68
69 if !core.TargetExist(opts.target) {
70 return fmt.Errorf("unknown target")
71 }
72
73 var value string
74
75 if len(args) == 1 {
76 value = args[0]
77 } else {
78 // Read from Stdin
79 if isatty.IsTerminal(os.Stdin.Fd()) {
80 env.Err.Println("Enter the token:")
81 }
82 reader := bufio.NewReader(os.Stdin)
83 raw, err := reader.ReadString('\n')
84 if err != nil {
85 return fmt.Errorf("reading from stdin: %v", err)
86 }
87 value = strings.TrimSuffix(raw, "\n")
88 }
89
90 var user *cache.IdentityCache
91 var err error
92
93 if opts.user == "" {
94 user, err = env.Backend.GetUserIdentity()
95 } else {
96 user, err = env.Backend.Identities().ResolvePrefix(opts.user)
97 }
98 if err != nil {
99 return err
100 }
101
102 metaKey, _ := bridge.LoginMetaKey(opts.target)
103 login, ok := user.ImmutableMetadata()[metaKey]
104
105 switch {
106 case ok && login == opts.login:
107 // nothing to do
108 case ok && login != opts.login:
109 return fmt.Errorf("this user is already tagged with a different %s login", opts.target)
110 default:
111 user.SetMetadata(metaKey, opts.login)
112 err = user.Commit()

Callers 1

Calls 15

CommitMethod · 0.95
ValidateMethod · 0.95
IDMethod · 0.95
TargetExistFunction · 0.92
LoginMetaKeyFunction · 0.92
NewTokenFunction · 0.92
StoreFunction · 0.92
ErrorfMethod · 0.80
GetUserIdentityMethod · 0.80
IdentitiesMethod · 0.80
ImmutableMetadataMethod · 0.80
IsTerminalMethod · 0.65

Tested by

no test coverage detected