mirror of
https://github.com/bitwarden/mobile
synced 2026-01-09 20:13:18 +00:00
[SG-386] iOS Update user state when coming from background (#1952)
* SG-386 Updated active user when coming from background to the iOS app and the extension had switched users * Added iOSExtensionActiveUserIdKey to preference keys * Reorder iOS preference keys
This commit is contained in:
committed by
GitHub
parent
c53a85cd50
commit
3aef86bd34
@@ -14,6 +14,7 @@ namespace Bit.Core.Abstractions
|
||||
Task<string> GetActiveUserIdAsync();
|
||||
Task<bool> IsActiveAccountAsync(string userId = null);
|
||||
Task SetActiveUserAsync(string userId);
|
||||
Task CheckExtensionActiveUserAndSwitchIfNeededAsync();
|
||||
Task<bool> IsAuthenticatedAsync(string userId = null);
|
||||
Task<string> GetUserIdAsync(string email);
|
||||
Task RefreshAccountViewsAsync(bool allowAddAccountRow);
|
||||
@@ -145,5 +146,6 @@ namespace Bit.Core.Abstractions
|
||||
Task SetRefreshTokenAsync(string value, bool skipTokenStorage, string userId = null);
|
||||
Task<string> GetTwoFactorTokenAsync(string email = null);
|
||||
Task SetTwoFactorTokenAsync(string value, string email = null);
|
||||
Task SaveExtensionActiveUserIdToStorageAsync(string userId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
public static string iOSExtensionBiometricIntegrityKey = "iOSExtensionBiometricIntegrityState";
|
||||
public static string iOSShareExtensionClearCiphersCacheKey = "iOSShareExtensionClearCiphersCache";
|
||||
public static string iOSShareExtensionBiometricIntegrityKey = "iOSShareExtensionBiometricIntegrityState";
|
||||
public static string iOSExtensionActiveUserIdKey = "iOSExtensionActiveUserId";
|
||||
public static string EventCollectionKey = "eventCollection";
|
||||
public static string RememberedEmailKey = "rememberedEmail";
|
||||
public static string RememberedOrgIdentifierKey = "rememberedOrgIdentifier";
|
||||
|
||||
@@ -15,16 +15,20 @@ namespace Bit.Core.Services
|
||||
{
|
||||
private readonly IStorageService _storageService;
|
||||
private readonly IStorageService _secureStorageService;
|
||||
private readonly IMessagingService _messagingService;
|
||||
|
||||
private State _state;
|
||||
private bool _migrationChecked;
|
||||
|
||||
public List<AccountView> AccountViews { get; set; }
|
||||
|
||||
public StateService(IStorageService storageService, IStorageService secureStorageService)
|
||||
public StateService(IStorageService storageService,
|
||||
IStorageService secureStorageService,
|
||||
IMessagingService messagingService)
|
||||
{
|
||||
_storageService = storageService;
|
||||
_secureStorageService = secureStorageService;
|
||||
_messagingService = messagingService;
|
||||
}
|
||||
|
||||
public async Task<string> GetActiveUserIdAsync()
|
||||
@@ -67,6 +71,28 @@ namespace Bit.Core.Services
|
||||
await SetPreAuthEnvironmentUrlsAsync(await GetEnvironmentUrlsAsync());
|
||||
}
|
||||
|
||||
public async Task CheckExtensionActiveUserAndSwitchIfNeededAsync()
|
||||
{
|
||||
var extensionUserId = await GetExtensionActiveUserIdFromStorageAsync();
|
||||
if (string.IsNullOrEmpty(extensionUserId))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (_state?.ActiveUserId == extensionUserId)
|
||||
{
|
||||
// Clear the value in case the user changes the active user from the app
|
||||
// so if that happens and the user sends the app to background and comes back
|
||||
// the user is not changed again.
|
||||
await SaveExtensionActiveUserIdToStorageAsync(null);
|
||||
return;
|
||||
}
|
||||
|
||||
await SetActiveUserAsync(extensionUserId);
|
||||
await SaveExtensionActiveUserIdToStorageAsync(null);
|
||||
_messagingService.Send(AccountsManagerMessageCommands.SWITCHED_ACCOUNT);
|
||||
}
|
||||
|
||||
public async Task<bool> IsAuthenticatedAsync(string userId = null)
|
||||
{
|
||||
return await GetAccessTokenAsync(userId) != null;
|
||||
@@ -1510,6 +1536,16 @@ namespace Bit.Core.Services
|
||||
await _storageService.SaveAsync(Constants.StateKey, state);
|
||||
}
|
||||
|
||||
private async Task<string> GetExtensionActiveUserIdFromStorageAsync()
|
||||
{
|
||||
return await _storageService.GetAsync<string>(Constants.iOSExtensionActiveUserIdKey);
|
||||
}
|
||||
|
||||
public async Task SaveExtensionActiveUserIdToStorageAsync(string userId)
|
||||
{
|
||||
await _storageService.SaveAsync(Constants.iOSExtensionActiveUserIdKey, userId);
|
||||
}
|
||||
|
||||
private async Task CheckStateAsync()
|
||||
{
|
||||
if (!_migrationChecked)
|
||||
|
||||
13
src/Core/Utilities/AccountsManagerMessageCommands.cs
Normal file
13
src/Core/Utilities/AccountsManagerMessageCommands.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
namespace Bit.Core.Utilities
|
||||
{
|
||||
public static class AccountsManagerMessageCommands
|
||||
{
|
||||
public const string LOCKED = "locked";
|
||||
public const string LOCK_VAULT = "lockVault";
|
||||
public const string LOGOUT = "logout";
|
||||
public const string LOGGED_OUT = "loggedOut";
|
||||
public const string ADD_ACCOUNT = "addAccount";
|
||||
public const string ACCOUNT_ADDED = "accountAdded";
|
||||
public const string SWITCHED_ACCOUNT = "switchedAccount";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user