diff --git a/src/Core/KeyManagement/UserKey/Implementations/RotateUserAccountkeysCommand.cs b/src/Core/KeyManagement/UserKey/Implementations/RotateUserAccountkeysCommand.cs
index 6967c9bf85..57aa8e02d4 100644
--- a/src/Core/KeyManagement/UserKey/Implementations/RotateUserAccountkeysCommand.cs
+++ b/src/Core/KeyManagement/UserKey/Implementations/RotateUserAccountkeysCommand.cs
@@ -11,56 +11,36 @@ using Microsoft.AspNetCore.Identity;
namespace Bit.Core.KeyManagement.UserKey.Implementations;
///
-public class RotateUserAccountKeysCommand : IRotateUserAccountKeysCommand
+///
+/// Instantiates a new
+///
+/// Master password hash validation
+/// Updates user keys and re-encrypted data if needed
+/// Provides a method to update re-encrypted cipher data
+/// Provides a method to update re-encrypted folder data
+/// Provides a method to update re-encrypted send data
+/// Provides a method to update re-encrypted emergency access data
+/// Provides a method to update re-encrypted organization user data
+/// Provides a method to update re-encrypted device data
+/// Hashes the new master password
+/// Logs out user from other devices after successful rotation
+/// Provides a password mismatch error if master password hash validation fails
+/// Provides a method to update re-encrypted WebAuthn keys
+public class RotateUserAccountKeysCommand(
+ IUserService _userService,
+ IUserRepository _userRepository,
+ ICipherRepository _cipherRepository,
+ IFolderRepository _folderRepository,
+ ISendRepository _sendRepository,
+ IEmergencyAccessRepository _emergencyAccessRepository,
+ IOrganizationUserRepository _organizationUserRepository,
+ IDeviceRepository _deviceRepository,
+ IPasswordHasher _passwordHasher,
+ IPushNotificationService _pushService,
+ IdentityErrorDescriber _identityErrorDescriber,
+ IWebAuthnCredentialRepository _credentialRepository
+) : IRotateUserAccountKeysCommand
{
- private readonly IUserService _userService;
- private readonly IUserRepository _userRepository;
- private readonly ICipherRepository _cipherRepository;
- private readonly IFolderRepository _folderRepository;
- private readonly ISendRepository _sendRepository;
- private readonly IEmergencyAccessRepository _emergencyAccessRepository;
- private readonly IOrganizationUserRepository _organizationUserRepository;
- private readonly IDeviceRepository _deviceRepository;
- private readonly IPushNotificationService _pushService;
- private readonly IdentityErrorDescriber _identityErrorDescriber;
- private readonly IWebAuthnCredentialRepository _credentialRepository;
- private readonly IPasswordHasher _passwordHasher;
-
- ///
- /// Instantiates a new
- ///
- /// Master password hash validation
- /// Updates user keys and re-encrypted data if needed
- /// Provides a method to update re-encrypted cipher data
- /// Provides a method to update re-encrypted folder data
- /// Provides a method to update re-encrypted send data
- /// Provides a method to update re-encrypted emergency access data
- /// Provides a method to update re-encrypted organization user data
- /// Hashes the new master password
- /// Logs out user from other devices after successful rotation
- /// Provides a password mismatch error if master password hash validation fails
- /// Provides a method to update re-encrypted WebAuthn keys
- public RotateUserAccountKeysCommand(IUserService userService, IUserRepository userRepository,
- ICipherRepository cipherRepository, IFolderRepository folderRepository, ISendRepository sendRepository,
- IEmergencyAccessRepository emergencyAccessRepository, IOrganizationUserRepository organizationUserRepository,
- IDeviceRepository deviceRepository,
- IPasswordHasher passwordHasher,
- IPushNotificationService pushService, IdentityErrorDescriber errors, IWebAuthnCredentialRepository credentialRepository)
- {
- _userService = userService;
- _userRepository = userRepository;
- _cipherRepository = cipherRepository;
- _folderRepository = folderRepository;
- _sendRepository = sendRepository;
- _emergencyAccessRepository = emergencyAccessRepository;
- _organizationUserRepository = organizationUserRepository;
- _deviceRepository = deviceRepository;
- _pushService = pushService;
- _identityErrorDescriber = errors;
- _credentialRepository = credentialRepository;
- _passwordHasher = passwordHasher;
- }
-
///
public async Task RotateUserAccountKeysAsync(User user, RotateUserAccountKeysData model)
{
@@ -78,16 +58,13 @@ public class RotateUserAccountKeysCommand : IRotateUserAccountKeysCommand
user.RevisionDate = user.AccountRevisionDate = now;
user.LastKeyRotationDate = now;
user.SecurityStamp = Guid.NewGuid().ToString();
+ List saveEncryptedDataActions = new();
- if (
- !model.MasterPasswordUnlockData.ValidateForUser(user)
- )
+ if (!model.MasterPasswordUnlockData.ValidateForUser(user))
{
throw new InvalidOperationException("The provided master password unlock data is not valid for this user.");
}
- if (
- model.AccountPublicKey != user.PublicKey
- )
+ if (model.AccountPublicKey != user.PublicKey)
{
throw new InvalidOperationException("The provided account public key does not match the user's current public key, and changing the account asymmetric keypair is currently not supported during key rotation.");
}
@@ -97,7 +74,6 @@ public class RotateUserAccountKeysCommand : IRotateUserAccountKeysCommand
user.MasterPassword = _passwordHasher.HashPassword(user, model.MasterPasswordUnlockData.MasterKeyAuthenticationHash);
user.MasterPasswordHint = model.MasterPasswordUnlockData.MasterPasswordHint;
- List saveEncryptedDataActions = new();
if (model.Ciphers.Any())
{
saveEncryptedDataActions.Add(_cipherRepository.UpdateForKeyRotation(user.Id, model.Ciphers));
@@ -115,14 +91,12 @@ public class RotateUserAccountKeysCommand : IRotateUserAccountKeysCommand
if (model.EmergencyAccesses.Any())
{
- saveEncryptedDataActions.Add(
- _emergencyAccessRepository.UpdateForKeyRotation(user.Id, model.EmergencyAccesses));
+ saveEncryptedDataActions.Add(_emergencyAccessRepository.UpdateForKeyRotation(user.Id, model.EmergencyAccesses));
}
if (model.OrganizationUsers.Any())
{
- saveEncryptedDataActions.Add(
- _organizationUserRepository.UpdateForKeyRotation(user.Id, model.OrganizationUsers));
+ saveEncryptedDataActions.Add(_organizationUserRepository.UpdateForKeyRotation(user.Id, model.OrganizationUsers));
}
if (model.WebAuthnKeys.Any())