1
0
mirror of https://github.com/bitwarden/mobile.git synced 2024-06-25 10:26:02 +02:00

PM-7365 Fix setting HasUnlockedInThisTransaction on passkey creation on android (#3153)

This commit is contained in:
Federico Maccaroni 2024-04-15 17:13:26 -03:00 committed by GitHub
parent 7413c43d49
commit 4b7f8074f3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 20 additions and 5 deletions

View File

@ -16,7 +16,8 @@ namespace Bit.App.Platforms.Android.Autofill
private readonly IDeviceActionService _deviceActionService;
private TaskCompletionSource<(string cipherId, bool? userVerified)> _confirmCredentialTcs;
Fido2UserVerificationOptions? _currentDefaultUserVerificationOptions;
private Fido2UserVerificationOptions? _currentDefaultUserVerificationOptions;
private Func<bool> _checkHasVaultBeenUnlockedInThisTransaction;
public Fido2MakeCredentialUserInterface(IStateService stateService,
IVaultTimeoutService vaultTimeoutService,
@ -31,7 +32,7 @@ namespace Bit.App.Platforms.Android.Autofill
_deviceActionService = deviceActionService;
}
public bool HasVaultBeenUnlockedInThisTransaction => true;
public bool HasVaultBeenUnlockedInThisTransaction => _checkHasVaultBeenUnlockedInThisTransaction?.Invoke() == true;
public async Task<(string CipherId, bool UserVerified)> ConfirmNewCredentialAsync(Fido2ConfirmNewCredentialParams confirmNewCredentialParams)
{
@ -39,12 +40,12 @@ namespace Bit.App.Platforms.Android.Autofill
_confirmCredentialTcs = null;
_confirmCredentialTcs = new TaskCompletionSource<(string cipherId, bool? userVerified)>();
_currentDefaultUserVerificationOptions = new Fido2UserVerificationOptions(false, confirmNewCredentialParams.UserVerificationPreference, true, confirmNewCredentialParams.RpId);
_currentDefaultUserVerificationOptions = new Fido2UserVerificationOptions(false, confirmNewCredentialParams.UserVerificationPreference, HasVaultBeenUnlockedInThisTransaction, confirmNewCredentialParams.RpId);
var messagingService = ServiceContainer.Resolve<IMessagingService>("messagingService");
messagingService?.Send("fidoNavigateToAutofillCipher", confirmNewCredentialParams);
var (cipherId, isUserVerified) = await _confirmCredentialTcs.Task;
var (cipherId, isUserVerified) = await _confirmCredentialTcs.Task;
var verified = isUserVerified;
if (verified is null)
@ -108,6 +109,11 @@ namespace Bit.App.Platforms.Android.Autofill
return Task.FromResult(true);
}
public void SetCheckHasVaultBeenUnlockedInThisTransaction(Func<bool> checkHasVaultBeenUnlockedInThisTransaction)
{
_checkHasVaultBeenUnlockedInThisTransaction = checkHasVaultBeenUnlockedInThisTransaction;
}
public void Confirm(string cipherId, bool? userVerified) => _confirmCredentialTcs?.TrySetResult((cipherId, userVerified));
public void Cancel() => _confirmCredentialTcs?.TrySetCanceled();
@ -135,7 +141,7 @@ namespace Bit.App.Platforms.Android.Autofill
new Fido2UserVerificationOptions(
shouldCheckMasterPasswordReprompt,
userVerificationPreference,
true,
HasVaultBeenUnlockedInThisTransaction,
rpId)
);
}

View File

@ -28,5 +28,7 @@ namespace Bit.Core.Abstractions
void OnConfirmationException(Exception ex);
Fido2UserVerificationOptions? GetCurrentUserVerificationOptions();
void SetCheckHasVaultBeenUnlockedInThisTransaction(Func<bool> checkHasVaultBeenUnlockedInThisTransaction);
}
}

View File

@ -254,6 +254,10 @@ namespace Bit.App.Utilities.AccountManagement
await _accountsManagerHost.UpdateThemeAsync();
_watchDeviceService.SyncDataToWatchAsync().FireAndForget();
_messagingService.Send(AccountsManagerMessageCommands.ACCOUNT_SWITCH_COMPLETED);
if (Options != null)
{
Options.HasUnlockedInThisTransaction = false;
}
});
}

View File

@ -432,6 +432,9 @@ namespace Bit.App.Utilities
// this is called after login in or unlocking so we can assume the vault has been unlocked in this transaction here.
appOptions.HasUnlockedInThisTransaction = true;
ServiceContainer.Resolve<IFido2MakeCredentialConfirmationUserInterface>()
.SetCheckHasVaultBeenUnlockedInThisTransaction(() => appOptions?.HasUnlockedInThisTransaction == true);
if (appOptions.FromAutofillFramework && appOptions.SaveType.HasValue)
{
App.MainPage = new NavigationPage(new CipherAddEditPage(appOptions: appOptions));