fix(ui): login page deadlock
This commit is contained in:
parent
3b075b7859
commit
9f4b1464fd
2 changed files with 18 additions and 11 deletions
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue