mirror of
https://github.com/bitwarden/mobile
synced 2025-12-15 07:43:37 +00:00
add state for biometric key and accept UserKey instead of string for auto key
This commit is contained in:
@@ -20,7 +20,7 @@ namespace Bit.Core.Abstractions
|
|||||||
Task<string> GetMasterKeyEncryptedUserKeyAsync(string userId = null);
|
Task<string> GetMasterKeyEncryptedUserKeyAsync(string userId = null);
|
||||||
Task SetMasterKeyEncryptedUserKeyAsync(string value, string userId = null);
|
Task SetMasterKeyEncryptedUserKeyAsync(string value, string userId = null);
|
||||||
Task<UserKey> GetUserKeyAutoUnlockAsync(string userId = null);
|
Task<UserKey> GetUserKeyAutoUnlockAsync(string userId = null);
|
||||||
Task SetUserKeyAutoUnlockAsync(string value, string userId = null);
|
Task SetUserKeyAutoUnlockAsync(UserKey value, string userId = null);
|
||||||
Task<string> GetActiveUserIdAsync();
|
Task<string> GetActiveUserIdAsync();
|
||||||
Task<string> GetActiveUserEmailAsync();
|
Task<string> GetActiveUserEmailAsync();
|
||||||
Task<T> GetActiveUserCustomDataAsync<T>(Func<Account, T> dataMapper);
|
Task<T> GetActiveUserCustomDataAsync<T>(Func<Account, T> dataMapper);
|
||||||
@@ -35,6 +35,8 @@ namespace Bit.Core.Abstractions
|
|||||||
Task<EnvironmentUrlData> GetPreAuthEnvironmentUrlsAsync();
|
Task<EnvironmentUrlData> GetPreAuthEnvironmentUrlsAsync();
|
||||||
Task SetPreAuthEnvironmentUrlsAsync(EnvironmentUrlData value);
|
Task SetPreAuthEnvironmentUrlsAsync(EnvironmentUrlData value);
|
||||||
Task<EnvironmentUrlData> GetEnvironmentUrlsAsync(string userId = null);
|
Task<EnvironmentUrlData> GetEnvironmentUrlsAsync(string userId = null);
|
||||||
|
Task<UserKey> GetUserKeyBiometricUnlockAsync(string userId = null);
|
||||||
|
Task SetUserKeyBiometricUnlockAsync(UserKey value, string userId = null);
|
||||||
Task<bool?> GetBiometricUnlockAsync(string userId = null);
|
Task<bool?> GetBiometricUnlockAsync(string userId = null);
|
||||||
Task SetBiometricUnlockAsync(bool? value, string userId = null);
|
Task SetBiometricUnlockAsync(bool? value, string userId = null);
|
||||||
Task<bool> GetBiometricLockedAsync(string userId = null);
|
Task<bool> GetBiometricLockedAsync(string userId = null);
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ namespace Bit.Core
|
|||||||
public static string VaultTimeoutActionKey(string userId) => $"vaultTimeoutAction_{userId}";
|
public static string VaultTimeoutActionKey(string userId) => $"vaultTimeoutAction_{userId}";
|
||||||
public static string MasterKeyEncryptedUserKeyKey(string userId) => $"masterKeyEncryptedUserKey_{userId}";
|
public static string MasterKeyEncryptedUserKeyKey(string userId) => $"masterKeyEncryptedUserKey_{userId}";
|
||||||
public static string UserKeyAutoUnlockKey(string userId) => $"autoUnlock_{userId}";
|
public static string UserKeyAutoUnlockKey(string userId) => $"autoUnlock_{userId}";
|
||||||
|
public static string UserKeyBiometricUnlockKey(string userId) => $"biometricUnlock_{userId}";
|
||||||
public static string CiphersKey(string userId) => $"ciphers_{userId}";
|
public static string CiphersKey(string userId) => $"ciphers_{userId}";
|
||||||
public static string FoldersKey(string userId) => $"folders_{userId}";
|
public static string FoldersKey(string userId) => $"folders_{userId}";
|
||||||
public static string CollectionsKey(string userId) => $"collections_{userId}";
|
public static string CollectionsKey(string userId) => $"collections_{userId}";
|
||||||
|
|||||||
@@ -684,7 +684,7 @@ namespace Bit.Core.Services
|
|||||||
// Refresh, set, or clear the auto key
|
// Refresh, set, or clear the auto key
|
||||||
if (await _stateService.GetVaultTimeoutAsync(userId) == null)
|
if (await _stateService.GetVaultTimeoutAsync(userId) == null)
|
||||||
{
|
{
|
||||||
await _stateService.SetUserKeyAutoUnlockAsync(userKey.KeyB64, userId);
|
await _stateService.SetUserKeyAutoUnlockAsync(userKey, userId);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -971,7 +971,7 @@ namespace Bit.Core.Services
|
|||||||
new EncString(encryptedUserKey),
|
new EncString(encryptedUserKey),
|
||||||
userId);
|
userId);
|
||||||
// Migrate
|
// Migrate
|
||||||
await _stateService.SetUserKeyAutoUnlockAsync(userKey.KeyB64, userId);
|
await _stateService.SetUserKeyAutoUnlockAsync(userKey, userId);
|
||||||
await _stateService.SetKeyEncryptedAsync(null, userId);
|
await _stateService.SetKeyEncryptedAsync(null, userId);
|
||||||
// Set encrypted user key just in case the user locks without syncing
|
// Set encrypted user key just in case the user locks without syncing
|
||||||
await SetMasterKeyEncryptedUserKeyAsync(encryptedUserKey);
|
await SetMasterKeyEncryptedUserKeyAsync(encryptedUserKey);
|
||||||
|
|||||||
@@ -241,6 +241,19 @@ namespace Bit.Core.Services
|
|||||||
))?.Settings?.EnvironmentUrls;
|
))?.Settings?.EnvironmentUrls;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<UserKey> GetUserKeyBiometricUnlockAsync(string userId = null)
|
||||||
|
{
|
||||||
|
var keyB64 = await _storageMediatorService.GetAsync<string>(
|
||||||
|
await ComposeKeyAsync(Constants.UserKeyBiometricUnlockKey, userId), true);
|
||||||
|
return keyB64 == null ? null : new UserKey(Convert.FromBase64String(keyB64));
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task SetUserKeyBiometricUnlockAsync(UserKey value, string userId = null)
|
||||||
|
{
|
||||||
|
await _storageMediatorService.SaveAsync(
|
||||||
|
await ComposeKeyAsync(Constants.UserKeyBiometricUnlockKey, userId), value, true);
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<bool?> GetBiometricUnlockAsync(string userId = null)
|
public async Task<bool?> GetBiometricUnlockAsync(string userId = null)
|
||||||
{
|
{
|
||||||
var reconciledOptions = ReconcileOptions(new StorageOptions { UserId = userId },
|
var reconciledOptions = ReconcileOptions(new StorageOptions { UserId = userId },
|
||||||
@@ -353,10 +366,10 @@ namespace Bit.Core.Services
|
|||||||
return keyB64 == null ? null : new UserKey(Convert.FromBase64String(keyB64));
|
return keyB64 == null ? null : new UserKey(Convert.FromBase64String(keyB64));
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task SetUserKeyAutoUnlockAsync(string value, string userId = null)
|
public async Task SetUserKeyAutoUnlockAsync(UserKey value, string userId = null)
|
||||||
{
|
{
|
||||||
await _storageMediatorService.SaveAsync(
|
await _storageMediatorService.SaveAsync(
|
||||||
await ComposeKeyAsync(Constants.UserKeyAutoUnlockKey, userId), value, true);
|
await ComposeKeyAsync(Constants.UserKeyAutoUnlockKey, userId), value.KeyB64, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> CanAccessPremiumAsync(string userId = null)
|
public async Task<bool> CanAccessPremiumAsync(string userId = null)
|
||||||
|
|||||||
Reference in New Issue
Block a user