From 3c507d4b34401f5c249ad811dbcae0004dc675d9 Mon Sep 17 00:00:00 2001 From: ayntgl <90600421+ayntgl@users.noreply.github.com> Date: Mon, 26 Sep 2022 19:24:04 +0530 Subject: [PATCH] Implement MFA login (#225) --- ui/login_view.go | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/ui/login_view.go b/ui/login_view.go index f1fd435..3b7825a 100644 --- a/ui/login_view.go +++ b/ui/login_view.go @@ -61,6 +61,7 @@ func newEmailView(c *Core) *EmailView { v.AddInputField("Email", "", 0, nil, nil) v.AddPasswordField("Password", "", 0, 0, nil) + v.AddPasswordField("Code (optional)", "", 0, 0, nil) v.AddButton("Login", v.onLoginButtonSelected) return v @@ -82,17 +83,27 @@ func (v *EmailView) onLoginButtonSelected() { log.Fatal(err) } - if l.Token != "" && !l.MFA { - err = v.core.Run(l.Token) + // If the token is not dispatched in the response and the "mfa" field is set as true, login using MFA instead. + if l.Token == "" && l.MFA { + code := v.GetFormItem(2).(*tview.InputField).GetText() + if code == "" { + return + } + + // Retry logging in with a 2FA token + l, err = client.TOTP(code, l.Ticket) if err != nil { log.Fatal(err) } - - v.core.Draw() - go keyring.Set(config.Name, "token", l.Token) } - // TODO: MFA login + err = v.core.Run(l.Token) + if err != nil { + log.Fatal(err) + } + + v.core.Draw() + go keyring.Set(config.Name, "token", l.Token) } type TokenView struct {