ayn2op 2 лет назад
Родитель
Сommit
9f4b1464fd
2 измененных файлов с 18 добавлено и 11 удалено
  1. 6 3
      cmd/run.go
  2. 12 8
      ui/login_form.go

+ 6 - 3
cmd/run.go

@@ -32,13 +32,16 @@ func Run(token string) error {
 		lf := ui.NewLoginForm(cfg)
 
 		go func() {
+			// mainFlex must be initialized before opening a new state.
 			mainFlex = newMainFlex()
-			if err := <-lf.Error; err != nil {
+
+			token := <-lf.Token
+			if token.Error != nil {
 				app.Stop()
-				log.Fatal(err)
+				log.Fatal(token.Error)
 			}
 
-			if err := openState(<-lf.Token); err != nil {
+			if err := openState(token.Value); err != nil {
 				app.Stop()
 				log.Fatal(err)
 			}

+ 12 - 8
ui/login_form.go

@@ -11,17 +11,20 @@ import (
 	"github.com/zalando/go-keyring"
 )
 
+type Token struct {
+	Value string
+	Error error
+}
+
 type LoginForm struct {
 	*tview.Form
-	Token chan string
-	Error chan error
+	Token chan Token
 }
 
 func NewLoginForm(cfg *config.Config) *LoginForm {
 	lf := &LoginForm{
 		Form:  tview.NewForm(),
-		Token: make(chan string, 1),
-		Error: make(chan error),
+		Token: make(chan Token, 1),
 	}
 
 	lf.AddInputField("Email", "", 0, nil, nil)
@@ -54,7 +57,7 @@ func (lf *LoginForm) onLoginButtonSelected() {
 	// Log in using the provided email and password.
 	lr, err := apiClient.Login(email, password)
 	if err != nil {
-		lf.Error <- err
+		lf.Token <- Token{Error: err}
 		return
 	}
 
@@ -62,18 +65,19 @@ func (lf *LoginForm) onLoginButtonSelected() {
 	if lr.MFA && lr.Token == "" {
 		code := lf.GetFormItem(2).(*tview.InputField).GetText()
 		if code == "" {
+			lf.Token <- Token{Error: errors.New("code required")}
 			return
 		}
 
 		lr, err = apiClient.TOTP(code, lr.Ticket)
 		if err != nil {
-			lf.Error <- err
+			lf.Token <- Token{Error: err}
 			return
 		}
 	}
 
 	if lr.Token == "" {
-		lf.Error <- errors.New("token is missing")
+		lf.Token <- Token{Error: errors.New("missing token")}
 		return
 	}
 
@@ -82,5 +86,5 @@ func (lf *LoginForm) onLoginButtonSelected() {
 		go keyring.Set(constants.Name, "token", lr.Token)
 	}
 
-	lf.Token <- lr.Token
+	lf.Token <- Token{Value: lr.Token}
 }