mirror of
https://github.com/bitwarden/mobile
synced 2025-12-23 19:53:50 +00:00
* PM-1575 Added new models for Fido2Key
* PM-1575 Added discoverable passkeys and WIP non-discoverable ones
* PM-1575 Fix format
* PM-1575 Added non-discoverable passkeys to login UI
* PM-1575 Added copy application icon to Fido2Key UI
* PM-1575 Updated bwi font with the updated passkey icon
* PM-1575 For now just display Available for two-step login on non-discoverable passkey inside of a cipher login
* PM-1575 Fix non-discoverable passkey visibility
* PM-1575 remove Passkeys as a filter in the vault list
* PM-1575 Display error toast if there is a duplicate passkey when moving a cipher to an org
* Revert "PM-1575 Display error toast if there is a duplicate passkey when moving a cipher to an org"
This reverts commit 78e6353602.
* [PM-2378] Display error toast on duplicate Passkey when moving cipher to an organization (#2594)
* PM-2378 Display error toast if there is a duplicate passkey when moving a cipher to an org
* PM-3097 Fix issue when moving cipher with passkey to an org where the uniqueness should be taken into consideration on different passkeys types and also the Username (#2632)
* PM-3096 Fix non-discoverable passkey to be taken into account when encrypting a cipher which was causing the passkey to be removed when moving to an org (#2637)
80 lines
3.1 KiB
C#
80 lines
3.1 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using Bit.App.Abstractions;
|
|
using Bit.App.Resources;
|
|
using Bit.Core.Abstractions;
|
|
using Bit.Core.Exceptions;
|
|
using Bit.Core.Models.View;
|
|
using Bit.Core.Utilities;
|
|
using Xamarin.CommunityToolkit.ObjectModel;
|
|
|
|
namespace Bit.App.Pages
|
|
{
|
|
public abstract class BaseCipherViewModel : BaseViewModel
|
|
{
|
|
private readonly IAuditService _auditService;
|
|
protected readonly IDeviceActionService _deviceActionService;
|
|
protected readonly IFileService _fileService;
|
|
protected readonly ILogger _logger;
|
|
protected readonly IPlatformUtilsService _platformUtilsService;
|
|
private CipherView _cipher;
|
|
protected abstract string[] AdditionalPropertiesToRaiseOnCipherChanged { get; }
|
|
|
|
public BaseCipherViewModel()
|
|
{
|
|
_deviceActionService = ServiceContainer.Resolve<IDeviceActionService>("deviceActionService");
|
|
_fileService = ServiceContainer.Resolve<IFileService>();
|
|
_platformUtilsService = ServiceContainer.Resolve<IPlatformUtilsService>("platformUtilsService");
|
|
_auditService = ServiceContainer.Resolve<IAuditService>("auditService");
|
|
_logger = ServiceContainer.Resolve<ILogger>("logger");
|
|
|
|
CheckPasswordCommand = new AsyncCommand(CheckPasswordAsync, allowsMultipleExecutions: false);
|
|
}
|
|
|
|
public CipherView Cipher
|
|
{
|
|
get => _cipher;
|
|
set => SetProperty(ref _cipher, value, additionalPropertyNames: AdditionalPropertiesToRaiseOnCipherChanged);
|
|
}
|
|
|
|
public string CreationDate => string.Format(AppResources.CreatedX, Cipher.CreationDate.ToShortDateString());
|
|
|
|
public AsyncCommand CheckPasswordCommand { get; }
|
|
|
|
protected async Task CheckPasswordAsync()
|
|
{
|
|
try
|
|
{
|
|
if (string.IsNullOrWhiteSpace(Cipher?.Login?.Password))
|
|
{
|
|
return;
|
|
}
|
|
|
|
await _deviceActionService.ShowLoadingAsync(AppResources.CheckingPassword);
|
|
var matches = await _auditService.PasswordLeakedAsync(Cipher.Login.Password);
|
|
await _deviceActionService.HideLoadingAsync();
|
|
|
|
await _platformUtilsService.ShowDialogAsync(matches > 0
|
|
? string.Format(AppResources.PasswordExposed, matches.ToString("N0"))
|
|
: AppResources.PasswordSafe);
|
|
}
|
|
catch (ApiException apiException)
|
|
{
|
|
_logger.Exception(apiException);
|
|
await _deviceActionService.HideLoadingAsync();
|
|
if (apiException?.Error != null)
|
|
{
|
|
await _platformUtilsService.ShowDialogAsync(apiException.Error.GetSingleMessage(),
|
|
AppResources.AnErrorHasOccurred);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.Exception(ex);
|
|
await _deviceActionService.HideLoadingAsync();
|
|
await _platformUtilsService.ShowDialogAsync(AppResources.AnErrorHasOccurred);
|
|
}
|
|
}
|
|
}
|
|
}
|