1
0
mirror of https://github.com/bitwarden/mobile synced 2026-01-11 04:53:52 +00:00

[PM-2293] Add Actions to ApproveWithDevicePage

This commit is contained in:
André Bispo
2023-07-05 08:43:00 +01:00
parent 9dc6a725cf
commit d2b6c73a75
2 changed files with 75 additions and 2 deletions

View File

@@ -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));
}
}
}

View File

@@ -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);
}
}
}
}