1
0
mirror of https://github.com/bitwarden/server.git synced 2024-11-25 12:45:18 +01:00

Add push notification to sync new asymmetric keys to other devices

This commit is contained in:
Thomas Avery 2024-11-14 17:00:44 -06:00
parent 3ffa5555e1
commit 6899e49bb5
No known key found for this signature in database
GPG Key ID: 44A02A0410B0F429
2 changed files with 19 additions and 0 deletions

View File

@ -8,6 +8,7 @@ using Bit.Core.Exceptions;
using Bit.Core.KeyManagement.Commands.Interfaces; using Bit.Core.KeyManagement.Commands.Interfaces;
using Bit.Core.KeyManagement.Models.Data; using Bit.Core.KeyManagement.Models.Data;
using Bit.Core.KeyManagement.Repositories; using Bit.Core.KeyManagement.Repositories;
using Bit.Core.Services;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
namespace Bit.Core.KeyManagement.Commands; namespace Bit.Core.KeyManagement.Commands;
@ -17,15 +18,18 @@ public class RegenerateUserAsymmetricKeysCommand : IRegenerateUserAsymmetricKeys
private readonly ICurrentContext _currentContext; private readonly ICurrentContext _currentContext;
private readonly ILogger<RegenerateUserAsymmetricKeysCommand> _logger; private readonly ILogger<RegenerateUserAsymmetricKeysCommand> _logger;
private readonly IUserAsymmetricKeysRepository _userAsymmetricKeysRepository; private readonly IUserAsymmetricKeysRepository _userAsymmetricKeysRepository;
private readonly IPushNotificationService _pushService;
public RegenerateUserAsymmetricKeysCommand( public RegenerateUserAsymmetricKeysCommand(
ICurrentContext currentContext, ICurrentContext currentContext,
IUserAsymmetricKeysRepository userAsymmetricKeysRepository, IUserAsymmetricKeysRepository userAsymmetricKeysRepository,
IPushNotificationService pushService,
ILogger<RegenerateUserAsymmetricKeysCommand> logger) ILogger<RegenerateUserAsymmetricKeysCommand> logger)
{ {
_currentContext = currentContext; _currentContext = currentContext;
_logger = logger; _logger = logger;
_userAsymmetricKeysRepository = userAsymmetricKeysRepository; _userAsymmetricKeysRepository = userAsymmetricKeysRepository;
_pushService = pushService;
} }
public async Task RegenerateKeysAsync(UserAsymmetricKeys userAsymmetricKeys, public async Task RegenerateKeysAsync(UserAsymmetricKeys userAsymmetricKeys,
@ -61,5 +65,7 @@ public class RegenerateUserAsymmetricKeysCommand : IRegenerateUserAsymmetricKeys
_logger.LogInformation( _logger.LogInformation(
"User's asymmetric keys regenerated. UserId: {userId} OrganizationMembership: {inOrganizations} DesignatedEmergencyAccess: {hasDesignatedEmergencyAccess} DeviceType: {deviceType}", "User's asymmetric keys regenerated. UserId: {userId} OrganizationMembership: {inOrganizations} DesignatedEmergencyAccess: {hasDesignatedEmergencyAccess} DeviceType: {deviceType}",
userAsymmetricKeys.UserId, inOrganizations, hasDesignatedEmergencyAccess, _currentContext.DeviceType); userAsymmetricKeys.UserId, inOrganizations, hasDesignatedEmergencyAccess, _currentContext.DeviceType);
await _pushService.PushSyncSettingsAsync(userId.Value);
} }
} }

View File

@ -8,6 +8,7 @@ using Bit.Core.Exceptions;
using Bit.Core.KeyManagement.Commands; using Bit.Core.KeyManagement.Commands;
using Bit.Core.KeyManagement.Models.Data; using Bit.Core.KeyManagement.Models.Data;
using Bit.Core.KeyManagement.Repositories; using Bit.Core.KeyManagement.Repositories;
using Bit.Core.Services;
using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture;
using Bit.Test.Common.AutoFixture.Attributes; using Bit.Test.Common.AutoFixture.Attributes;
using NSubstitute; using NSubstitute;
@ -49,6 +50,9 @@ public class RegenerateUserAsymmetricKeysCommandTests
await sutProvider.GetDependency<IUserAsymmetricKeysRepository>() await sutProvider.GetDependency<IUserAsymmetricKeysRepository>()
.Received(1) .Received(1)
.RegenerateUserAsymmetricKeysAsync(Arg.Is(userAsymmetricKeys)); .RegenerateUserAsymmetricKeysAsync(Arg.Is(userAsymmetricKeys));
await sutProvider.GetDependency<IPushNotificationService>()
.Received(1)
.PushSyncSettingsAsync(Arg.Is(userAsymmetricKeys.UserId));
} }
[Theory] [Theory]
@ -88,6 +92,9 @@ public class RegenerateUserAsymmetricKeysCommandTests
await sutProvider.GetDependency<IUserAsymmetricKeysRepository>() await sutProvider.GetDependency<IUserAsymmetricKeysRepository>()
.ReceivedWithAnyArgs(0) .ReceivedWithAnyArgs(0)
.RegenerateUserAsymmetricKeysAsync(Arg.Any<UserAsymmetricKeys>()); .RegenerateUserAsymmetricKeysAsync(Arg.Any<UserAsymmetricKeys>());
await sutProvider.GetDependency<IPushNotificationService>()
.ReceivedWithAnyArgs(0)
.PushSyncSettingsAsync(Arg.Any<Guid>());
} }
[Theory] [Theory]
@ -110,6 +117,9 @@ public class RegenerateUserAsymmetricKeysCommandTests
await sutProvider.GetDependency<IUserAsymmetricKeysRepository>() await sutProvider.GetDependency<IUserAsymmetricKeysRepository>()
.ReceivedWithAnyArgs(0) .ReceivedWithAnyArgs(0)
.RegenerateUserAsymmetricKeysAsync(Arg.Any<UserAsymmetricKeys>()); .RegenerateUserAsymmetricKeysAsync(Arg.Any<UserAsymmetricKeys>());
await sutProvider.GetDependency<IPushNotificationService>()
.ReceivedWithAnyArgs(0)
.PushSyncSettingsAsync(Arg.Any<Guid>());
} }
[Theory] [Theory]
@ -134,6 +144,9 @@ public class RegenerateUserAsymmetricKeysCommandTests
await sutProvider.GetDependency<IUserAsymmetricKeysRepository>() await sutProvider.GetDependency<IUserAsymmetricKeysRepository>()
.ReceivedWithAnyArgs(0) .ReceivedWithAnyArgs(0)
.RegenerateUserAsymmetricKeysAsync(Arg.Any<UserAsymmetricKeys>()); .RegenerateUserAsymmetricKeysAsync(Arg.Any<UserAsymmetricKeys>());
await sutProvider.GetDependency<IPushNotificationService>()
.ReceivedWithAnyArgs(0)
.PushSyncSettingsAsync(Arg.Any<Guid>());
} }
private static ICollection<OrganizationUser> CreateInOrganizationAccounts(Guid userId, private static ICollection<OrganizationUser> CreateInOrganizationAccounts(Guid userId,