func (c *Config) PromptForHost(host string) (h *Host, err error) { h = c.Find(host) if h != nil { return } user := c.PromptForUser(host) pass := c.PromptForPassword(host, user) client := NewClient(host) var code, token string for { token, err = client.FindOrCreateToken(user, pass, code) if err == nil { break } if ae, ok := err.(*AuthError); ok && ae.IsRequired2FACodeError() { if code != "" { ui.Errorln("warning: invalid two-factor code") } code = c.PromptForOTP() } else { break } } if err != nil { return } client.Host.AccessToken = token currentUser, err := client.CurrentUser() if err != nil { return } h = &Host{ Host: host, User: currentUser.Login, AccessToken: token, Protocol: "https", } c.Hosts = append(c.Hosts, *h) err = newConfigService().Save(configsFile(), c) return }
func Check(err error) { if err != nil { ui.Errorln(err) os.Exit(1) } }