1
0
mirror of https://github.com/bitwarden/server synced 2025-12-22 03:03:33 +00:00
Files
server/src/Core/KeyManagement/Commands/SetAccountKeysForUserCommand.cs
Bernd Schoolmann 9015bc8169 Fix DI
2025-12-02 16:50:59 +01:00

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);
}
}