mirror of
https://github.com/bitwarden/mobile
synced 2025-12-22 19:23:58 +00:00
Support for storing multiple biometric integrity states for iOS (#1110)
* support for storing multiple biometric integrity states for iOS * remove unused var & save new extension bio state upon password validation
This commit is contained in:
@@ -41,6 +41,8 @@ namespace Bit.iOS.Core.Controllers
|
||||
|
||||
public FormEntryTableViewCell MasterPasswordCell { get; set; } = new FormEntryTableViewCell(
|
||||
AppResources.MasterPassword);
|
||||
|
||||
public string BiometricIntegrityKey { get; set; }
|
||||
|
||||
public override void ViewDidLoad()
|
||||
{
|
||||
@@ -86,7 +88,8 @@ namespace Bit.iOS.Core.Controllers
|
||||
|
||||
if (_biometricLock)
|
||||
{
|
||||
_biometricIntegrityValid = _biometricService.ValidateIntegrityAsync().GetAwaiter().GetResult();
|
||||
_biometricIntegrityValid = _biometricService.ValidateIntegrityAsync(BiometricIntegrityKey).GetAwaiter()
|
||||
.GetResult();
|
||||
if (!_biometricIntegrityValid)
|
||||
{
|
||||
return;
|
||||
@@ -194,6 +197,12 @@ namespace Bit.iOS.Core.Controllers
|
||||
_vaultTimeoutService.PinProtectedKey = await _cryptoService.EncryptAsync(key2.Key, pinKey);
|
||||
}
|
||||
await SetKeyAndContinueAsync(key2);
|
||||
|
||||
// Re-enable biometrics
|
||||
if (_biometricLock & !_biometricIntegrityValid)
|
||||
{
|
||||
await _biometricService.SetupBiometricAsync(BiometricIntegrityKey);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -14,24 +14,32 @@ namespace Bit.iOS.Core.Services
|
||||
_storageService = storageService;
|
||||
}
|
||||
|
||||
public async Task<bool> SetupBiometricAsync()
|
||||
public async Task<bool> SetupBiometricAsync(string bioIntegrityKey = null)
|
||||
{
|
||||
if (bioIntegrityKey == null)
|
||||
{
|
||||
bioIntegrityKey = "biometricState";
|
||||
}
|
||||
var state = GetState();
|
||||
if (state != null)
|
||||
{
|
||||
await _storageService.SaveAsync("biometricState", ToBase64(state));
|
||||
await _storageService.SaveAsync(bioIntegrityKey, ToBase64(state));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public async Task<bool> ValidateIntegrityAsync()
|
||||
public async Task<bool> ValidateIntegrityAsync(string bioIntegrityKey = null)
|
||||
{
|
||||
var oldState = await _storageService.GetAsync<string>("biometricState");
|
||||
if (bioIntegrityKey == null)
|
||||
{
|
||||
bioIntegrityKey = "biometricState";
|
||||
}
|
||||
var oldState = await _storageService.GetAsync<string>(bioIntegrityKey);
|
||||
if (oldState == null)
|
||||
{
|
||||
// Fallback for upgraded devices
|
||||
await SetupBiometricAsync();
|
||||
await SetupBiometricAsync(bioIntegrityKey);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user