From fd5ef49811fbc55b7d48f271a871087d4308bb45 Mon Sep 17 00:00:00 2001 From: Jacob Fink Date: Fri, 4 Aug 2023 13:38:04 -0400 Subject: [PATCH] [PM-2713] add async to key connector service methods --- src/App/Pages/Accounts/LockPageViewModel.cs | 2 +- .../RemoveMasterPasswordPageViewModel.cs | 4 ++-- .../Settings/ExportVaultPageViewModel.cs | 4 ++-- .../SettingsPage/SettingsPageViewModel.cs | 4 ++-- src/App/Pages/TabsPage.cs | 2 +- src/App/Pages/Vault/CipherAddEditPage.xaml.cs | 2 +- .../Services/MobilePasswordRepromptService.cs | 2 +- .../VerificationActionsFlowHelper.cs | 2 +- src/Core/Abstractions/IApiService.cs | 2 +- src/Core/Abstractions/IKeyConnectorService.cs | 12 +++++------ src/Core/Services/ApiService.cs | 2 +- src/Core/Services/AuthService.cs | 3 +-- src/Core/Services/CryptoService.cs | 8 ++++---- src/Core/Services/KeyConnectorService.cs | 20 +++++++++---------- src/Core/Services/SyncService.cs | 2 +- src/Core/Services/VaultTimeoutService.cs | 2 +- 16 files changed, 36 insertions(+), 37 deletions(-) diff --git a/src/App/Pages/Accounts/LockPageViewModel.cs b/src/App/Pages/Accounts/LockPageViewModel.cs index b242e7fdb..2e85731b0 100644 --- a/src/App/Pages/Accounts/LockPageViewModel.cs +++ b/src/App/Pages/Accounts/LockPageViewModel.cs @@ -171,7 +171,7 @@ namespace Bit.App.Pages BiometricEnabled = await _vaultTimeoutService.IsBiometricLockSetAsync() && await _cryptoService.HasEncryptedUserKeyAsync(); // Users with key connector and without biometric or pin has no MP to unlock with - _usingKeyConnector = await _keyConnectorService.GetUsesKeyConnector(); + _usingKeyConnector = await _keyConnectorService.GetUsesKeyConnectorAsync(); if (_usingKeyConnector && !(BiometricEnabled || PinEnabled)) { await _vaultTimeoutService.LogOutAsync(); diff --git a/src/App/Pages/Accounts/RemoveMasterPasswordPageViewModel.cs b/src/App/Pages/Accounts/RemoveMasterPasswordPageViewModel.cs index ca29c71ae..11e39579e 100644 --- a/src/App/Pages/Accounts/RemoveMasterPasswordPageViewModel.cs +++ b/src/App/Pages/Accounts/RemoveMasterPasswordPageViewModel.cs @@ -30,14 +30,14 @@ namespace Bit.App.Pages public async Task Init() { - Organization = await _keyConnectorService.GetManagingOrganization(); + Organization = await _keyConnectorService.GetManagingOrganizationAsync(); } public async Task MigrateAccount() { await _deviceActionService.ShowLoadingAsync(AppResources.Loading); - await _keyConnectorService.MigrateUser(); + await _keyConnectorService.MigrateUserAsync(); await _syncService.FullSyncAsync(true); await _deviceActionService.HideLoadingAsync(); diff --git a/src/App/Pages/Settings/ExportVaultPageViewModel.cs b/src/App/Pages/Settings/ExportVaultPageViewModel.cs index 403cf6e8c..4029d5c5f 100644 --- a/src/App/Pages/Settings/ExportVaultPageViewModel.cs +++ b/src/App/Pages/Settings/ExportVaultPageViewModel.cs @@ -67,7 +67,7 @@ namespace Bit.App.Pages _initialized = true; FileFormatSelectedIndex = FileFormatOptions.FindIndex(k => k.Key == "json"); DisablePrivateVaultPolicyEnabled = await _policyService.PolicyAppliesToUser(PolicyType.DisablePersonalVaultExport); - UseOTPVerification = await _keyConnectorService.GetUsesKeyConnector(); + UseOTPVerification = await _keyConnectorService.GetUsesKeyConnectorAsync(); if (UseOTPVerification) { @@ -165,7 +165,7 @@ namespace Bit.App.Pages return; } - var verificationType = await _keyConnectorService.GetUsesKeyConnector() + var verificationType = await _keyConnectorService.GetUsesKeyConnectorAsync() ? VerificationType.OTP : VerificationType.MasterPassword; if (!await _userVerificationService.VerifyUser(Secret, verificationType)) diff --git a/src/App/Pages/Settings/SettingsPage/SettingsPageViewModel.cs b/src/App/Pages/Settings/SettingsPage/SettingsPageViewModel.cs index 5f75ac3d7..63567e542 100644 --- a/src/App/Pages/Settings/SettingsPage/SettingsPageViewModel.cs +++ b/src/App/Pages/Settings/SettingsPage/SettingsPageViewModel.cs @@ -149,7 +149,7 @@ namespace Bit.App.Pages } _showChangeMasterPassword = IncludeLinksWithSubscriptionInfo() && - !await _keyConnectorService.GetUsesKeyConnector(); + !await _keyConnectorService.GetUsesKeyConnectorAsync(); _reportLoggingEnabled = await _loggerService.IsEnabled(); _approvePasswordlessLoginRequests = await _stateService.GetApprovePasswordlessLoginsAsync(); _shouldConnectToWatch = await _stateService.GetShouldConnectToWatchAsync(); @@ -429,7 +429,7 @@ namespace Bit.App.Pages if (!string.IsNullOrWhiteSpace(pin)) { var masterPassOnRestart = false; - if (!await _keyConnectorService.GetUsesKeyConnector()) + if (!await _keyConnectorService.GetUsesKeyConnectorAsync()) { masterPassOnRestart = await _platformUtilsService.ShowDialogAsync( AppResources.PINRequireMasterPasswordRestart, AppResources.UnlockWithPIN, diff --git a/src/App/Pages/TabsPage.cs b/src/App/Pages/TabsPage.cs index 861724cf0..88c638101 100644 --- a/src/App/Pages/TabsPage.cs +++ b/src/App/Pages/TabsPage.cs @@ -94,7 +94,7 @@ namespace Bit.App.Pages } }); await UpdateVaultButtonTitleAsync(); - if (await _keyConnectorService.UserNeedsMigration()) + if (await _keyConnectorService.UserNeedsMigrationAsync()) { _messagingService.Send("convertAccountToKeyConnector"); } diff --git a/src/App/Pages/Vault/CipherAddEditPage.xaml.cs b/src/App/Pages/Vault/CipherAddEditPage.xaml.cs index 59a246529..71fd94013 100644 --- a/src/App/Pages/Vault/CipherAddEditPage.xaml.cs +++ b/src/App/Pages/Vault/CipherAddEditPage.xaml.cs @@ -176,7 +176,7 @@ namespace Bit.App.Pages } }); // Hide password reprompt option if using key connector - _passwordPrompt.IsVisible = !await _keyConnectorService.GetUsesKeyConnector(); + _passwordPrompt.IsVisible = !await _keyConnectorService.GetUsesKeyConnectorAsync(); } protected override void OnDisappearing() diff --git a/src/App/Services/MobilePasswordRepromptService.cs b/src/App/Services/MobilePasswordRepromptService.cs index 28a8e5a86..c81e34ce0 100644 --- a/src/App/Services/MobilePasswordRepromptService.cs +++ b/src/App/Services/MobilePasswordRepromptService.cs @@ -44,7 +44,7 @@ namespace Bit.App.Services public async Task Enabled() { var keyConnectorService = ServiceContainer.Resolve("keyConnectorService"); - return !await keyConnectorService.GetUsesKeyConnector(); + return !await keyConnectorService.GetUsesKeyConnectorAsync(); } } } diff --git a/src/App/Utilities/VerificationActionsFlowHelper.cs b/src/App/Utilities/VerificationActionsFlowHelper.cs index febaf798d..20f5f1b9c 100644 --- a/src/App/Utilities/VerificationActionsFlowHelper.cs +++ b/src/App/Utilities/VerificationActionsFlowHelper.cs @@ -107,7 +107,7 @@ namespace Bit.App.Utilities public async Task ValidateAndExecuteAsync() { - var verificationType = await _keyConnectorService.GetUsesKeyConnector() + var verificationType = await _keyConnectorService.GetUsesKeyConnectorAsync() ? VerificationType.OTP : VerificationType.MasterPassword; diff --git a/src/Core/Abstractions/IApiService.cs b/src/Core/Abstractions/IApiService.cs index c62c4bb30..3abb6097e 100644 --- a/src/Core/Abstractions/IApiService.cs +++ b/src/Core/Abstractions/IApiService.cs @@ -70,7 +70,7 @@ namespace Bit.Core.Abstractions Task GetOrganizationAutoEnrollStatusAsync(string identifier); Task PutOrganizationUserResetPasswordEnrollmentAsync(string orgId, string userId, OrganizationUserResetPasswordEnrollmentRequest request); - Task GetMasterKeyFromKeyConnector(string keyConnectorUrl); + Task GetMasterKeyFromKeyConnectorAsync(string keyConnectorUrl); Task PostUserKeyToKeyConnector(string keyConnectorUrl, KeyConnectorUserKeyRequest request); Task PostSetKeyConnectorKey(SetKeyConnectorKeyRequest request); Task PostConvertToKeyConnector(); diff --git a/src/Core/Abstractions/IKeyConnectorService.cs b/src/Core/Abstractions/IKeyConnectorService.cs index 0f88c5e22..c7256f5b2 100644 --- a/src/Core/Abstractions/IKeyConnectorService.cs +++ b/src/Core/Abstractions/IKeyConnectorService.cs @@ -6,11 +6,11 @@ namespace Bit.Core.Abstractions { public interface IKeyConnectorService { - Task SetUsesKeyConnector(bool usesKeyConnector); - Task GetUsesKeyConnector(); - Task UserNeedsMigration(); - Task MigrateUser(); - Task GetAndSetKey(string url); - Task GetManagingOrganization(); + Task SetUsesKeyConnectorAsync(bool usesKeyConnector); + Task GetUsesKeyConnectorAsync(); + Task UserNeedsMigrationAsync(); + Task MigrateUserAsync(); + Task GetAndSetMasterKeyAsync(string url); + Task GetManagingOrganizationAsync(); } } diff --git a/src/Core/Services/ApiService.cs b/src/Core/Services/ApiService.cs index 5516cfe90..4b6946077 100644 --- a/src/Core/Services/ApiService.cs +++ b/src/Core/Services/ApiService.cs @@ -485,7 +485,7 @@ namespace Bit.Core.Services #region Key Connector - public async Task GetMasterKeyFromKeyConnector(string keyConnectorUrl) + public async Task GetMasterKeyFromKeyConnectorAsync(string keyConnectorUrl) { using (var requestMessage = new HttpRequestMessage()) { diff --git a/src/Core/Services/AuthService.cs b/src/Core/Services/AuthService.cs index a5a686ebc..28ffeef2d 100644 --- a/src/Core/Services/AuthService.cs +++ b/src/Core/Services/AuthService.cs @@ -46,7 +46,6 @@ namespace Bit.Core.Services II18nService i18nService, IPlatformUtilsService platformUtilsService, IMessagingService messagingService, - IVaultTimeoutService vaultTimeoutService, IKeyConnectorService keyConnectorService, IPasswordGenerationService passwordGenerationService, IPolicyService policyService, @@ -480,7 +479,7 @@ namespace Bit.Core.Services { if (tokenResponse.KeyConnectorUrl != null) { - await _keyConnectorService.GetAndSetKey(tokenResponse.KeyConnectorUrl); + await _keyConnectorService.GetAndSetMasterKeyAsync(tokenResponse.KeyConnectorUrl); } await _cryptoService.SetMasterKeyEncryptedUserKeyAsync(tokenResponse.Key); diff --git a/src/Core/Services/CryptoService.cs b/src/Core/Services/CryptoService.cs index e0eaa8e8f..b61d5aaab 100644 --- a/src/Core/Services/CryptoService.cs +++ b/src/Core/Services/CryptoService.cs @@ -143,7 +143,7 @@ namespace Bit.Core.Services public async Task> EncryptUserKeyWithMasterKeyAsync(MasterKey masterKey) { var userKey = await GetUserKeyAsync() ?? await MakeUserKeyAsync(); - return await BuildProtectedSymmetricKey(masterKey, userKey.Key, keyBytes => new UserKey(keyBytes)); + return await BuildProtectedSymmetricKeyAsync(masterKey, userKey.Key, keyBytes => new UserKey(keyBytes)); } public async Task DecryptUserKeyWithMasterKeyAsync(MasterKey masterKey, EncString encUserKey = null, string userId = null) @@ -198,7 +198,7 @@ namespace Bit.Core.Services } var newSymKey = await _cryptoFunctionService.RandomBytesAsync(64); - return await BuildProtectedSymmetricKey(key, newSymKey, keyBytes => new SymmetricCryptoKey(keyBytes)); + return await BuildProtectedSymmetricKeyAsync(key, newSymKey, keyBytes => new SymmetricCryptoKey(keyBytes)); } public async Task HashMasterKeyAsync(string password, MasterKey masterKey, HashPurpose hashPurpose = HashPurpose.ServerAuthorization) @@ -874,7 +874,7 @@ namespace Bit.Core.Services } // TODO: This needs to be moved into SymmetricCryptoKey model to remove the keyCreator hack - private async Task> BuildProtectedSymmetricKey(SymmetricCryptoKey key, + private async Task> BuildProtectedSymmetricKeyAsync(SymmetricCryptoKey key, byte[] encKey, Func keyCreator) where TKey : SymmetricCryptoKey { EncString encKeyEnc = null; @@ -898,7 +898,7 @@ namespace Bit.Core.Services private async Task MakeKeyAsync(string password, string salt, KdfConfig kdfConfig, Func keyCreator) where TKey : SymmetricCryptoKey { - byte[] key = null; + byte[] key; if (kdfConfig.Type == null || kdfConfig.Type == KdfType.PBKDF2_SHA256) { var iterations = kdfConfig.Iterations.GetValueOrDefault(5000); diff --git a/src/Core/Services/KeyConnectorService.cs b/src/Core/Services/KeyConnectorService.cs index a997c5c40..0ce4fa6be 100644 --- a/src/Core/Services/KeyConnectorService.cs +++ b/src/Core/Services/KeyConnectorService.cs @@ -24,11 +24,11 @@ namespace Bit.Core.Services _organizationService = organizationService; } - public async Task GetAndSetKey(string url) + public async Task GetAndSetMasterKeyAsync(string url) { try { - var masterKeyResponse = await _apiService.GetMasterKeyFromKeyConnector(url); + var masterKeyResponse = await _apiService.GetMasterKeyFromKeyConnectorAsync(url); var masterKeyArr = Convert.FromBase64String(masterKeyResponse.Key); var masterKey = new MasterKey(masterKeyArr); await _cryptoService.SetMasterKeyAsync(masterKey); @@ -39,17 +39,17 @@ namespace Bit.Core.Services } } - public async Task SetUsesKeyConnector(bool usesKeyConnector) + public async Task SetUsesKeyConnectorAsync(bool usesKeyConnector) { await _stateService.SetUsesKeyConnectorAsync(usesKeyConnector); } - public async Task GetUsesKeyConnector() + public async Task GetUsesKeyConnectorAsync() { return await _stateService.GetUsesKeyConnectorAsync(); } - public async Task GetManagingOrganization() + public async Task GetManagingOrganizationAsync() { var orgs = await _organizationService.GetAllAsync(); return orgs.Find(o => @@ -57,9 +57,9 @@ namespace Bit.Core.Services !o.IsAdmin); } - public async Task MigrateUser() + public async Task MigrateUserAsync() { - var organization = await GetManagingOrganization(); + var organization = await GetManagingOrganizationAsync(); var masterKey = await _cryptoService.GetMasterKeyAsync(); try @@ -75,11 +75,11 @@ namespace Bit.Core.Services await _apiService.PostConvertToKeyConnector(); } - public async Task UserNeedsMigration() + public async Task UserNeedsMigrationAsync() { var loggedInUsingSso = await _tokenService.GetIsExternal(); - var requiredByOrganization = await GetManagingOrganization() != null; - var userIsNotUsingKeyConnector = !await GetUsesKeyConnector(); + var requiredByOrganization = await GetManagingOrganizationAsync() != null; + var userIsNotUsingKeyConnector = !await GetUsesKeyConnectorAsync(); return loggedInUsingSso && requiredByOrganization && userIsNotUsingKeyConnector; } diff --git a/src/Core/Services/SyncService.cs b/src/Core/Services/SyncService.cs index e4dfd6660..40abff9d3 100644 --- a/src/Core/Services/SyncService.cs +++ b/src/Core/Services/SyncService.cs @@ -337,7 +337,7 @@ namespace Bit.Core.Services await _stateService.SetNameAsync(response.Name); await _stateService.SetPersonalPremiumAsync(response.Premium); await _stateService.SetAvatarColorAsync(response.AvatarColor); - await _keyConnectorService.SetUsesKeyConnector(response.UsesKeyConnector); + await _keyConnectorService.SetUsesKeyConnectorAsync(response.UsesKeyConnector); } private async Task SyncFoldersAsync(string userId, List response) diff --git a/src/Core/Services/VaultTimeoutService.cs b/src/Core/Services/VaultTimeoutService.cs index 28b48c258..e7ca6e813 100644 --- a/src/Core/Services/VaultTimeoutService.cs +++ b/src/Core/Services/VaultTimeoutService.cs @@ -179,7 +179,7 @@ namespace Bit.Core.Services userId = await _stateService.GetActiveUserIdAsync(); } - if (await _keyConnectorService.GetUsesKeyConnector()) + if (await _keyConnectorService.GetUsesKeyConnectorAsync()) { var pinStatus = await GetPinLockTypeAsync(userId); var ephemeralPinSet = await _stateService.GetPinKeyEncryptedUserKeyEphemeralAsync()