fix: exit cleanly when login fails (#313)

This commit is contained in:
sewn 2023-10-18 19:03:19 +03:00 • committed by GitHub
parent e6d13c6ac3
commit 45ab98dae3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 12 deletions

View file

@ -53,7 +53,13 @@ func (r *Cmd) Run() error {
go func() {
mainFlex = newMainFlex()
if err := <-lf.Error; err != nil {
app.Stop()
log.Fatal(err)
}
if err := openState(<-lf.Token); err != nil {
app.Stop()
log.Fatal(err)
}
@ -66,7 +72,7 @@ func (r *Cmd) Run() error {
} else {
mainFlex = newMainFlex()
if err := openState(r.Token); err != nil {
log.Fatal(err)
app.Stop()
}
app.SetRoot(mainFlex, true)

View file

@ -1,7 +1,7 @@
package ui
import (
"log"
"errors"
"github.com/ayn2op/discordo/config"
"github.com/diamondburned/arikawa/v3/api"
@ -13,12 +13,14 @@ import (
type LoginForm struct {
*tview.Form
Token chan string
Error chan error
}
func NewLoginForm() *LoginForm {
lf := &LoginForm{
Form: tview.NewForm(),
Token: make(chan string, 1),
Error: make(chan error, 0),
}
lf.AddInputField("Email", "", 0, nil, nil)
@ -51,7 +53,8 @@ func (lf *LoginForm) onLoginButtonSelected() {
// Log in using the provided email and password.
lr, err := apiClient.Login(email, password)
if err != nil {
log.Fatal(err)
lf.Error <- err
return
}
// If the account has MFA-enabled, attempt to log in using the provided code.
@ -63,18 +66,20 @@ func (lf *LoginForm) onLoginButtonSelected() {
lr, err = apiClient.TOTP(code, lr.Ticket)
if err != nil {
log.Fatal(err)
lf.Error <- err
return
}
}
if lr.Token == "" {
log.Fatal("missing token")
} else {
rememberMe := lf.GetFormItem(3).(*tview.Checkbox).IsChecked()
if rememberMe {
go keyring.Set(config.Name, "token", lr.Token)
}
lf.Token <- lr.Token
lf.Error <- errors.New("Token is missing")
return
}
rememberMe := lf.GetFormItem(3).(*tview.Checkbox).IsChecked()
if rememberMe {
go keyring.Set(config.Name, "token", lr.Token)
}
lf.Token <- lr.Token
}