From d2b6c73a7543ac9079559037c6fb5ebd701453fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Bispo?= Date: Wed, 5 Jul 2023 08:43:00 +0100 Subject: [PATCH] [PM-2293] Add Actions to ApproveWithDevicePage --- .../Accounts/LoginApproveDevicePage.xaml.cs | 50 ++++++++++++++++++- .../Accounts/LoginApproveDeviceViewModel.cs | 27 +++++++++- 2 files changed, 75 insertions(+), 2 deletions(-) diff --git a/src/App/Pages/Accounts/LoginApproveDevicePage.xaml.cs b/src/App/Pages/Accounts/LoginApproveDevicePage.xaml.cs index 3e30dbdab..d201bc326 100644 --- a/src/App/Pages/Accounts/LoginApproveDevicePage.xaml.cs +++ b/src/App/Pages/Accounts/LoginApproveDevicePage.xaml.cs @@ -1,6 +1,10 @@ using System; using System.Collections.Generic; +using System.Threading.Tasks; using Bit.App.Models; +using Bit.App.Utilities; +using Bit.Core.Enums; +using Bit.Core.Utilities; using Xamarin.Forms; namespace Bit.App.Pages @@ -9,11 +13,21 @@ namespace Bit.App.Pages { private readonly LoginApproveDeviceViewModel _vm; - public LoginApproveDevicePage(AppOptions appOptions = null) + private readonly AppOptions _appOptions; + + public LoginApproveDevicePage(string email, AppOptions appOptions = null) { InitializeComponent(); _vm = BindingContext as LoginApproveDeviceViewModel; + _vm.StartTwoFactorAction = () => StartTwoFactorAsync().FireAndForget(); ; + _vm.LogInSuccessAction = () => LogInSuccessAsync().FireAndForget(); ; + _vm.UpdateTempPasswordAction = () => UpdateTempPasswordAsync().FireAndForget(); ; + _vm.LogInWithDeviceAction = () => StartLoginWithDeviceAsync().FireAndForget(); + _vm.RequestAdminApprovalAction = () => RequestAdminApprovalAsync().FireAndForget(); + _vm.CloseAction = () => { Navigation.PopModalAsync(); }; _vm.Page = this; + _vm.Email = email; + _appOptions = appOptions; } protected override void OnAppearing(){ @@ -27,6 +41,40 @@ namespace Bit.App.Pages _vm.CloseAction(); } } + + private async Task StartTwoFactorAsync() + { + var page = new TwoFactorPage(false, _appOptions); + await Navigation.PushModalAsync(new NavigationPage(page)); + } + + private async Task LogInSuccessAsync() + { + if (AppHelpers.SetAlternateMainPage(_appOptions)) + { + return; + } + var previousPage = await AppHelpers.ClearPreviousPage(); + Application.Current.MainPage = new TabsPage(_appOptions, previousPage); + } + + private async Task UpdateTempPasswordAsync() + { + var page = new UpdateTempPasswordPage(); + await Navigation.PushModalAsync(new NavigationPage(page)); + } + + private async Task StartLoginWithDeviceAsync() + { + var page = new LoginPasswordlessRequestPage(_vm.Email, AuthRequestType.LoginWithDevice, _appOptions); + await Navigation.PushModalAsync(new NavigationPage(page)); + } + + private async Task RequestAdminApprovalAsync() + { + var page = new LoginPasswordlessRequestPage(_vm.Email, AuthRequestType.AdminApproval, _appOptions); + await Navigation.PushModalAsync(new NavigationPage(page)); + } } } diff --git a/src/App/Pages/Accounts/LoginApproveDeviceViewModel.cs b/src/App/Pages/Accounts/LoginApproveDeviceViewModel.cs index 3e234e939..5ce43c2a6 100644 --- a/src/App/Pages/Accounts/LoginApproveDeviceViewModel.cs +++ b/src/App/Pages/Accounts/LoginApproveDeviceViewModel.cs @@ -19,6 +19,7 @@ namespace Bit.App.Pages private bool _requestAdminApprovalEnabled; private bool _approveWithMasterPasswordEnabled; private bool _continueEnabled; + private string _email; private readonly IStateService _stateService; private readonly IApiService _apiService; @@ -26,6 +27,12 @@ namespace Bit.App.Pages public ICommand RequestAdminApprovalCommand { get; } public ICommand ApproveWithMasterPasswordCommand { get; } public ICommand ContinueCommand { get; } + + public Action StartTwoFactorAction { get; set; } + public Action LogInSuccessAction { get; set; } + public Action UpdateTempPasswordAction { get; set; } + public Action LogInWithDeviceAction { get; set; } + public Action RequestAdminApprovalAction { get; set; } public Action CloseAction { get; set; } public LoginApproveDeviceViewModel() @@ -39,7 +46,7 @@ namespace Bit.App.Pages onException: ex => HandleException(ex), allowsMultipleExecutions: false); - RequestAdminApprovalCommand = new AsyncCommand(InitAsync, + RequestAdminApprovalCommand = new AsyncCommand(RequestAdminApproval, onException: ex => HandleException(ex), allowsMultipleExecutions: false); @@ -82,6 +89,12 @@ namespace Bit.App.Pages set => SetProperty(ref _continueEnabled, value); } + public string Email + { + get => _email; + set => SetProperty(ref _email, value); + } + public async Task InitAsync() { // Appears if the browser is trusted and shared the key with the app @@ -106,6 +119,18 @@ namespace Bit.App.Pages HandleException(ex); } } + + private Task RequestAdminApproval() + { + try + { + RequestAdminApprovalAction?.Invoke(); + } + catch (Exception ex) + { + HandleException(ex); + } + } } }