mirror of
https://github.com/bitwarden/mobile.git
synced 2024-11-25 12:05:59 +01:00
fix for logging out active account from switcher and cleanup (#1830)
This commit is contained in:
parent
fcc94d85af
commit
17cdc96352
@ -73,11 +73,9 @@ namespace Bit.App
|
|||||||
}
|
}
|
||||||
else if (message.Command == "locked")
|
else if (message.Command == "locked")
|
||||||
{
|
{
|
||||||
var extras = message.Data as Tuple<string, bool>;
|
var (userId, userInitiated) =
|
||||||
var userId = extras?.Item1;
|
message.Data as Tuple<string, bool> ?? new Tuple<string, bool>(null, false);
|
||||||
var userInitiated = extras?.Item2;
|
Device.BeginInvokeOnMainThread(async () => await LockedAsync(userId, userInitiated));
|
||||||
Device.BeginInvokeOnMainThread(async () =>
|
|
||||||
await LockedAsync(userId, userInitiated.GetValueOrDefault()));
|
|
||||||
}
|
}
|
||||||
else if (message.Command == "lockVault")
|
else if (message.Command == "lockVault")
|
||||||
{
|
{
|
||||||
@ -85,12 +83,9 @@ namespace Bit.App
|
|||||||
}
|
}
|
||||||
else if (message.Command == "logout")
|
else if (message.Command == "logout")
|
||||||
{
|
{
|
||||||
var extras = message.Data as Tuple<string, bool, bool>;
|
var (userId, userInitiated, expired) =
|
||||||
var userId = extras?.Item1;
|
message.Data as Tuple<string, bool, bool> ?? new Tuple<string, bool, bool>(null, true, false);
|
||||||
var userInitiated = extras?.Item2;
|
Device.BeginInvokeOnMainThread(async () => await LogOutAsync(userId, userInitiated, expired));
|
||||||
var expired = extras?.Item3;
|
|
||||||
Device.BeginInvokeOnMainThread(async () =>
|
|
||||||
await LogOutAsync(userId, userInitiated, expired));
|
|
||||||
}
|
}
|
||||||
else if (message.Command == "loggedOut")
|
else if (message.Command == "loggedOut")
|
||||||
{
|
{
|
||||||
@ -262,13 +257,13 @@ namespace Bit.App
|
|||||||
new System.Globalization.UmAlQuraCalendar();
|
new System.Globalization.UmAlQuraCalendar();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task LogOutAsync(string userId, bool? userInitiated, bool? expired)
|
private async Task LogOutAsync(string userId, bool userInitiated, bool expired)
|
||||||
{
|
{
|
||||||
await AppHelpers.LogOutAsync(userId, userInitiated.GetValueOrDefault(true));
|
await AppHelpers.LogOutAsync(userId, userInitiated);
|
||||||
await SetMainPageAsync();
|
await SetMainPageAsync();
|
||||||
_authService.LogOut(() =>
|
_authService.LogOut(() =>
|
||||||
{
|
{
|
||||||
if (expired.GetValueOrDefault())
|
if (expired)
|
||||||
{
|
{
|
||||||
_platformUtilsService.ShowToast("warning", null, AppResources.LoginExpired);
|
_platformUtilsService.ShowToast("warning", null, AppResources.LoginExpired);
|
||||||
}
|
}
|
||||||
@ -432,7 +427,7 @@ namespace Bit.App
|
|||||||
|
|
||||||
private async Task LockedAsync(string userId, bool autoPromptBiometric)
|
private async Task LockedAsync(string userId, bool autoPromptBiometric)
|
||||||
{
|
{
|
||||||
if (!await _stateService.IsActiveAccount(userId))
|
if (!await _stateService.IsActiveAccountAsync(userId))
|
||||||
{
|
{
|
||||||
_platformUtilsService.ShowToast("info", null, AppResources.AccountLockedSuccessfully);
|
_platformUtilsService.ShowToast("info", null, AppResources.AccountLockedSuccessfully);
|
||||||
return;
|
return;
|
||||||
|
@ -240,6 +240,13 @@ namespace Bit.App.Utilities
|
|||||||
await platformUtilsService.ShowDialogAsync(text, title, AppResources.Yes, AppResources.Cancel);
|
await platformUtilsService.ShowDialogAsync(text, title, AppResources.Yes, AppResources.Cancel);
|
||||||
if (confirmed)
|
if (confirmed)
|
||||||
{
|
{
|
||||||
|
var stateService = ServiceContainer.Resolve<IStateService>("stateService");
|
||||||
|
if (await stateService.IsActiveAccountAsync(userId))
|
||||||
|
{
|
||||||
|
var messagingService = ServiceContainer.Resolve<IMessagingService>("messagingService");
|
||||||
|
messagingService.Send("logout");
|
||||||
|
return selection;
|
||||||
|
}
|
||||||
await LogOutAsync(userId, true);
|
await LogOutAsync(userId, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -509,7 +516,7 @@ namespace Bit.App.Utilities
|
|||||||
var policyService = ServiceContainer.Resolve<IPolicyService>("policyService");
|
var policyService = ServiceContainer.Resolve<IPolicyService>("policyService");
|
||||||
var searchService = ServiceContainer.Resolve<ISearchService>("searchService");
|
var searchService = ServiceContainer.Resolve<ISearchService>("searchService");
|
||||||
|
|
||||||
var isActiveAccount = await stateService.IsActiveAccount(userId);
|
var isActiveAccount = await stateService.IsActiveAccountAsync(userId);
|
||||||
|
|
||||||
if (userId == null)
|
if (userId == null)
|
||||||
{
|
{
|
||||||
|
@ -12,7 +12,7 @@ namespace Bit.Core.Abstractions
|
|||||||
{
|
{
|
||||||
List<AccountView> AccountViews { get; }
|
List<AccountView> AccountViews { get; }
|
||||||
Task<string> GetActiveUserIdAsync();
|
Task<string> GetActiveUserIdAsync();
|
||||||
Task<bool> IsActiveAccount(string userId = null);
|
Task<bool> IsActiveAccountAsync(string userId = null);
|
||||||
Task SetActiveUserAsync(string userId);
|
Task SetActiveUserAsync(string userId);
|
||||||
Task<bool> IsAuthenticatedAsync(string userId = null);
|
Task<bool> IsAuthenticatedAsync(string userId = null);
|
||||||
Task<string> GetUserIdAsync(string email);
|
Task<string> GetUserIdAsync(string email);
|
||||||
|
@ -42,7 +42,7 @@ namespace Bit.Core.Services
|
|||||||
return activeUserId;
|
return activeUserId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> IsActiveAccount(string userId = null)
|
public async Task<bool> IsActiveAccountAsync(string userId = null)
|
||||||
{
|
{
|
||||||
if (userId == null)
|
if (userId == null)
|
||||||
{
|
{
|
||||||
|
@ -19,8 +19,8 @@ namespace Bit.Core.Services
|
|||||||
private readonly ITokenService _tokenService;
|
private readonly ITokenService _tokenService;
|
||||||
private readonly IPolicyService _policyService;
|
private readonly IPolicyService _policyService;
|
||||||
private readonly IKeyConnectorService _keyConnectorService;
|
private readonly IKeyConnectorService _keyConnectorService;
|
||||||
private readonly Func<Tuple<string, bool>, Task> _lockedCallback;
|
private readonly Func<(string userId, bool userInitiated), Task> _lockedCallback;
|
||||||
private readonly Func<Tuple<string, bool, bool>, Task> _loggedOutCallback;
|
private readonly Func<(string userId, bool userInitiated, bool expired), Task> _loggedOutCallback;
|
||||||
|
|
||||||
public VaultTimeoutService(
|
public VaultTimeoutService(
|
||||||
ICryptoService cryptoService,
|
ICryptoService cryptoService,
|
||||||
@ -34,8 +34,8 @@ namespace Bit.Core.Services
|
|||||||
ITokenService tokenService,
|
ITokenService tokenService,
|
||||||
IPolicyService policyService,
|
IPolicyService policyService,
|
||||||
IKeyConnectorService keyConnectorService,
|
IKeyConnectorService keyConnectorService,
|
||||||
Func<Tuple<string, bool>, Task> lockedCallback,
|
Func<(string userId, bool userInitiated), Task> lockedCallback,
|
||||||
Func<Tuple<string, bool, bool>, Task> loggedOutCallback)
|
Func<(string userId, bool userInitiated, bool expired), Task> loggedOutCallback)
|
||||||
{
|
{
|
||||||
_cryptoService = cryptoService;
|
_cryptoService = cryptoService;
|
||||||
_stateService = stateService;
|
_stateService = stateService;
|
||||||
@ -70,12 +70,9 @@ namespace Bit.Core.Services
|
|||||||
|
|
||||||
public async Task<bool> ShouldLockAsync(string userId = null)
|
public async Task<bool> ShouldLockAsync(string userId = null)
|
||||||
{
|
{
|
||||||
if (await ShouldTimeoutAsync(userId))
|
return await ShouldTimeoutAsync(userId)
|
||||||
{
|
&&
|
||||||
var action = await _stateService.GetVaultTimeoutActionAsync(userId);
|
await _stateService.GetVaultTimeoutActionAsync(userId) == VaultTimeoutAction.Lock;
|
||||||
return action == VaultTimeoutAction.Lock;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> IsLoggedOutByTimeoutAsync(string userId = null)
|
public async Task<bool> IsLoggedOutByTimeoutAsync(string userId = null)
|
||||||
@ -87,12 +84,9 @@ namespace Bit.Core.Services
|
|||||||
|
|
||||||
public async Task<bool> ShouldLogOutByTimeoutAsync(string userId = null)
|
public async Task<bool> ShouldLogOutByTimeoutAsync(string userId = null)
|
||||||
{
|
{
|
||||||
if (await ShouldTimeoutAsync(userId))
|
return await ShouldTimeoutAsync(userId)
|
||||||
{
|
&&
|
||||||
var action = await _stateService.GetVaultTimeoutActionAsync(userId);
|
await _stateService.GetVaultTimeoutActionAsync(userId) == VaultTimeoutAction.Logout;
|
||||||
return action == VaultTimeoutAction.Logout;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task CheckVaultTimeoutAsync()
|
public async Task CheckVaultTimeoutAsync()
|
||||||
@ -164,7 +158,7 @@ namespace Bit.Core.Services
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var isActiveAccount = await _stateService.IsActiveAccount(userId);
|
var isActiveAccount = await _stateService.IsActiveAccountAsync(userId);
|
||||||
|
|
||||||
if (userId == null)
|
if (userId == null)
|
||||||
{
|
{
|
||||||
@ -189,7 +183,7 @@ namespace Bit.Core.Services
|
|||||||
await _stateService.SetBiometricLockedAsync(isBiometricLockSet, userId);
|
await _stateService.SetBiometricLockedAsync(isBiometricLockSet, userId);
|
||||||
if (isBiometricLockSet)
|
if (isBiometricLockSet)
|
||||||
{
|
{
|
||||||
_lockedCallback?.Invoke(new Tuple<string, bool>(userId, userInitiated));
|
_lockedCallback?.Invoke((userId, userInitiated));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -206,14 +200,14 @@ namespace Bit.Core.Services
|
|||||||
_collectionService.ClearCache();
|
_collectionService.ClearCache();
|
||||||
_searchService.ClearIndex();
|
_searchService.ClearIndex();
|
||||||
}
|
}
|
||||||
_lockedCallback?.Invoke(new Tuple<string, bool>(userId, userInitiated));
|
_lockedCallback?.Invoke((userId, userInitiated));
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task LogOutAsync(bool userInitiated = true, string userId = null)
|
public async Task LogOutAsync(bool userInitiated = true, string userId = null)
|
||||||
{
|
{
|
||||||
if(_loggedOutCallback != null)
|
if(_loggedOutCallback != null)
|
||||||
{
|
{
|
||||||
await _loggedOutCallback.Invoke(new Tuple<string, bool, bool>(userId, userInitiated, false));
|
await _loggedOutCallback.Invoke((userId, userInitiated, false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ namespace Bit.Core.Utilities
|
|||||||
var apiService = new ApiService(tokenService, platformUtilsService, (extras) =>
|
var apiService = new ApiService(tokenService, platformUtilsService, (extras) =>
|
||||||
{
|
{
|
||||||
messagingService.Send("logout", extras);
|
messagingService.Send("logout", extras);
|
||||||
return Task.FromResult(0);
|
return Task.CompletedTask;
|
||||||
}, customUserAgent);
|
}, customUserAgent);
|
||||||
var appIdService = new AppIdService(storageService);
|
var appIdService = new AppIdService(storageService);
|
||||||
var organizationService = new OrganizationService(stateService);
|
var organizationService = new OrganizationService(stateService);
|
||||||
@ -56,19 +56,19 @@ namespace Bit.Core.Utilities
|
|||||||
(extras) =>
|
(extras) =>
|
||||||
{
|
{
|
||||||
messagingService.Send("locked", extras);
|
messagingService.Send("locked", extras);
|
||||||
return Task.FromResult(0);
|
return Task.CompletedTask;
|
||||||
},
|
},
|
||||||
(extras) =>
|
(extras) =>
|
||||||
{
|
{
|
||||||
messagingService.Send("logout", extras);
|
messagingService.Send("logout", extras);
|
||||||
return Task.FromResult(0);
|
return Task.CompletedTask;
|
||||||
});
|
});
|
||||||
var syncService = new SyncService(stateService, apiService, settingsService, folderService, cipherService,
|
var syncService = new SyncService(stateService, apiService, settingsService, folderService, cipherService,
|
||||||
cryptoService, collectionService, organizationService, messagingService, policyService, sendService,
|
cryptoService, collectionService, organizationService, messagingService, policyService, sendService,
|
||||||
keyConnectorService, (extras) =>
|
keyConnectorService, (extras) =>
|
||||||
{
|
{
|
||||||
messagingService.Send("logout", extras);
|
messagingService.Send("logout", extras);
|
||||||
return Task.FromResult(0);
|
return Task.CompletedTask;
|
||||||
});
|
});
|
||||||
var passwordGenerationService = new PasswordGenerationService(cryptoService, stateService,
|
var passwordGenerationService = new PasswordGenerationService(cryptoService, stateService,
|
||||||
cryptoFunctionService, policyService);
|
cryptoFunctionService, policyService);
|
||||||
|
Loading…
Reference in New Issue
Block a user