mirror of
https://github.com/bitwarden/mobile
synced 2025-12-11 13:53:29 +00:00
setup 2fa methods page
This commit is contained in:
@@ -134,6 +134,7 @@
|
|||||||
<Compile Include="Pages\HomePage.cs" />
|
<Compile Include="Pages\HomePage.cs" />
|
||||||
<Compile Include="Pages\Lock\BaseLockPage.cs" />
|
<Compile Include="Pages\Lock\BaseLockPage.cs" />
|
||||||
<Compile Include="Pages\Lock\LockPasswordPage.cs" />
|
<Compile Include="Pages\Lock\LockPasswordPage.cs" />
|
||||||
|
<Compile Include="Pages\TwoFactorMethodsPage.cs" />
|
||||||
<Compile Include="Pages\LoginTwoFactorPage.cs" />
|
<Compile Include="Pages\LoginTwoFactorPage.cs" />
|
||||||
<Compile Include="Pages\PasswordHintPage.cs" />
|
<Compile Include="Pages\PasswordHintPage.cs" />
|
||||||
<Compile Include="Pages\RegisterPage.cs" />
|
<Compile Include="Pages\RegisterPage.cs" />
|
||||||
|
|||||||
@@ -27,11 +27,13 @@ namespace Bit.App.Pages
|
|||||||
private readonly SymmetricCryptoKey _key;
|
private readonly SymmetricCryptoKey _key;
|
||||||
private readonly Dictionary<TwoFactorProviderType, Dictionary<string, object>> _providers;
|
private readonly Dictionary<TwoFactorProviderType, Dictionary<string, object>> _providers;
|
||||||
private readonly TwoFactorProviderType? _providerType;
|
private readonly TwoFactorProviderType? _providerType;
|
||||||
|
private readonly FullLoginResult _result;
|
||||||
|
|
||||||
public LoginTwoFactorPage(string email, FullLoginResult result, TwoFactorProviderType? type = null)
|
public LoginTwoFactorPage(string email, FullLoginResult result, TwoFactorProviderType? type = null)
|
||||||
: base(updateActivity: false)
|
: base(updateActivity: false)
|
||||||
{
|
{
|
||||||
_email = email;
|
_email = email;
|
||||||
|
_result = result;
|
||||||
_masterPasswordHash = result.MasterPasswordHash;
|
_masterPasswordHash = result.MasterPasswordHash;
|
||||||
_key = result.Key;
|
_key = result.Key;
|
||||||
_providers = result.TwoFactorProviders;
|
_providers = result.TwoFactorProviders;
|
||||||
@@ -128,7 +130,7 @@ namespace Bit.App.Pages
|
|||||||
Text = "Use another two-step login method",
|
Text = "Use another two-step login method",
|
||||||
Style = (Style)Application.Current.Resources["btn-primaryAccent"],
|
Style = (Style)Application.Current.Resources["btn-primaryAccent"],
|
||||||
Margin = new Thickness(15, 0, 15, 25),
|
Margin = new Thickness(15, 0, 15, 25),
|
||||||
Command = new Command(() => AnotherMethod()),
|
Command = new Command(() => AnotherMethodAsync()),
|
||||||
Uppercase = false,
|
Uppercase = false,
|
||||||
BackgroundColor = Color.Transparent
|
BackgroundColor = Color.Transparent
|
||||||
};
|
};
|
||||||
@@ -208,9 +210,9 @@ namespace Bit.App.Pages
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AnotherMethod()
|
private async void AnotherMethodAsync()
|
||||||
{
|
{
|
||||||
|
await Navigation.PushForDeviceAsync(new TwoFactorMethodsPage(_email, _result));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SendEmail()
|
private void SendEmail()
|
||||||
|
|||||||
141
src/App/Pages/TwoFactorMethodsPage.cs
Normal file
141
src/App/Pages/TwoFactorMethodsPage.cs
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
using System;
|
||||||
|
using Bit.App.Controls;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
using Bit.App.Models;
|
||||||
|
|
||||||
|
namespace Bit.App.Pages
|
||||||
|
{
|
||||||
|
public class TwoFactorMethodsPage : ExtendedContentPage
|
||||||
|
{
|
||||||
|
private readonly string _email;
|
||||||
|
private readonly FullLoginResult _result;
|
||||||
|
|
||||||
|
public TwoFactorMethodsPage(string email, FullLoginResult result)
|
||||||
|
: base(updateActivity: false)
|
||||||
|
{
|
||||||
|
_email = email;
|
||||||
|
_result = result;
|
||||||
|
|
||||||
|
Init();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ExtendedTextCell AuthenticatorCell { get; set; }
|
||||||
|
public ExtendedTextCell EmailCell { get; set; }
|
||||||
|
public ExtendedTextCell DuoCell { get; set; }
|
||||||
|
public ExtendedTextCell RecoveryCell { get; set; }
|
||||||
|
|
||||||
|
private void Init()
|
||||||
|
{
|
||||||
|
var section = new TableSection(" ");
|
||||||
|
|
||||||
|
if(_result.TwoFactorProviders.ContainsKey(Enums.TwoFactorProviderType.Authenticator))
|
||||||
|
{
|
||||||
|
AuthenticatorCell = new ExtendedTextCell
|
||||||
|
{
|
||||||
|
Text = "Authenticator App",
|
||||||
|
Detail = "Use an authenticator app (such as Authy or Google Authenticator) to generate time-based verification codes."
|
||||||
|
};
|
||||||
|
section.Add(AuthenticatorCell);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(_result.TwoFactorProviders.ContainsKey(Enums.TwoFactorProviderType.Duo))
|
||||||
|
{
|
||||||
|
DuoCell = new ExtendedTextCell
|
||||||
|
{
|
||||||
|
Text = "Duo",
|
||||||
|
Detail = "Use duo."
|
||||||
|
};
|
||||||
|
section.Add(DuoCell);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(_result.TwoFactorProviders.ContainsKey(Enums.TwoFactorProviderType.Email))
|
||||||
|
{
|
||||||
|
EmailCell = new ExtendedTextCell
|
||||||
|
{
|
||||||
|
Text = "Email",
|
||||||
|
Detail = "Verification codes will be emailed to you."
|
||||||
|
};
|
||||||
|
section.Add(EmailCell);
|
||||||
|
}
|
||||||
|
|
||||||
|
RecoveryCell = new ExtendedTextCell
|
||||||
|
{
|
||||||
|
Text = "Recovery Code",
|
||||||
|
Detail = "Lost access to all of your two-factor providers? Use your recovery code to disable all two-factor providers from your account."
|
||||||
|
};
|
||||||
|
section.Add(RecoveryCell);
|
||||||
|
|
||||||
|
var table = new ExtendedTableView
|
||||||
|
{
|
||||||
|
EnableScrolling = true,
|
||||||
|
Intent = TableIntent.Settings,
|
||||||
|
HasUnevenRows = true,
|
||||||
|
Root = new TableRoot
|
||||||
|
{
|
||||||
|
section
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if(Device.RuntimePlatform == Device.iOS)
|
||||||
|
{
|
||||||
|
table.RowHeight = -1;
|
||||||
|
table.EstimatedRowHeight = 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
Title = "Two-step Login Options";
|
||||||
|
Content = table;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnAppearing()
|
||||||
|
{
|
||||||
|
base.OnAppearing();
|
||||||
|
if(AuthenticatorCell != null)
|
||||||
|
{
|
||||||
|
AuthenticatorCell.Tapped += AuthenticatorCell_Tapped;
|
||||||
|
}
|
||||||
|
if(DuoCell != null)
|
||||||
|
{
|
||||||
|
DuoCell.Tapped += DuoCell_Tapped;
|
||||||
|
}
|
||||||
|
if(EmailCell != null)
|
||||||
|
{
|
||||||
|
EmailCell.Tapped += EmailCell_Tapped;
|
||||||
|
}
|
||||||
|
RecoveryCell.Tapped += RecoveryCell_Tapped;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnDisappearing()
|
||||||
|
{
|
||||||
|
base.OnDisappearing();
|
||||||
|
if(AuthenticatorCell != null)
|
||||||
|
{
|
||||||
|
AuthenticatorCell.Tapped -= AuthenticatorCell_Tapped;
|
||||||
|
}
|
||||||
|
if(DuoCell != null)
|
||||||
|
{
|
||||||
|
DuoCell.Tapped -= DuoCell_Tapped;
|
||||||
|
}
|
||||||
|
if(EmailCell != null)
|
||||||
|
{
|
||||||
|
EmailCell.Tapped -= EmailCell_Tapped;
|
||||||
|
}
|
||||||
|
RecoveryCell.Tapped -= RecoveryCell_Tapped;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AuthenticatorCell_Tapped(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RecoveryCell_Tapped(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
private void EmailCell_Tapped(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DuoCell_Tapped(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user