diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/Notifications/Notifications.qml b/internal/frontend/bridge-gui/bridge-gui/qml/Notifications/Notifications.qml index 56e45ac7..4fa7f010 100644 --- a/internal/frontend/bridge-gui/bridge-gui/qml/Notifications/Notifications.qml +++ b/internal/frontend/bridge-gui/bridge-gui/qml/Notifications/Notifications.qml @@ -1277,6 +1277,10 @@ QtObject { function onLoginFidoError(errorMsg) { root.touchFidoKey.reset(); } + function onLogin2PasswordRequested(_) { + root.touchFidoKey.reset(); + } + target: Backend } } diff --git a/internal/frontend/bridge-gui/bridge-gui/qml/SetupWizard/Login.qml b/internal/frontend/bridge-gui/bridge-gui/qml/SetupWizard/Login.qml index 618dd7c3..3089094f 100644 --- a/internal/frontend/bridge-gui/bridge-gui/qml/SetupWizard/Login.qml +++ b/internal/frontend/bridge-gui/bridge-gui/qml/SetupWizard/Login.qml @@ -133,7 +133,8 @@ FocusScope { errorLabel.text = qsTr("Incorrect login credentials. Please try again."); } function onLogin2PasswordRequested(username) { - console.assert(stackLayout.currentIndex === Login.RootStack.Login || stackLayout.currentIndex === Login.RootStack.TOTP, "Unexpected login2PasswordRequested"); + console.assert(stackLayout.currentIndex === Login.RootStack.Login || stackLayout.currentIndex === Login.RootStack.FIDO || stackLayout.currentIndex === Login.RootStack.TOTP, "Unexpected login2PasswordRequested"); + fidoLayout.reset(); stackLayout.currentIndex = Login.RootStack.MailboxPassword; mailboxPasswordUsernameLabel.text = username; secondPasswordTextField.focus = true; diff --git a/internal/frontend/grpc/fido.go b/internal/frontend/grpc/fido.go index 4c505ecb..099783ab 100644 --- a/internal/frontend/grpc/fido.go +++ b/internal/frontend/grpc/fido.go @@ -25,6 +25,7 @@ import ( "fmt" "github.com/ProtonMail/gluon/async" + "github.com/ProtonMail/go-proton-api" "github.com/ProtonMail/proton-bridge/v3/internal/fido" "github.com/keys-pub/go-libfido2" "google.golang.org/protobuf/types/known/emptypb" @@ -104,6 +105,11 @@ func (s *Service) LoginFido(_ context.Context, login *LoginRequest) (*emptypb.Em return } + if s.auth.PasswordMode == proton.TwoPasswordMode { + _ = s.SendEvent(NewLoginTwoPasswordsRequestedEvent(login.Username)) + return + } + s.finishLogin() }() diff --git a/internal/frontend/grpc/fido_windows.go b/internal/frontend/grpc/fido_windows.go index 183b7f73..c0705cad 100644 --- a/internal/frontend/grpc/fido_windows.go +++ b/internal/frontend/grpc/fido_windows.go @@ -22,6 +22,7 @@ package grpc import ( "context" "fmt" + "github.com/ProtonMail/go-proton-api" "github.com/ProtonMail/gluon/async" "github.com/ProtonMail/proton-bridge/v3/internal/fido" @@ -46,6 +47,11 @@ func (s *Service) LoginFido(_ context.Context, login *LoginRequest) (*emptypb.Em return } + if s.auth.PasswordMode == proton.TwoPasswordMode { + _ = s.SendEvent(NewLoginTwoPasswordsRequestedEvent(login.Username)) + return + } + s.finishLogin() }()