mirror of
https://github.com/bitwarden/mobile
synced 2025-12-17 00:33:20 +00:00
generator UI elements
This commit is contained in:
@@ -2,9 +2,7 @@
|
||||
using Bit.Core.Abstractions;
|
||||
using Bit.Core.Models.Domain;
|
||||
using Bit.Core.Utilities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Bit.App.Pages
|
||||
@@ -17,7 +15,18 @@ namespace Bit.App.Pages
|
||||
private PasswordGenerationOptions _options;
|
||||
private string _password;
|
||||
private bool _isPassword;
|
||||
private bool _uppercase;
|
||||
private bool _lowercase;
|
||||
private bool _number;
|
||||
private bool _special;
|
||||
private bool _avoidAmbiguous;
|
||||
private int _minNumber;
|
||||
private int _minSpecial;
|
||||
private int _length;
|
||||
private int _numWords;
|
||||
private string _wordSeparator;
|
||||
private int _typeSelectedIndex;
|
||||
private bool _doneIniting;
|
||||
|
||||
public GeneratorPageViewModel()
|
||||
{
|
||||
@@ -42,10 +51,134 @@ namespace Bit.App.Pages
|
||||
set => SetProperty(ref _isPassword, value);
|
||||
}
|
||||
|
||||
public PasswordGenerationOptions Options
|
||||
public int Length
|
||||
{
|
||||
get => _options;
|
||||
set => SetProperty(ref _options, value);
|
||||
get => _length;
|
||||
set
|
||||
{
|
||||
if(SetProperty(ref _length, value))
|
||||
{
|
||||
_options.Length = value;
|
||||
var task = SaveOptionsAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool Uppercase
|
||||
{
|
||||
get => _uppercase;
|
||||
set
|
||||
{
|
||||
if(SetProperty(ref _uppercase, value))
|
||||
{
|
||||
_options.Uppercase = value;
|
||||
var task = SaveOptionsAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool Lowercase
|
||||
{
|
||||
get => _lowercase;
|
||||
set
|
||||
{
|
||||
if(SetProperty(ref _lowercase, value))
|
||||
{
|
||||
_options.Lowercase = value;
|
||||
var task = SaveOptionsAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool Number
|
||||
{
|
||||
get => _number;
|
||||
set
|
||||
{
|
||||
if(SetProperty(ref _number, value))
|
||||
{
|
||||
_options.Number = value;
|
||||
var task = SaveOptionsAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool Special
|
||||
{
|
||||
get => _special;
|
||||
set
|
||||
{
|
||||
if(SetProperty(ref _special, value))
|
||||
{
|
||||
_options.Special = value;
|
||||
var task = SaveOptionsAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool AvoidAmbiguous
|
||||
{
|
||||
get => _avoidAmbiguous;
|
||||
set
|
||||
{
|
||||
if(SetProperty(ref _avoidAmbiguous, value))
|
||||
{
|
||||
_options.Ambiguous = !value;
|
||||
var task = SaveOptionsAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int MinNumber
|
||||
{
|
||||
get => _minNumber;
|
||||
set
|
||||
{
|
||||
if(SetProperty(ref _minNumber, value))
|
||||
{
|
||||
_options.MinNumber = value;
|
||||
var task = SaveOptionsAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int MinSpecial
|
||||
{
|
||||
get => _minSpecial;
|
||||
set
|
||||
{
|
||||
if(SetProperty(ref _minSpecial, value))
|
||||
{
|
||||
_options.MinSpecial = value;
|
||||
var task = SaveOptionsAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int NumWords
|
||||
{
|
||||
get => _numWords;
|
||||
set
|
||||
{
|
||||
if(SetProperty(ref _numWords, value))
|
||||
{
|
||||
_options.NumWords = value;
|
||||
var task = SaveOptionsAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string WordSeparator
|
||||
{
|
||||
get => _wordSeparator;
|
||||
set
|
||||
{
|
||||
if(SetProperty(ref _wordSeparator, value))
|
||||
{
|
||||
_options.WordSeparator = value;
|
||||
var task = SaveOptionsAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int TypeSelectedIndex
|
||||
@@ -55,29 +188,37 @@ namespace Bit.App.Pages
|
||||
{
|
||||
if(SetProperty(ref _typeSelectedIndex, value))
|
||||
{
|
||||
TypeChanged();
|
||||
IsPassword = value == 0;
|
||||
var task = SaveOptionsAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async Task InitAsync()
|
||||
{
|
||||
Options = await _passwordGenerationService.GetOptionsAsync();
|
||||
TypeSelectedIndex = Options.Type == "passphrase" ? 1 : 0;
|
||||
Password = await _passwordGenerationService.GeneratePasswordAsync(Options);
|
||||
_options = await _passwordGenerationService.GetOptionsAsync();
|
||||
LoadFromOptions();
|
||||
Password = await _passwordGenerationService.GeneratePasswordAsync(_options);
|
||||
await _passwordGenerationService.AddHistoryAsync(Password);
|
||||
_doneIniting = true;
|
||||
}
|
||||
|
||||
public async Task RegenerateAsync()
|
||||
{
|
||||
Password = await _passwordGenerationService.GeneratePasswordAsync(Options);
|
||||
Password = await _passwordGenerationService.GeneratePasswordAsync(_options);
|
||||
await _passwordGenerationService.AddHistoryAsync(Password);
|
||||
}
|
||||
|
||||
public async Task SaveOptionsAsync(bool regenerate = true)
|
||||
{
|
||||
_passwordGenerationService.NormalizeOptions(Options);
|
||||
await _passwordGenerationService.SaveOptionsAsync(Options);
|
||||
if(!_doneIniting)
|
||||
{
|
||||
return;
|
||||
}
|
||||
SetOptions();
|
||||
_passwordGenerationService.NormalizeOptions(_options);
|
||||
await _passwordGenerationService.SaveOptionsAsync(_options);
|
||||
LoadFromOptions();
|
||||
if(regenerate)
|
||||
{
|
||||
await RegenerateAsync();
|
||||
@@ -90,11 +231,33 @@ namespace Bit.App.Pages
|
||||
_platformUtilsService.ShowToast("success", null, AppResources.CopiedPassword);
|
||||
}
|
||||
|
||||
public async void TypeChanged()
|
||||
private void LoadFromOptions()
|
||||
{
|
||||
AvoidAmbiguous = !_options.Ambiguous.GetValueOrDefault();
|
||||
TypeSelectedIndex = _options.Type == "passphrase" ? 1 : 0;
|
||||
IsPassword = TypeSelectedIndex == 0;
|
||||
Options.Type = IsPassword ? "password" : "passphrase";
|
||||
await SaveOptionsAsync();
|
||||
MinNumber = _options.MinNumber.GetValueOrDefault();
|
||||
MinSpecial = _options.MinSpecial.GetValueOrDefault();
|
||||
Special = _options.Special.GetValueOrDefault();
|
||||
Number = _options.Number.GetValueOrDefault();
|
||||
NumWords = _options.NumWords.GetValueOrDefault();
|
||||
WordSeparator = _options.WordSeparator;
|
||||
Uppercase = _options.Uppercase.GetValueOrDefault();
|
||||
Lowercase = _options.Lowercase.GetValueOrDefault();
|
||||
}
|
||||
|
||||
private void SetOptions()
|
||||
{
|
||||
_options.Ambiguous = !AvoidAmbiguous;
|
||||
_options.Type = TypeSelectedIndex == 1 ? "passphrase" : "password";
|
||||
_options.MinNumber = MinNumber;
|
||||
_options.MinSpecial = MinSpecial;
|
||||
_options.Special = Special;
|
||||
_options.NumWords = NumWords;
|
||||
_options.Number = Number;
|
||||
_options.WordSeparator = WordSeparator;
|
||||
_options.Uppercase = Uppercase;
|
||||
_options.Lowercase = Lowercase;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user