mirror of
https://github.com/bitwarden/server
synced 2025-12-22 03:03:33 +00:00
56 lines
2.4 KiB
C#
56 lines
2.4 KiB
C#
using Bit.Core.KeyManagement.Commands.Interfaces;
|
|
using Bit.Core.KeyManagement.Entities;
|
|
using Bit.Core.KeyManagement.Models.Api.Request;
|
|
using Bit.Core.KeyManagement.Repositories;
|
|
using Bit.Core.Repositories;
|
|
using Bit.Core.Utilities;
|
|
|
|
namespace Bit.Core.KeyManagement.Commands;
|
|
|
|
public class SetAccountKeysForUserCommand : ISetAccountKeysForUserCommand
|
|
{
|
|
private readonly IUserRepository _userRepository;
|
|
private readonly IUserSignatureKeyPairRepository _userSignatureKeyPairRepository;
|
|
public SetAccountKeysForUserCommand(
|
|
IUserRepository userRepository,
|
|
IUserSignatureKeyPairRepository userSignatureKeyPairRepository)
|
|
{
|
|
_userRepository = userRepository;
|
|
_userSignatureKeyPairRepository = userSignatureKeyPairRepository;
|
|
}
|
|
|
|
public async Task SetAccountKeysForUserAsync(Guid userId, AccountKeysRequestModel accountKeys)
|
|
{
|
|
var user = await _userRepository.GetByIdAsync(userId);
|
|
if (user == null)
|
|
{
|
|
throw new ArgumentException("User not found", nameof(userId));
|
|
}
|
|
|
|
var accountKeysData = accountKeys.ToAccountKeysData();
|
|
|
|
// Update the public key encryption key pair data
|
|
user.PrivateKey = accountKeysData.PublicKeyEncryptionKeyPairData.WrappedPrivateKey;
|
|
user.PublicKey = accountKeysData.PublicKeyEncryptionKeyPairData.PublicKey;
|
|
user.RevisionDate = user.AccountRevisionDate = DateTime.UtcNow;
|
|
// Update the signature key pair data
|
|
if (accountKeysData.SignatureKeyPairData != null && accountKeysData.SecurityStateData != null)
|
|
{
|
|
user.SignedPublicKey = accountKeysData.PublicKeyEncryptionKeyPairData.SignedPublicKey;
|
|
user.SecurityState = accountKeysData.SecurityStateData.SecurityState;
|
|
user.SecurityVersion = accountKeysData.SecurityStateData.SecurityVersion;
|
|
await _userSignatureKeyPairRepository.UpsertAsync(new UserSignatureKeyPair
|
|
{
|
|
Id = CoreHelpers.GenerateComb(),
|
|
UserId = userId,
|
|
SignatureAlgorithm = accountKeysData.SignatureKeyPairData.SignatureAlgorithm,
|
|
SigningKey = accountKeysData.SignatureKeyPairData.WrappedSigningKey,
|
|
VerifyingKey = accountKeysData.SignatureKeyPairData.VerifyingKey,
|
|
CreationDate = DateTime.UtcNow,
|
|
RevisionDate = DateTime.UtcNow,
|
|
});
|
|
}
|
|
await _userRepository.ReplaceAsync(user);
|
|
}
|
|
}
|