From c7b1c7f6d57de0e619a7c7163be4cb74378344da Mon Sep 17 00:00:00 2001 From: Daniel James Smith <2670567+djsmith85@users.noreply.github.com> Date: Mon, 2 Jun 2025 16:49:49 +0200 Subject: [PATCH] [PM-22190] Remove gathering and reporting of ReferenceEvents (#5897) * Remove gathering and reporting of ReferenceEvents * Fix test that relied on reference events throwing --------- Co-authored-by: Daniel James Smith --- .../Controllers/OrganizationsController.cs | 18 -- .../Billing/Controllers/AccountsController.cs | 12 - .../Controllers/OrganizationsController.cs | 12 - .../Controllers/SecretsController.cs | 22 +- src/Api/Tools/Controllers/SendsController.cs | 6 +- .../Implementations/CustomerUpdatedHandler.cs | 27 +- .../PaymentSucceededHandler.cs | 50 ---- .../AdminConsole/Entities/Organization.cs | 3 +- .../Groups/CreateGroupCommand.cs | 15 +- ...teClaimedOrganizationUserAccountCommand.cs | 8 - .../InviteOrganizationUsersCommand.cs | 25 -- .../CloudOrganizationSignUpCommand.cs | 17 -- .../OrganizationDeleteCommand.cs | 12 - ...ProviderClientOrganizationSignUpCommand.cs | 16 - .../Implementations/OrganizationService.cs | 42 --- .../Implementations/RegisterUserCommand.cs | 27 -- src/Core/Entities/User.cs | 3 +- .../UpgradeOrganizationPlanCommand.cs | 29 -- .../Implementations/CollectionService.cs | 13 +- .../Services/Implementations/UserService.cs | 38 --- src/Core/Tools/Entities/IReferenceable.cs | 29 -- src/Core/Tools/Enums/ReferenceEventSource.cs | 15 - src/Core/Tools/Enums/ReferenceEventType.cs | 53 ---- .../ImportFeatures/ImportCiphersCommand.cs | 17 -- .../Tools/Models/Business/ReferenceEvent.cs | 274 ------------------ .../Commands/NonAnonymousSendCommand.cs | 20 -- .../Services/SendAuthorizationService.cs | 24 +- .../Tools/Services/IReferenceEventService.cs | 8 - .../AzureQueueReferenceEventService.cs | 48 --- .../NoopReferenceEventService.cs | 11 - .../Services/Implementations/CipherService.cs | 13 - .../Billing/Controller/AccountsController.cs | 15 - .../Controllers/AccountsController.cs | 27 -- .../Utilities/ServiceCollectionExtensions.cs | 9 - .../OrganizationsControllerTests.cs | 4 - .../Tools/Controllers/SendsControllerTests.cs | 6 +- .../Groups/CreateGroupCommandTests.cs | 8 - .../CloudOrganizationSignUpCommandTests.cs | 21 -- ...derClientOrganizationSignUpCommandTests.cs | 14 - .../Services/OrganizationServiceTests.cs | 16 +- .../Registration/RegisterUserCommandTests.cs | 40 --- test/Core.Test/Services/UserServiceTests.cs | 3 - .../ImportCiphersAsyncCommandTests.cs | 5 - .../Services/NonAnonymousSendCommandTests.cs | 47 --- .../Services/SendAuthorizationServiceTests.cs | 11 +- .../Controllers/AccountsControllerTests.cs | 27 -- .../Factories/WebApplicationFactoryBase.cs | 4 - 47 files changed, 17 insertions(+), 1147 deletions(-) delete mode 100644 src/Core/Tools/Entities/IReferenceable.cs delete mode 100644 src/Core/Tools/Enums/ReferenceEventSource.cs delete mode 100644 src/Core/Tools/Enums/ReferenceEventType.cs delete mode 100644 src/Core/Tools/Models/Business/ReferenceEvent.cs delete mode 100644 src/Core/Tools/Services/IReferenceEventService.cs delete mode 100644 src/Core/Tools/Services/Implementations/AzureQueueReferenceEventService.cs delete mode 100644 src/Core/Tools/Services/NoopImplementations/NoopReferenceEventService.cs diff --git a/src/Admin/AdminConsole/Controllers/OrganizationsController.cs b/src/Admin/AdminConsole/Controllers/OrganizationsController.cs index 8cd2222dbf..6d38a77d8b 100644 --- a/src/Admin/AdminConsole/Controllers/OrganizationsController.cs +++ b/src/Admin/AdminConsole/Controllers/OrganizationsController.cs @@ -12,7 +12,6 @@ using Bit.Core.Billing.Enums; using Bit.Core.Billing.Extensions; using Bit.Core.Billing.Pricing; using Bit.Core.Billing.Providers.Services; -using Bit.Core.Context; using Bit.Core.Enums; using Bit.Core.Models.OrganizationConnectionConfigs; using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces; @@ -20,9 +19,6 @@ using Bit.Core.Repositories; using Bit.Core.SecretsManager.Repositories; using Bit.Core.Services; using Bit.Core.Settings; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Core.Utilities; using Bit.Core.Vault.Repositories; using Microsoft.AspNetCore.Authorization; @@ -45,12 +41,9 @@ public class OrganizationsController : Controller private readonly IPaymentService _paymentService; private readonly IApplicationCacheService _applicationCacheService; private readonly GlobalSettings _globalSettings; - private readonly IReferenceEventService _referenceEventService; - private readonly IUserService _userService; private readonly IProviderRepository _providerRepository; private readonly ILogger _logger; private readonly IAccessControlService _accessControlService; - private readonly ICurrentContext _currentContext; private readonly ISecretRepository _secretRepository; private readonly IProjectRepository _projectRepository; private readonly IServiceAccountRepository _serviceAccountRepository; @@ -73,12 +66,9 @@ public class OrganizationsController : Controller IPaymentService paymentService, IApplicationCacheService applicationCacheService, GlobalSettings globalSettings, - IReferenceEventService referenceEventService, - IUserService userService, IProviderRepository providerRepository, ILogger logger, IAccessControlService accessControlService, - ICurrentContext currentContext, ISecretRepository secretRepository, IProjectRepository projectRepository, IServiceAccountRepository serviceAccountRepository, @@ -100,12 +90,9 @@ public class OrganizationsController : Controller _paymentService = paymentService; _applicationCacheService = applicationCacheService; _globalSettings = globalSettings; - _referenceEventService = referenceEventService; - _userService = userService; _providerRepository = providerRepository; _logger = logger; _accessControlService = accessControlService; - _currentContext = currentContext; _secretRepository = secretRepository; _projectRepository = projectRepository; _serviceAccountRepository = serviceAccountRepository; @@ -272,11 +259,6 @@ public class OrganizationsController : Controller await _organizationRepository.ReplaceAsync(organization); await _applicationCacheService.UpsertOrganizationAbilityAsync(organization); - await _referenceEventService.RaiseEventAsync(new ReferenceEvent(ReferenceEventType.OrganizationEditedByAdmin, organization, _currentContext) - { - EventRaisedByUser = _userService.GetUserName(User), - SalesAssistedTrialStarted = model.SalesAssistedTrialStarted, - }); return RedirectToAction("Edit", new { id }); } diff --git a/src/Api/Billing/Controllers/AccountsController.cs b/src/Api/Billing/Controllers/AccountsController.cs index 49ff679bb8..10d386641d 100644 --- a/src/Api/Billing/Controllers/AccountsController.cs +++ b/src/Api/Billing/Controllers/AccountsController.cs @@ -6,14 +6,10 @@ using Bit.Api.Utilities; using Bit.Core.Auth.UserFeatures.TwoFactorAuth.Interfaces; using Bit.Core.Billing.Models; using Bit.Core.Billing.Services; -using Bit.Core.Context; using Bit.Core.Exceptions; using Bit.Core.Models.Business; using Bit.Core.Services; using Bit.Core.Settings; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Core.Utilities; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -161,8 +157,6 @@ public class AccountsController( [HttpPost("cancel")] public async Task PostCancelAsync( [FromBody] SubscriptionCancellationRequestModel request, - [FromServices] ICurrentContext currentContext, - [FromServices] IReferenceEventService referenceEventService, [FromServices] ISubscriberService subscriberService) { var user = await userService.GetUserByPrincipalAsync(User); @@ -175,12 +169,6 @@ public class AccountsController( await subscriberService.CancelSubscription(user, new OffboardingSurveyResponse { UserId = user.Id, Reason = request.Reason, Feedback = request.Feedback }, user.IsExpired()); - - await referenceEventService.RaiseEventAsync(new ReferenceEvent( - ReferenceEventType.CancelSubscription, - user, - currentContext) - { EndOfPeriod = user.IsExpired() }); } [HttpPost("reinstate-premium")] diff --git a/src/Api/Billing/Controllers/OrganizationsController.cs b/src/Api/Billing/Controllers/OrganizationsController.cs index bd5ab8cef4..c8a3c20c91 100644 --- a/src/Api/Billing/Controllers/OrganizationsController.cs +++ b/src/Api/Billing/Controllers/OrganizationsController.cs @@ -20,9 +20,6 @@ using Bit.Core.OrganizationFeatures.OrganizationSubscriptions.Interface; using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Settings; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Core.Utilities; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -44,7 +41,6 @@ public class OrganizationsController( IUpdateSecretsManagerSubscriptionCommand updateSecretsManagerSubscriptionCommand, IUpgradeOrganizationPlanCommand upgradeOrganizationPlanCommand, IAddSecretsManagerSubscriptionCommand addSecretsManagerSubscriptionCommand, - IReferenceEventService referenceEventService, ISubscriberService subscriberService, IOrganizationInstallationRepository organizationInstallationRepository, IPricingClient pricingClient) @@ -246,14 +242,6 @@ public class OrganizationsController( Feedback = request.Feedback }, organization.IsExpired()); - - await referenceEventService.RaiseEventAsync(new ReferenceEvent( - ReferenceEventType.CancelSubscription, - organization, - currentContext) - { - EndOfPeriod = organization.IsExpired() - }); } [HttpPost("{id:guid}/reinstate")] diff --git a/src/Api/SecretsManager/Controllers/SecretsController.cs b/src/Api/SecretsManager/Controllers/SecretsController.cs index 9997e7502c..dd653bb873 100644 --- a/src/Api/SecretsManager/Controllers/SecretsController.cs +++ b/src/Api/SecretsManager/Controllers/SecretsController.cs @@ -5,7 +5,6 @@ using Bit.Core.Context; using Bit.Core.Enums; using Bit.Core.Exceptions; using Bit.Core.Identity; -using Bit.Core.Repositories; using Bit.Core.SecretsManager.AuthorizationRequirements; using Bit.Core.SecretsManager.Commands.Secrets.Interfaces; using Bit.Core.SecretsManager.Entities; @@ -16,9 +15,6 @@ using Bit.Core.SecretsManager.Queries.Interfaces; using Bit.Core.SecretsManager.Queries.Secrets.Interfaces; using Bit.Core.SecretsManager.Repositories; using Bit.Core.Services; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -30,7 +26,6 @@ public class SecretsController : Controller private readonly ICurrentContext _currentContext; private readonly IProjectRepository _projectRepository; private readonly ISecretRepository _secretRepository; - private readonly IOrganizationRepository _organizationRepository; private readonly ICreateSecretCommand _createSecretCommand; private readonly IUpdateSecretCommand _updateSecretCommand; private readonly IDeleteSecretCommand _deleteSecretCommand; @@ -39,14 +34,12 @@ public class SecretsController : Controller private readonly ISecretAccessPoliciesUpdatesQuery _secretAccessPoliciesUpdatesQuery; private readonly IUserService _userService; private readonly IEventService _eventService; - private readonly IReferenceEventService _referenceEventService; private readonly IAuthorizationService _authorizationService; public SecretsController( ICurrentContext currentContext, IProjectRepository projectRepository, ISecretRepository secretRepository, - IOrganizationRepository organizationRepository, ICreateSecretCommand createSecretCommand, IUpdateSecretCommand updateSecretCommand, IDeleteSecretCommand deleteSecretCommand, @@ -55,13 +48,11 @@ public class SecretsController : Controller ISecretAccessPoliciesUpdatesQuery secretAccessPoliciesUpdatesQuery, IUserService userService, IEventService eventService, - IReferenceEventService referenceEventService, IAuthorizationService authorizationService) { _currentContext = currentContext; _projectRepository = projectRepository; _secretRepository = secretRepository; - _organizationRepository = organizationRepository; _createSecretCommand = createSecretCommand; _updateSecretCommand = updateSecretCommand; _deleteSecretCommand = deleteSecretCommand; @@ -70,7 +61,6 @@ public class SecretsController : Controller _secretAccessPoliciesUpdatesQuery = secretAccessPoliciesUpdatesQuery; _userService = userService; _eventService = eventService; - _referenceEventService = referenceEventService; _authorizationService = authorizationService; } @@ -148,9 +138,6 @@ public class SecretsController : Controller if (_currentContext.IdentityClientType == IdentityClientType.ServiceAccount) { await _eventService.LogServiceAccountSecretEventAsync(userId, secret, EventType.Secret_Retrieved); - - var org = await _organizationRepository.GetByIdAsync(secret.OrganizationId); - await _referenceEventService.RaiseEventAsync(new ReferenceEvent(ReferenceEventType.SmServiceAccountAccessedSecret, org, _currentContext)); } return new SecretResponseModel(secret, access.Read, access.Write); @@ -266,7 +253,7 @@ public class SecretsController : Controller throw new NotFoundException(); } - await LogSecretsRetrievalAsync(secrets.First().OrganizationId, secrets); + await LogSecretsRetrievalAsync(secrets); var responses = secrets.Select(s => new BaseSecretResponseModel(s)); return new ListResponseModel(responses); @@ -303,21 +290,18 @@ public class SecretsController : Controller if (syncResult.HasChanges) { - await LogSecretsRetrievalAsync(organizationId, syncResult.Secrets); + await LogSecretsRetrievalAsync(syncResult.Secrets); } return new SecretsSyncResponseModel(syncResult.HasChanges, syncResult.Secrets); } - private async Task LogSecretsRetrievalAsync(Guid organizationId, IEnumerable secrets) + private async Task LogSecretsRetrievalAsync(IEnumerable secrets) { if (_currentContext.IdentityClientType == IdentityClientType.ServiceAccount) { var userId = _userService.GetProperUserId(User)!.Value; - var org = await _organizationRepository.GetByIdAsync(organizationId); await _eventService.LogServiceAccountSecretsEventAsync(userId, secrets, EventType.Secret_Retrieved); - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.SmServiceAccountAccessedSecret, org, _currentContext)); } } } diff --git a/src/Api/Tools/Controllers/SendsController.cs b/src/Api/Tools/Controllers/SendsController.cs index b18e603c0f..a51ec942cf 100644 --- a/src/Api/Tools/Controllers/SendsController.cs +++ b/src/Api/Tools/Controllers/SendsController.cs @@ -5,7 +5,6 @@ using Bit.Api.Tools.Models.Request; using Bit.Api.Tools.Models.Response; using Bit.Api.Utilities; using Bit.Core; -using Bit.Core.Context; using Bit.Core.Exceptions; using Bit.Core.Services; using Bit.Core.Settings; @@ -33,7 +32,6 @@ public class SendsController : Controller private readonly INonAnonymousSendCommand _nonAnonymousSendCommand; private readonly ILogger _logger; private readonly GlobalSettings _globalSettings; - private readonly ICurrentContext _currentContext; public SendsController( ISendRepository sendRepository, @@ -43,8 +41,7 @@ public class SendsController : Controller INonAnonymousSendCommand nonAnonymousSendCommand, ISendFileStorageService sendFileStorageService, ILogger logger, - GlobalSettings globalSettings, - ICurrentContext currentContext) + GlobalSettings globalSettings) { _sendRepository = sendRepository; _userService = userService; @@ -54,7 +51,6 @@ public class SendsController : Controller _sendFileStorageService = sendFileStorageService; _logger = logger; _globalSettings = globalSettings; - _currentContext = currentContext; } #region Anonymous endpoints diff --git a/src/Billing/Services/Implementations/CustomerUpdatedHandler.cs b/src/Billing/Services/Implementations/CustomerUpdatedHandler.cs index 6deb0bc330..fe7745f760 100644 --- a/src/Billing/Services/Implementations/CustomerUpdatedHandler.cs +++ b/src/Billing/Services/Implementations/CustomerUpdatedHandler.cs @@ -1,8 +1,4 @@ -using Bit.Core.Context; -using Bit.Core.Repositories; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; +using Bit.Core.Repositories; using Event = Stripe.Event; namespace Bit.Billing.Services.Implementations; @@ -10,23 +6,17 @@ namespace Bit.Billing.Services.Implementations; public class CustomerUpdatedHandler : ICustomerUpdatedHandler { private readonly IOrganizationRepository _organizationRepository; - private readonly IReferenceEventService _referenceEventService; - private readonly ICurrentContext _currentContext; private readonly IStripeEventService _stripeEventService; private readonly IStripeEventUtilityService _stripeEventUtilityService; private readonly ILogger _logger; public CustomerUpdatedHandler( IOrganizationRepository organizationRepository, - IReferenceEventService referenceEventService, - ICurrentContext currentContext, IStripeEventService stripeEventService, IStripeEventUtilityService stripeEventUtilityService, ILogger logger) { _organizationRepository = organizationRepository ?? throw new ArgumentNullException(nameof(organizationRepository)); - _referenceEventService = referenceEventService; - _currentContext = currentContext; _stripeEventService = stripeEventService; _stripeEventUtilityService = stripeEventUtilityService; _logger = logger; @@ -95,20 +85,5 @@ public class CustomerUpdatedHandler : ICustomerUpdatedHandler organization.BillingEmail = customer.Email; await _organizationRepository.ReplaceAsync(organization); - - if (_referenceEventService == null) - { - _logger.LogError("ReferenceEventService was not initialized in CustomerUpdatedHandler"); - throw new InvalidOperationException($"{nameof(_referenceEventService)} is not initialized"); - } - - if (_currentContext == null) - { - _logger.LogError("CurrentContext was not initialized in CustomerUpdatedHandler"); - throw new InvalidOperationException($"{nameof(_currentContext)} is not initialized"); - } - - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.OrganizationEditedInStripe, organization, _currentContext)); } } diff --git a/src/Billing/Services/Implementations/PaymentSucceededHandler.cs b/src/Billing/Services/Implementations/PaymentSucceededHandler.cs index 40d8c8349d..4c256e3d85 100644 --- a/src/Billing/Services/Implementations/PaymentSucceededHandler.cs +++ b/src/Billing/Services/Implementations/PaymentSucceededHandler.cs @@ -3,13 +3,9 @@ using Bit.Core.AdminConsole.OrganizationFeatures.Organizations.Interfaces; using Bit.Core.AdminConsole.Repositories; using Bit.Core.Billing.Enums; using Bit.Core.Billing.Pricing; -using Bit.Core.Context; using Bit.Core.Platform.Push; using Bit.Core.Repositories; using Bit.Core.Services; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Event = Stripe.Event; namespace Bit.Billing.Services.Implementations; @@ -22,9 +18,6 @@ public class PaymentSucceededHandler : IPaymentSucceededHandler private readonly IStripeFacade _stripeFacade; private readonly IProviderRepository _providerRepository; private readonly IOrganizationRepository _organizationRepository; - private readonly IReferenceEventService _referenceEventService; - private readonly ICurrentContext _currentContext; - private readonly IUserRepository _userRepository; private readonly IStripeEventUtilityService _stripeEventUtilityService; private readonly IPushNotificationService _pushNotificationService; private readonly IOrganizationEnableCommand _organizationEnableCommand; @@ -36,9 +29,6 @@ public class PaymentSucceededHandler : IPaymentSucceededHandler IStripeFacade stripeFacade, IProviderRepository providerRepository, IOrganizationRepository organizationRepository, - IReferenceEventService referenceEventService, - ICurrentContext currentContext, - IUserRepository userRepository, IStripeEventUtilityService stripeEventUtilityService, IUserService userService, IPushNotificationService pushNotificationService, @@ -50,9 +40,6 @@ public class PaymentSucceededHandler : IPaymentSucceededHandler _stripeFacade = stripeFacade; _providerRepository = providerRepository; _organizationRepository = organizationRepository; - _referenceEventService = referenceEventService; - _currentContext = currentContext; - _userRepository = userRepository; _stripeEventUtilityService = stripeEventUtilityService; _userService = userService; _pushNotificationService = pushNotificationService; @@ -116,27 +103,7 @@ public class PaymentSucceededHandler : IPaymentSucceededHandler _logger.LogError("invoice.payment_succeeded webhook ({EventID}) for Provider ({ProviderID}) indicates missing subscription line items", parsedEvent.Id, provider.Id); - - return; } - - await _referenceEventService.RaiseEventAsync(new ReferenceEvent - { - Type = ReferenceEventType.Rebilled, - Source = ReferenceEventSource.Provider, - Id = provider.Id, - PlanType = PlanType.TeamsMonthly, - Seats = (int)teamsMonthlyLineItem.Quantity - }); - - await _referenceEventService.RaiseEventAsync(new ReferenceEvent - { - Type = ReferenceEventType.Rebilled, - Source = ReferenceEventSource.Provider, - Id = provider.Id, - PlanType = PlanType.EnterpriseMonthly, - Seats = (int)enterpriseMonthlyLineItem.Quantity - }); } else if (organizationId.HasValue) { @@ -156,15 +123,6 @@ public class PaymentSucceededHandler : IPaymentSucceededHandler await _organizationEnableCommand.EnableAsync(organizationId.Value, subscription.CurrentPeriodEnd); await _pushNotificationService.PushSyncOrganizationStatusAsync(organization); - - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.Rebilled, organization, _currentContext) - { - PlanName = organization?.Plan, - PlanType = organization?.PlanType, - Seats = organization?.Seats, - Storage = organization?.MaxStorageGb, - }); } else if (userId.HasValue) { @@ -174,14 +132,6 @@ public class PaymentSucceededHandler : IPaymentSucceededHandler } await _userService.EnablePremiumAsync(userId.Value, subscription.CurrentPeriodEnd); - - var user = await _userRepository.GetByIdAsync(userId.Value); - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.Rebilled, user, _currentContext) - { - PlanName = IStripeEventUtilityService.PremiumPlanId, - Storage = user?.MaxStorageGb, - }); } } } diff --git a/src/Core/AdminConsole/Entities/Organization.cs b/src/Core/AdminConsole/Entities/Organization.cs index e649406bb0..ee01414eb4 100644 --- a/src/Core/AdminConsole/Entities/Organization.cs +++ b/src/Core/AdminConsole/Entities/Organization.cs @@ -8,14 +8,13 @@ using Bit.Core.Entities; using Bit.Core.Enums; using Bit.Core.Models.Business; using Bit.Core.Services; -using Bit.Core.Tools.Entities; using Bit.Core.Utilities; #nullable enable namespace Bit.Core.AdminConsole.Entities; -public class Organization : ITableObject, IStorableSubscriber, IRevisable, IReferenceable +public class Organization : ITableObject, IStorableSubscriber, IRevisable { private Dictionary? _twoFactorProviders; diff --git a/src/Core/AdminConsole/OrganizationFeatures/Groups/CreateGroupCommand.cs b/src/Core/AdminConsole/OrganizationFeatures/Groups/CreateGroupCommand.cs index 11bf6d7f66..f514beed38 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/Groups/CreateGroupCommand.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/Groups/CreateGroupCommand.cs @@ -1,15 +1,11 @@ using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.OrganizationFeatures.Groups.Interfaces; using Bit.Core.AdminConsole.Repositories; -using Bit.Core.Context; using Bit.Core.Enums; using Bit.Core.Exceptions; using Bit.Core.Models.Data; using Bit.Core.Repositories; using Bit.Core.Services; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; namespace Bit.Core.AdminConsole.OrganizationFeatures.Groups; @@ -18,21 +14,16 @@ public class CreateGroupCommand : ICreateGroupCommand private readonly IEventService _eventService; private readonly IGroupRepository _groupRepository; private readonly IOrganizationUserRepository _organizationUserRepository; - private readonly IReferenceEventService _referenceEventService; - private readonly ICurrentContext _currentContext; public CreateGroupCommand( IEventService eventService, IGroupRepository groupRepository, - IOrganizationUserRepository organizationUserRepository, - IReferenceEventService referenceEventService, - ICurrentContext currentContext) + IOrganizationUserRepository organizationUserRepository + ) { _eventService = eventService; _groupRepository = groupRepository; _organizationUserRepository = organizationUserRepository; - _referenceEventService = referenceEventService; - _currentContext = currentContext; } public async Task CreateGroupAsync(Group group, Organization organization, @@ -77,8 +68,6 @@ public class CreateGroupCommand : ICreateGroupCommand { await _groupRepository.CreateAsync(group, collections); } - - await _referenceEventService.RaiseEventAsync(new ReferenceEvent(ReferenceEventType.GroupCreated, organization, _currentContext)); } private async Task GroupRepositoryUpdateUsersAsync(Group group, IEnumerable userIds, diff --git a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/DeleteClaimedOrganizationUserAccountCommand.cs b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/DeleteClaimedOrganizationUserAccountCommand.cs index 49ddf0a548..60a1c8bfbf 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/DeleteClaimedOrganizationUserAccountCommand.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/DeleteClaimedOrganizationUserAccountCommand.cs @@ -7,9 +7,6 @@ using Bit.Core.Exceptions; using Bit.Core.Platform.Push; using Bit.Core.Repositories; using Bit.Core.Services; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; #nullable enable @@ -24,7 +21,6 @@ public class DeleteClaimedOrganizationUserAccountCommand : IDeleteClaimedOrganiz private readonly IUserRepository _userRepository; private readonly ICurrentContext _currentContext; private readonly IHasConfirmedOwnersExceptQuery _hasConfirmedOwnersExceptQuery; - private readonly IReferenceEventService _referenceEventService; private readonly IPushNotificationService _pushService; private readonly IOrganizationRepository _organizationRepository; private readonly IProviderUserRepository _providerUserRepository; @@ -36,7 +32,6 @@ public class DeleteClaimedOrganizationUserAccountCommand : IDeleteClaimedOrganiz IUserRepository userRepository, ICurrentContext currentContext, IHasConfirmedOwnersExceptQuery hasConfirmedOwnersExceptQuery, - IReferenceEventService referenceEventService, IPushNotificationService pushService, IOrganizationRepository organizationRepository, IProviderUserRepository providerUserRepository) @@ -48,7 +43,6 @@ public class DeleteClaimedOrganizationUserAccountCommand : IDeleteClaimedOrganiz _userRepository = userRepository; _currentContext = currentContext; _hasConfirmedOwnersExceptQuery = hasConfirmedOwnersExceptQuery; - _referenceEventService = referenceEventService; _pushService = pushService; _organizationRepository = organizationRepository; _providerUserRepository = providerUserRepository; @@ -195,8 +189,6 @@ public class DeleteClaimedOrganizationUserAccountCommand : IDeleteClaimedOrganiz await _userRepository.DeleteManyAsync(users); foreach (var user in users) { - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.DeleteAccount, user, _currentContext)); await _pushService.PushLogOutAsync(user.Id); } diff --git a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/InviteOrganizationUsersCommand.cs b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/InviteOrganizationUsersCommand.cs index 072bc5fc05..db5d011e1d 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/InviteOrganizationUsersCommand.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/InviteOrganizationUsersCommand.cs @@ -9,15 +9,11 @@ using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Utilities.Commands; using Bit.Core.AdminConsole.Utilities.Errors; using Bit.Core.AdminConsole.Utilities.Validation; -using Bit.Core.Context; using Bit.Core.Enums; using Bit.Core.Models.Business; using Bit.Core.OrganizationFeatures.OrganizationSubscriptions.Interface; using Bit.Core.Repositories; using Bit.Core.Services; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Microsoft.Extensions.Logging; using OrganizationUserInvite = Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers.Models.OrganizationUserInvite; @@ -28,8 +24,6 @@ public class InviteOrganizationUsersCommand(IEventService eventService, IInviteUsersValidator inviteUsersValidator, IPaymentService paymentService, IOrganizationRepository organizationRepository, - IReferenceEventService referenceEventService, - ICurrentContext currentContext, IApplicationCacheService applicationCacheService, IMailService mailService, ILogger logger, @@ -121,8 +115,6 @@ public class InviteOrganizationUsersCommand(IEventService eventService, await SendAdditionalEmailsAsync(validatedRequest, organization); await SendInvitesAsync(organizationUserToInviteEntities, organization); - - await PublishReferenceEventAsync(validatedRequest, organization); } catch (Exception ex) { @@ -190,14 +182,6 @@ public class InviteOrganizationUsersCommand(IEventService eventService, } } - private async Task PublishReferenceEventAsync(Valid validatedResult, - Organization organization) => - await referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.InvitedUsers, organization, currentContext) - { - Users = validatedResult.Value.Invites.Length - }); - private async Task SendInvitesAsync(IEnumerable users, Organization organization) => await sendOrganizationInvitesCommand.SendInvitesAsync( new SendInvitesRequest( @@ -284,15 +268,6 @@ public class InviteOrganizationUsersCommand(IEventService eventService, await organizationRepository.ReplaceAsync(organization); // could optimize this with only a property update await applicationCacheService.UpsertOrganizationAbilityAsync(organization); - - await referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.AdjustSeats, organization, currentContext) - { - PlanName = validatedResult.Value.InviteOrganization.Plan.Name, - PlanType = validatedResult.Value.InviteOrganization.Plan.Type, - Seats = validatedResult.Value.PasswordManagerSubscriptionUpdate.UpdatedSeatTotal, - PreviousSeats = validatedResult.Value.PasswordManagerSubscriptionUpdate.Seats - }); } } } diff --git a/src/Core/AdminConsole/OrganizationFeatures/Organizations/CloudOrganizationSignUpCommand.cs b/src/Core/AdminConsole/OrganizationFeatures/Organizations/CloudOrganizationSignUpCommand.cs index 7449628ed0..f26061cbd2 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/Organizations/CloudOrganizationSignUpCommand.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/Organizations/CloudOrganizationSignUpCommand.cs @@ -5,7 +5,6 @@ using Bit.Core.Billing.Enums; using Bit.Core.Billing.Models.Sales; using Bit.Core.Billing.Pricing; using Bit.Core.Billing.Services; -using Bit.Core.Context; using Bit.Core.Entities; using Bit.Core.Enums; using Bit.Core.Exceptions; @@ -15,9 +14,6 @@ using Bit.Core.Models.StaticStore; using Bit.Core.Platform.Push; using Bit.Core.Repositories; using Bit.Core.Services; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Core.Utilities; namespace Bit.Core.AdminConsole.OrganizationFeatures.Organizations; @@ -36,8 +32,6 @@ public class CloudOrganizationSignUpCommand( IOrganizationBillingService organizationBillingService, IPaymentService paymentService, IPolicyService policyService, - IReferenceEventService referenceEventService, - ICurrentContext currentContext, IOrganizationRepository organizationRepository, IOrganizationApiKeyRepository organizationApiKeyRepository, IApplicationCacheService applicationCacheService, @@ -132,17 +126,6 @@ public class CloudOrganizationSignUpCommand( var ownerId = signup.IsFromProvider ? default : signup.Owner.Id; var returnValue = await SignUpAsync(organization, ownerId, signup.OwnerKey, signup.CollectionName, true); - await referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.Signup, organization, currentContext) - { - PlanName = plan.Name, - PlanType = plan.Type, - Seats = returnValue.Item1.Seats, - SignupInitiationPath = signup.InitiationPath, - Storage = returnValue.Item1.MaxStorageGb, - // TODO: add reference events for SmSeats and Service Accounts - see AC-1481 - }); - return new SignUpOrganizationResponse(returnValue.organization, returnValue.organizationUser); } diff --git a/src/Core/AdminConsole/OrganizationFeatures/Organizations/OrganizationDeleteCommand.cs b/src/Core/AdminConsole/OrganizationFeatures/Organizations/OrganizationDeleteCommand.cs index 185d5c5ac0..6a81130402 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/Organizations/OrganizationDeleteCommand.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/Organizations/OrganizationDeleteCommand.cs @@ -2,38 +2,28 @@ using Bit.Core.AdminConsole.OrganizationFeatures.Organizations.Interfaces; using Bit.Core.Auth.Enums; using Bit.Core.Auth.Repositories; -using Bit.Core.Context; using Bit.Core.Exceptions; using Bit.Core.Repositories; using Bit.Core.Services; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; namespace Bit.Core.AdminConsole.OrganizationFeatures.Organizations; public class OrganizationDeleteCommand : IOrganizationDeleteCommand { private readonly IApplicationCacheService _applicationCacheService; - private readonly ICurrentContext _currentContext; private readonly IOrganizationRepository _organizationRepository; private readonly IPaymentService _paymentService; - private readonly IReferenceEventService _referenceEventService; private readonly ISsoConfigRepository _ssoConfigRepository; public OrganizationDeleteCommand( IApplicationCacheService applicationCacheService, - ICurrentContext currentContext, IOrganizationRepository organizationRepository, IPaymentService paymentService, - IReferenceEventService referenceEventService, ISsoConfigRepository ssoConfigRepository) { _applicationCacheService = applicationCacheService; - _currentContext = currentContext; _organizationRepository = organizationRepository; _paymentService = paymentService; - _referenceEventService = referenceEventService; _ssoConfigRepository = ssoConfigRepository; } @@ -48,8 +38,6 @@ public class OrganizationDeleteCommand : IOrganizationDeleteCommand var eop = !organization.ExpirationDate.HasValue || organization.ExpirationDate.Value >= DateTime.UtcNow; await _paymentService.CancelSubscriptionAsync(organization, eop); - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.DeleteAccount, organization, _currentContext)); } catch (GatewayException) { } } diff --git a/src/Core/AdminConsole/OrganizationFeatures/Organizations/ProviderClientOrganizationSignUpCommand.cs b/src/Core/AdminConsole/OrganizationFeatures/Organizations/ProviderClientOrganizationSignUpCommand.cs index b8802ffd0c..c3e945b65f 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/Organizations/ProviderClientOrganizationSignUpCommand.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/Organizations/ProviderClientOrganizationSignUpCommand.cs @@ -8,9 +8,6 @@ using Bit.Core.Models.Business; using Bit.Core.Models.StaticStore; using Bit.Core.Repositories; using Bit.Core.Services; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Core.Utilities; namespace Bit.Core.AdminConsole.OrganizationFeatures.Organizations; @@ -37,7 +34,6 @@ public class ProviderClientOrganizationSignUpCommand : IProviderClientOrganizati private readonly ICurrentContext _currentContext; private readonly IPricingClient _pricingClient; - private readonly IReferenceEventService _referenceEventService; private readonly IOrganizationRepository _organizationRepository; private readonly IOrganizationApiKeyRepository _organizationApiKeyRepository; private readonly IApplicationCacheService _applicationCacheService; @@ -46,7 +42,6 @@ public class ProviderClientOrganizationSignUpCommand : IProviderClientOrganizati public ProviderClientOrganizationSignUpCommand( ICurrentContext currentContext, IPricingClient pricingClient, - IReferenceEventService referenceEventService, IOrganizationRepository organizationRepository, IOrganizationApiKeyRepository organizationApiKeyRepository, IApplicationCacheService applicationCacheService, @@ -54,7 +49,6 @@ public class ProviderClientOrganizationSignUpCommand : IProviderClientOrganizati { _currentContext = currentContext; _pricingClient = pricingClient; - _referenceEventService = referenceEventService; _organizationRepository = organizationRepository; _organizationApiKeyRepository = organizationApiKeyRepository; _applicationCacheService = applicationCacheService; @@ -108,16 +102,6 @@ public class ProviderClientOrganizationSignUpCommand : IProviderClientOrganizati var returnValue = await SignUpAsync(organization, signup.CollectionName); - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.Signup, organization, _currentContext) - { - PlanName = plan.Name, - PlanType = plan.Type, - Seats = returnValue.Organization.Seats, - SignupInitiationPath = signup.InitiationPath, - Storage = returnValue.Organization.MaxStorageGb, - }); - return returnValue; } diff --git a/src/Core/AdminConsole/Services/Implementations/OrganizationService.cs b/src/Core/AdminConsole/Services/Implementations/OrganizationService.cs index 7640a82fcb..cbf2ae9d73 100644 --- a/src/Core/AdminConsole/Services/Implementations/OrganizationService.cs +++ b/src/Core/AdminConsole/Services/Implementations/OrganizationService.cs @@ -29,9 +29,6 @@ using Bit.Core.OrganizationFeatures.OrganizationSubscriptions.Interface; using Bit.Core.Platform.Push; using Bit.Core.Repositories; using Bit.Core.Settings; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Core.Utilities; using Microsoft.Extensions.Logging; using Stripe; @@ -56,7 +53,6 @@ public class OrganizationService : IOrganizationService private readonly IPolicyRepository _policyRepository; private readonly IPolicyService _policyService; private readonly ISsoUserRepository _ssoUserRepository; - private readonly IReferenceEventService _referenceEventService; private readonly IGlobalSettings _globalSettings; private readonly IOrganizationApiKeyRepository _organizationApiKeyRepository; private readonly ICurrentContext _currentContext; @@ -88,7 +84,6 @@ public class OrganizationService : IOrganizationService IPolicyRepository policyRepository, IPolicyService policyService, ISsoUserRepository ssoUserRepository, - IReferenceEventService referenceEventService, IGlobalSettings globalSettings, IOrganizationApiKeyRepository organizationApiKeyRepository, ICurrentContext currentContext, @@ -120,7 +115,6 @@ public class OrganizationService : IOrganizationService _policyRepository = policyRepository; _policyService = policyService; _ssoUserRepository = ssoUserRepository; - _referenceEventService = referenceEventService; _globalSettings = globalSettings; _organizationApiKeyRepository = organizationApiKeyRepository; _currentContext = currentContext; @@ -153,11 +147,6 @@ public class OrganizationService : IOrganizationService } await _paymentService.CancelSubscriptionAsync(organization, eop); - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.CancelSubscription, organization, _currentContext) - { - EndOfPeriod = endOfPeriod, - }); } public async Task ReinstateSubscriptionAsync(Guid organizationId) @@ -169,8 +158,6 @@ public class OrganizationService : IOrganizationService } await _paymentService.ReinstateSubscriptionAsync(organization); - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.ReinstateSubscription, organization, _currentContext)); } public async Task AdjustStorageAsync(Guid organizationId, short storageAdjustmentGb) @@ -190,13 +177,6 @@ public class OrganizationService : IOrganizationService var secret = await BillingHelpers.AdjustStorageAsync(_paymentService, organization, storageAdjustmentGb, plan.PasswordManager.StripeStoragePlanId); - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.AdjustStorage, organization, _currentContext) - { - PlanName = plan.Name, - PlanType = plan.Type, - Storage = storageAdjustmentGb, - }); await ReplaceAndUpdateCacheAsync(organization); return secret; } @@ -328,14 +308,6 @@ public class OrganizationService : IOrganizationService } var paymentIntentClientSecret = await _paymentService.AdjustSeatsAsync(organization, plan, additionalSeats); - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.AdjustSeats, organization, _currentContext) - { - PlanName = plan.Name, - PlanType = plan.Type, - Seats = newSeatTotal, - PreviousSeats = organization.Seats - }); organization.Seats = (short?)newSeatTotal; await ReplaceAndUpdateCacheAsync(organization); @@ -886,12 +858,6 @@ public class OrganizationService : IOrganizationService } await SendInvitesAsync(allOrgUsers, organization); - - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.InvitedUsers, organization, _currentContext) - { - Users = orgUserInvitedCount - }); } catch (Exception e) { @@ -1317,8 +1283,6 @@ public class OrganizationService : IOrganizationService } await _eventService.LogOrganizationUserEventsAsync(events.Select(e => (e.ou, e.e, eventSystemUser, e.d))); - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.DirectorySynced, organization, _currentContext)); } public async Task DeleteSsoUserAsync(Guid userId, Guid? organizationId) @@ -1754,11 +1718,5 @@ public class OrganizationService : IOrganizationService await SendInviteAsync(ownerOrganizationUser, organization, true); await _eventService.LogOrganizationUserEventAsync(ownerOrganizationUser, EventType.OrganizationUser_Invited); - - await _referenceEventService.RaiseEventAsync(new ReferenceEvent(ReferenceEventType.OrganizationCreatedByAdmin, organization, _currentContext) - { - EventRaisedByUser = userService.GetUserName(user), - SalesAssistedTrialStarted = salesAssistedTrialStarted, - }); } } diff --git a/src/Core/Auth/UserFeatures/Registration/Implementations/RegisterUserCommand.cs b/src/Core/Auth/UserFeatures/Registration/Implementations/RegisterUserCommand.cs index e721649dc9..289bbff7f8 100644 --- a/src/Core/Auth/UserFeatures/Registration/Implementations/RegisterUserCommand.cs +++ b/src/Core/Auth/UserFeatures/Registration/Implementations/RegisterUserCommand.cs @@ -3,7 +3,6 @@ using Bit.Core.AdminConsole.Repositories; using Bit.Core.Auth.Enums; using Bit.Core.Auth.Models; using Bit.Core.Auth.Models.Business.Tokenables; -using Bit.Core.Context; using Bit.Core.Entities; using Bit.Core.Exceptions; using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces; @@ -11,9 +10,6 @@ using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Settings; using Bit.Core.Tokens; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Core.Utilities; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Identity; @@ -26,15 +22,12 @@ public class RegisterUserCommand : IRegisterUserCommand private readonly IGlobalSettings _globalSettings; private readonly IOrganizationUserRepository _organizationUserRepository; private readonly IPolicyRepository _policyRepository; - private readonly IReferenceEventService _referenceEventService; private readonly IDataProtectorTokenFactory _orgUserInviteTokenDataFactory; private readonly IDataProtectorTokenFactory _registrationEmailVerificationTokenDataFactory; private readonly IDataProtector _organizationServiceDataProtector; private readonly IDataProtector _providerServiceDataProtector; - private readonly ICurrentContext _currentContext; - private readonly IUserService _userService; private readonly IMailService _mailService; @@ -48,11 +41,9 @@ public class RegisterUserCommand : IRegisterUserCommand IGlobalSettings globalSettings, IOrganizationUserRepository organizationUserRepository, IPolicyRepository policyRepository, - IReferenceEventService referenceEventService, IDataProtectionProvider dataProtectionProvider, IDataProtectorTokenFactory orgUserInviteTokenDataFactory, IDataProtectorTokenFactory registrationEmailVerificationTokenDataFactory, - ICurrentContext currentContext, IUserService userService, IMailService mailService, IValidateRedemptionTokenCommand validateRedemptionTokenCommand, @@ -62,14 +53,12 @@ public class RegisterUserCommand : IRegisterUserCommand _globalSettings = globalSettings; _organizationUserRepository = organizationUserRepository; _policyRepository = policyRepository; - _referenceEventService = referenceEventService; _organizationServiceDataProtector = dataProtectionProvider.CreateProtector( "OrganizationServiceDataProtector"); _orgUserInviteTokenDataFactory = orgUserInviteTokenDataFactory; _registrationEmailVerificationTokenDataFactory = registrationEmailVerificationTokenDataFactory; - _currentContext = currentContext; _userService = userService; _mailService = mailService; @@ -86,7 +75,6 @@ public class RegisterUserCommand : IRegisterUserCommand if (result == IdentityResult.Success) { await _mailService.SendWelcomeEmailAsync(user); - await _referenceEventService.RaiseEventAsync(new ReferenceEvent(ReferenceEventType.Signup, user, _currentContext)); } return result; @@ -119,12 +107,6 @@ public class RegisterUserCommand : IRegisterUserCommand sentWelcomeEmail = true; if (!string.IsNullOrEmpty(initiationPath)) { - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.Signup, user, _currentContext) - { - SignupInitiationPath = initiationPath - }); - return result; } } @@ -134,8 +116,6 @@ public class RegisterUserCommand : IRegisterUserCommand { await _mailService.SendWelcomeEmailAsync(user); } - - await _referenceEventService.RaiseEventAsync(new ReferenceEvent(ReferenceEventType.Signup, user, _currentContext)); } return result; @@ -263,10 +243,6 @@ public class RegisterUserCommand : IRegisterUserCommand if (result == IdentityResult.Success) { await _mailService.SendWelcomeEmailAsync(user); - await _referenceEventService.RaiseEventAsync(new ReferenceEvent(ReferenceEventType.Signup, user, _currentContext) - { - ReceiveMarketingEmails = tokenable.ReceiveMarketingEmails - }); } return result; @@ -285,7 +261,6 @@ public class RegisterUserCommand : IRegisterUserCommand if (result == IdentityResult.Success) { await _mailService.SendWelcomeEmailAsync(user); - await _referenceEventService.RaiseEventAsync(new ReferenceEvent(ReferenceEventType.Signup, user, _currentContext)); } return result; @@ -306,7 +281,6 @@ public class RegisterUserCommand : IRegisterUserCommand if (result == IdentityResult.Success) { await _mailService.SendWelcomeEmailAsync(user); - await _referenceEventService.RaiseEventAsync(new ReferenceEvent(ReferenceEventType.Signup, user, _currentContext)); } return result; @@ -325,7 +299,6 @@ public class RegisterUserCommand : IRegisterUserCommand if (result == IdentityResult.Success) { await _mailService.SendWelcomeEmailAsync(user); - await _referenceEventService.RaiseEventAsync(new ReferenceEvent(ReferenceEventType.Signup, user, _currentContext)); } return result; diff --git a/src/Core/Entities/User.cs b/src/Core/Entities/User.cs index 08981ca2d3..f3c54f0301 100644 --- a/src/Core/Entities/User.cs +++ b/src/Core/Entities/User.cs @@ -3,7 +3,6 @@ using System.Text.Json; using Bit.Core.Auth.Enums; using Bit.Core.Auth.Models; using Bit.Core.Enums; -using Bit.Core.Tools.Entities; using Bit.Core.Utilities; using Microsoft.AspNetCore.Identity; @@ -11,7 +10,7 @@ using Microsoft.AspNetCore.Identity; namespace Bit.Core.Entities; -public class User : ITableObject, IStorableSubscriber, IRevisable, ITwoFactorProvidersUser, IReferenceable +public class User : ITableObject, IStorableSubscriber, IRevisable, ITwoFactorProvidersUser { private Dictionary? _twoFactorProviders; diff --git a/src/Core/OrganizationFeatures/OrganizationSubscriptions/UpgradeOrganizationPlanCommand.cs b/src/Core/OrganizationFeatures/OrganizationSubscriptions/UpgradeOrganizationPlanCommand.cs index cb37e478f7..838c1e97b9 100644 --- a/src/Core/OrganizationFeatures/OrganizationSubscriptions/UpgradeOrganizationPlanCommand.cs +++ b/src/Core/OrganizationFeatures/OrganizationSubscriptions/UpgradeOrganizationPlanCommand.cs @@ -8,7 +8,6 @@ using Bit.Core.Billing.Enums; using Bit.Core.Billing.Models.Sales; using Bit.Core.Billing.Pricing; using Bit.Core.Billing.Services; -using Bit.Core.Context; using Bit.Core.Enums; using Bit.Core.Exceptions; using Bit.Core.Models.Business; @@ -16,9 +15,6 @@ using Bit.Core.OrganizationFeatures.OrganizationSubscriptions.Interface; using Bit.Core.Repositories; using Bit.Core.SecretsManager.Repositories; using Bit.Core.Services; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; namespace Bit.Core.OrganizationFeatures.OrganizationSubscriptions; @@ -30,9 +26,7 @@ public class UpgradeOrganizationPlanCommand : IUpgradeOrganizationPlanCommand private readonly IPaymentService _paymentService; private readonly IPolicyRepository _policyRepository; private readonly ISsoConfigRepository _ssoConfigRepository; - private readonly IReferenceEventService _referenceEventService; private readonly IOrganizationConnectionRepository _organizationConnectionRepository; - private readonly ICurrentContext _currentContext; private readonly IServiceAccountRepository _serviceAccountRepository; private readonly IOrganizationRepository _organizationRepository; private readonly IOrganizationService _organizationService; @@ -47,9 +41,7 @@ public class UpgradeOrganizationPlanCommand : IUpgradeOrganizationPlanCommand IPaymentService paymentService, IPolicyRepository policyRepository, ISsoConfigRepository ssoConfigRepository, - IReferenceEventService referenceEventService, IOrganizationConnectionRepository organizationConnectionRepository, - ICurrentContext currentContext, IServiceAccountRepository serviceAccountRepository, IOrganizationRepository organizationRepository, IOrganizationService organizationService, @@ -63,9 +55,7 @@ public class UpgradeOrganizationPlanCommand : IUpgradeOrganizationPlanCommand _paymentService = paymentService; _policyRepository = policyRepository; _ssoConfigRepository = ssoConfigRepository; - _referenceEventService = referenceEventService; _organizationConnectionRepository = organizationConnectionRepository; - _currentContext = currentContext; _serviceAccountRepository = serviceAccountRepository; _organizationRepository = organizationRepository; _organizationService = organizationService; @@ -285,25 +275,6 @@ public class UpgradeOrganizationPlanCommand : IUpgradeOrganizationPlanCommand } await _organizationService.ReplaceAndUpdateCacheAsync(organization); - - if (success) - { - var upgradePath = GetUpgradePath(existingPlan.ProductTier, newPlan.ProductTier); - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.UpgradePlan, organization, _currentContext) - { - PlanName = newPlan.Name, - PlanType = newPlan.Type, - OldPlanName = existingPlan.Name, - OldPlanType = existingPlan.Type, - Seats = organization.Seats, - SignupInitiationPath = "Upgrade in-product", - PlanUpgradePath = upgradePath, - Storage = organization.MaxStorageGb, - // TODO: add reference events for SmSeats and Service Accounts - see AC-1481 - }); - } - return new Tuple(success, paymentIntentClientSecret); } diff --git a/src/Core/Services/Implementations/CollectionService.cs b/src/Core/Services/Implementations/CollectionService.cs index 46853447d6..852f2da073 100644 --- a/src/Core/Services/Implementations/CollectionService.cs +++ b/src/Core/Services/Implementations/CollectionService.cs @@ -1,13 +1,9 @@ #nullable enable -using Bit.Core.Context; using Bit.Core.Entities; using Bit.Core.Exceptions; using Bit.Core.Models.Data; using Bit.Core.Repositories; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; namespace Bit.Core.Services; @@ -17,23 +13,17 @@ public class CollectionService : ICollectionService private readonly IOrganizationRepository _organizationRepository; private readonly IOrganizationUserRepository _organizationUserRepository; private readonly ICollectionRepository _collectionRepository; - private readonly IReferenceEventService _referenceEventService; - private readonly ICurrentContext _currentContext; public CollectionService( IEventService eventService, IOrganizationRepository organizationRepository, IOrganizationUserRepository organizationUserRepository, - ICollectionRepository collectionRepository, - IReferenceEventService referenceEventService, - ICurrentContext currentContext) + ICollectionRepository collectionRepository) { _eventService = eventService; _organizationRepository = organizationRepository; _organizationUserRepository = organizationUserRepository; _collectionRepository = collectionRepository; - _referenceEventService = referenceEventService; - _currentContext = currentContext; } public async Task SaveAsync(Collection collection, IEnumerable? groups = null, @@ -78,7 +68,6 @@ public class CollectionService : ICollectionService await _collectionRepository.CreateAsync(collection, org.UseGroups ? groupsList : null, usersList); await _eventService.LogCollectionEventAsync(collection, Enums.EventType.Collection_Created); - await _referenceEventService.RaiseEventAsync(new ReferenceEvent(ReferenceEventType.CollectionCreated, org, _currentContext)); } else { diff --git a/src/Core/Services/Implementations/UserService.cs b/src/Core/Services/Implementations/UserService.cs index f0c97b8589..5ee29171bf 100644 --- a/src/Core/Services/Implementations/UserService.cs +++ b/src/Core/Services/Implementations/UserService.cs @@ -30,9 +30,6 @@ using Bit.Core.Platform.Push; using Bit.Core.Repositories; using Bit.Core.Settings; using Bit.Core.Tokens; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Core.Utilities; using Bit.Core.Vault.Repositories; using Fido2NetLib; @@ -69,7 +66,6 @@ public class UserService : UserManager, IUserService, IDisposable private readonly IPolicyRepository _policyRepository; private readonly IPolicyService _policyService; private readonly IDataProtector _organizationServiceDataProtector; - private readonly IReferenceEventService _referenceEventService; private readonly IFido2 _fido2; private readonly ICurrentContext _currentContext; private readonly IGlobalSettings _globalSettings; @@ -109,7 +105,6 @@ public class UserService : UserManager, IUserService, IDisposable IPaymentService paymentService, IPolicyRepository policyRepository, IPolicyService policyService, - IReferenceEventService referenceEventService, IFido2 fido2, ICurrentContext currentContext, IGlobalSettings globalSettings, @@ -154,7 +149,6 @@ public class UserService : UserManager, IUserService, IDisposable _policyService = policyService; _organizationServiceDataProtector = dataProtectionProvider.CreateProtector( "OrganizationServiceDataProtector"); - _referenceEventService = referenceEventService; _fido2 = fido2; _currentContext = currentContext; _globalSettings = globalSettings; @@ -299,8 +293,6 @@ public class UserService : UserManager, IUserService, IDisposable } await _userRepository.DeleteAsync(user); - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.DeleteAccount, user, _currentContext)); await _pushService.PushLogOutAsync(user.Id); return IdentityResult.Success; } @@ -1046,12 +1038,6 @@ public class UserService : UserManager, IUserService, IDisposable { await SaveUserAsync(user); await _pushService.PushSyncVaultAsync(user.Id); - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.UpgradePlan, user, _currentContext) - { - Storage = user.MaxStorageGb, - PlanName = PremiumPlanId, - }); } catch when (!_globalSettings.SelfHosted) { @@ -1117,12 +1103,6 @@ public class UserService : UserManager, IUserService, IDisposable var secret = await BillingHelpers.AdjustStorageAsync(_paymentService, user, storageAdjustmentGb, StripeConstants.Prices.StoragePlanPersonal); - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.AdjustStorage, user, _currentContext) - { - Storage = storageAdjustmentGb, - PlanName = StripeConstants.Prices.StoragePlanPersonal, - }); await SaveUserAsync(user); return secret; } @@ -1150,18 +1130,11 @@ public class UserService : UserManager, IUserService, IDisposable eop = false; } await _paymentService.CancelSubscriptionAsync(user, eop); - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.CancelSubscription, user, _currentContext) - { - EndOfPeriod = eop - }); } public async Task ReinstatePremiumAsync(User user) { await _paymentService.ReinstateSubscriptionAsync(user); - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.ReinstateSubscription, user, _currentContext)); } public async Task EnablePremiumAsync(Guid userId, DateTime? expirationDate) @@ -1446,17 +1419,6 @@ public class UserService : UserManager, IUserService, IDisposable await Task.WhenAll(legacyRevokeOrgUserTasks); } - public override async Task ConfirmEmailAsync(User user, string token) - { - var result = await base.ConfirmEmailAsync(user, token); - if (result.Succeeded) - { - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.ConfirmEmailAddress, user, _currentContext)); - } - return result; - } - public async Task RotateApiKeyAsync(User user) { user.ApiKey = CoreHelpers.SecureRandomString(30); diff --git a/src/Core/Tools/Entities/IReferenceable.cs b/src/Core/Tools/Entities/IReferenceable.cs deleted file mode 100644 index 4b38ec6ccc..0000000000 --- a/src/Core/Tools/Entities/IReferenceable.cs +++ /dev/null @@ -1,29 +0,0 @@ -#nullable enable -using Bit.Core.Tools.Models.Business; - -namespace Bit.Core.Tools.Entities; - -/// -/// An entity that can be referenced by a . -/// -public interface IReferenceable -{ - /// - /// Identifies the entity that generated the event. - /// - Guid Id { get; set; } - - /// - /// Contextual information included in the event. - /// - /// - /// Do not store secrets in this field. - /// - string? ReferenceData { get; set; } - - /// - /// Returns when the entity is a user. - /// Otherwise returns . - /// - bool IsUser(); -} diff --git a/src/Core/Tools/Enums/ReferenceEventSource.cs b/src/Core/Tools/Enums/ReferenceEventSource.cs deleted file mode 100644 index 87a71cf450..0000000000 --- a/src/Core/Tools/Enums/ReferenceEventSource.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Runtime.Serialization; - -namespace Bit.Core.Tools.Enums; - -public enum ReferenceEventSource -{ - [EnumMember(Value = "organization")] - Organization, - [EnumMember(Value = "user")] - User, - [EnumMember(Value = "provider")] - Provider, - [EnumMember(Value = "registration")] - Registration, -} diff --git a/src/Core/Tools/Enums/ReferenceEventType.cs b/src/Core/Tools/Enums/ReferenceEventType.cs deleted file mode 100644 index a1446b9fc4..0000000000 --- a/src/Core/Tools/Enums/ReferenceEventType.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System.Runtime.Serialization; - -namespace Bit.Core.Tools.Enums; - -public enum ReferenceEventType -{ - [EnumMember(Value = "signup-email-submit")] - SignupEmailSubmit, - [EnumMember(Value = "signup-email-clicked")] - SignupEmailClicked, - [EnumMember(Value = "signup")] - Signup, - [EnumMember(Value = "upgrade-plan")] - UpgradePlan, - [EnumMember(Value = "adjust-storage")] - AdjustStorage, - [EnumMember(Value = "adjust-seats")] - AdjustSeats, - [EnumMember(Value = "cancel-subscription")] - CancelSubscription, - [EnumMember(Value = "reinstate-subscription")] - ReinstateSubscription, - [EnumMember(Value = "delete-account")] - DeleteAccount, - [EnumMember(Value = "confirm-email")] - ConfirmEmailAddress, - [EnumMember(Value = "invited-users")] - InvitedUsers, - [EnumMember(Value = "rebilled")] - Rebilled, - [EnumMember(Value = "send-created")] - SendCreated, - [EnumMember(Value = "send-accessed")] - SendAccessed, - [EnumMember(Value = "directory-synced")] - DirectorySynced, - [EnumMember(Value = "vault-imported")] - VaultImported, - [EnumMember(Value = "cipher-created")] - CipherCreated, - [EnumMember(Value = "group-created")] - GroupCreated, - [EnumMember(Value = "collection-created")] - CollectionCreated, - [EnumMember(Value = "organization-edited-by-admin")] - OrganizationEditedByAdmin, - [EnumMember(Value = "organization-created-by-admin")] - OrganizationCreatedByAdmin, - [EnumMember(Value = "organization-edited-in-stripe")] - OrganizationEditedInStripe, - [EnumMember(Value = "sm-service-account-accessed-secret")] - SmServiceAccountAccessedSecret, -} diff --git a/src/Core/Tools/ImportFeatures/ImportCiphersCommand.cs b/src/Core/Tools/ImportFeatures/ImportCiphersCommand.cs index fd7a82172c..f67a2550d2 100644 --- a/src/Core/Tools/ImportFeatures/ImportCiphersCommand.cs +++ b/src/Core/Tools/ImportFeatures/ImportCiphersCommand.cs @@ -2,16 +2,12 @@ using Bit.Core.AdminConsole.OrganizationFeatures.Policies; using Bit.Core.AdminConsole.OrganizationFeatures.Policies.PolicyRequirements; using Bit.Core.AdminConsole.Services; -using Bit.Core.Context; using Bit.Core.Entities; using Bit.Core.Exceptions; using Bit.Core.Platform.Push; using Bit.Core.Repositories; using Bit.Core.Services; -using Bit.Core.Tools.Enums; using Bit.Core.Tools.ImportFeatures.Interfaces; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Core.Vault.Entities; using Bit.Core.Vault.Models.Data; using Bit.Core.Vault.Repositories; @@ -27,8 +23,6 @@ public class ImportCiphersCommand : IImportCiphersCommand private readonly IOrganizationRepository _organizationRepository; private readonly IOrganizationUserRepository _organizationUserRepository; private readonly ICollectionRepository _collectionRepository; - private readonly IReferenceEventService _referenceEventService; - private readonly ICurrentContext _currentContext; private readonly IPolicyRequirementQuery _policyRequirementQuery; private readonly IFeatureService _featureService; @@ -40,8 +34,6 @@ public class ImportCiphersCommand : IImportCiphersCommand IOrganizationUserRepository organizationUserRepository, IPushNotificationService pushService, IPolicyService policyService, - IReferenceEventService referenceEventService, - ICurrentContext currentContext, IPolicyRequirementQuery policyRequirementQuery, IFeatureService featureService) { @@ -52,8 +44,6 @@ public class ImportCiphersCommand : IImportCiphersCommand _collectionRepository = collectionRepository; _pushService = pushService; _policyService = policyService; - _referenceEventService = referenceEventService; - _currentContext = currentContext; _policyRequirementQuery = policyRequirementQuery; _featureService = featureService; } @@ -194,12 +184,5 @@ public class ImportCiphersCommand : IImportCiphersCommand // push await _pushService.PushSyncVaultAsync(importingUserId); - - - if (org != null) - { - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.VaultImported, org, _currentContext)); - } } } diff --git a/src/Core/Tools/Models/Business/ReferenceEvent.cs b/src/Core/Tools/Models/Business/ReferenceEvent.cs deleted file mode 100644 index a93817ca44..0000000000 --- a/src/Core/Tools/Models/Business/ReferenceEvent.cs +++ /dev/null @@ -1,274 +0,0 @@ -#nullable enable - -using System.Text.Json.Serialization; -using Bit.Core.Billing.Enums; -using Bit.Core.Context; -using Bit.Core.Tools.Entities; -using Bit.Core.Tools.Enums; - -namespace Bit.Core.Tools.Models.Business; - -/// -/// Product support monitoring. -/// -/// -/// Do not store secrets in this type. -/// -public class ReferenceEvent -{ - /// - /// Instantiates a . - /// - public ReferenceEvent() { } - - /// - /// Monitored event type. - /// Entity that created the event. - /// The conditions in which the event occurred. - public ReferenceEvent(ReferenceEventType type, IReferenceable source, ICurrentContext currentContext) - { - Type = type; - if (source != null) - { - Source = source.IsUser() ? ReferenceEventSource.User : ReferenceEventSource.Organization; - Id = source.Id; - ReferenceData = source.ReferenceData; - } - if (currentContext != null) - { - ClientId = currentContext.ClientId; - ClientVersion = currentContext.ClientVersion; - } - } - - /// - /// Monitored event type. - /// - [JsonConverter(typeof(JsonStringEnumConverter))] - public ReferenceEventType Type { get; set; } - - /// - /// The kind of entity that created the event. - /// - [JsonConverter(typeof(JsonStringEnumConverter))] - public ReferenceEventSource Source { get; set; } - - /// - public Guid Id { get; set; } - - /// - public string? ReferenceData { get; set; } - - /// - /// Moment the event occurred. - /// - public DateTime EventDate { get; set; } = DateTime.UtcNow; - - /// - /// Number of users sent invitations by an organization. - /// - /// - /// Should contain a value only on events. - /// Otherwise the value should be . - /// - public int? Users { get; set; } - - /// - /// Whether or not a subscription was canceled immediately or at the end of the billing period. - /// - /// - /// when a cancellation occurs immediately. - /// when a cancellation occurs at the end of a customer's billing period. - /// Should contain a value only on events. - /// Otherwise the value should be . - /// - public bool? EndOfPeriod { get; set; } - - /// - /// Branded name of the subscription. - /// - /// - /// Should contain a value only for subscription management events. - /// Otherwise the value should be . - /// - public string? PlanName { get; set; } - - /// - /// Identifies a subscription. - /// - /// - /// Should contain a value only for subscription management events. - /// Otherwise the value should be . - /// - public PlanType? PlanType { get; set; } - - /// - /// The branded name of the prior plan. - /// - /// - /// Should contain a value only on events - /// initiated by organizations. - /// Otherwise the value should be . - /// - public string? OldPlanName { get; set; } - - /// - /// Identifies the prior plan - /// - /// - /// Should contain a value only on events - /// initiated by organizations. - /// Otherwise the value should be . - /// - public PlanType? OldPlanType { get; set; } - - /// - /// Seat count when a billable action occurs. When adjusting seats, contains - /// the new seat count. - /// - /// - /// Should contain a value only on , - /// , , - /// and events initiated by organizations. - /// Otherwise the value should be . - /// - public int? Seats { get; set; } - - /// - /// Seat count when a seat adjustment occurs. - /// - /// - /// Should contain a value only on - /// events initiated by organizations. - /// Otherwise the value should be . - /// - public int? PreviousSeats { get; set; } - - /// - /// Qty in GB of storage. When adjusting storage, contains the adjusted - /// storage qty. Otherwise contains the total storage quantity. - /// - /// - /// Should contain a value only on , - /// , , - /// and events. - /// Otherwise the value should be . - /// - public short? Storage { get; set; } - - /// - /// The type of send created or accessed. - /// - /// - /// Should contain a value only on - /// and events. - /// Otherwise the value should be . - /// - [JsonConverter(typeof(JsonStringEnumConverter))] - public SendType? SendType { get; set; } - - /// - /// Whether the send has private notes. - /// - /// - /// when the send has private notes, otherwise . - /// Should contain a value only on - /// and events. - /// Otherwise the value should be . - /// - public bool? SendHasNotes { get; set; } - - /// - /// The send expires after its access count exceeds this value. - /// - /// - /// This field only contains a value when the send has a max access count - /// and is - /// or events. - /// Otherwise, the value should be . - /// - public int? MaxAccessCount { get; set; } - - /// - /// Whether the created send has a password. - /// - /// - /// Should contain a value only on - /// and events. - /// Otherwise the value should be . - /// - public bool? HasPassword { get; set; } - - /// - /// The administrator that performed the action. - /// - /// - /// Should contain a value only on - /// and events. - /// Otherwise the value should be . - /// - public string? EventRaisedByUser { get; set; } - - /// - /// Whether or not an organization's trial period was started by a sales person. - /// - /// - /// Should contain a value only on - /// and events. - /// Otherwise the value should be . - /// - public bool? SalesAssistedTrialStarted { get; set; } - - /// - /// The installation id of the application that originated the event. - /// - /// - /// when the event was not originated by an application. - /// - public string? ClientId { get; set; } - - /// - /// The version of the client application that originated the event. - /// - /// - /// when the event was not originated by an application. - /// - public Version? ClientVersion { get; set; } - - /// - /// The initiation path of a user who signed up for a paid version of Bitwarden. For example, "Trial from marketing website". - /// - /// - /// This value should only be populated when the is . Otherwise, - /// the value should be . - /// - public string? SignupInitiationPath { get; set; } - - /// - /// The upgrade applied to an account. The current plan is listed first, - /// followed by the plan they are migrating to. For example, - /// "Teams Starter → Teams, Enterprise". - /// - /// - /// when the event was not originated by an application, - /// or when a downgrade occurred. - /// - public string? PlanUpgradePath { get; set; } - - /// - /// Used for the event to determine if the user has opted in to marketing emails. - /// - public bool? ReceiveMarketingEmails { get; set; } - - /// - /// Used for the event to indicate if the user - /// landed on the registration finish screen with a valid or invalid email verification token. - /// - public bool? EmailVerificationTokenValid { get; set; } - - /// - /// Used for the event to indicate if the user - /// landed on the registration finish screen after re-clicking an already used link. - /// - public bool? UserAlreadyExists { get; set; } -} diff --git a/src/Core/Tools/SendFeatures/Commands/NonAnonymousSendCommand.cs b/src/Core/Tools/SendFeatures/Commands/NonAnonymousSendCommand.cs index 00da0a911f..87b4e581ca 100644 --- a/src/Core/Tools/SendFeatures/Commands/NonAnonymousSendCommand.cs +++ b/src/Core/Tools/SendFeatures/Commands/NonAnonymousSendCommand.cs @@ -1,10 +1,8 @@ using System.Text.Json; -using Bit.Core.Context; using Bit.Core.Exceptions; using Bit.Core.Platform.Push; using Bit.Core.Tools.Entities; using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; using Bit.Core.Tools.Models.Data; using Bit.Core.Tools.Repositories; using Bit.Core.Tools.SendFeatures.Commands.Interfaces; @@ -19,8 +17,6 @@ public class NonAnonymousSendCommand : INonAnonymousSendCommand private readonly ISendFileStorageService _sendFileStorageService; private readonly IPushNotificationService _pushNotificationService; private readonly ISendValidationService _sendValidationService; - private readonly IReferenceEventService _referenceEventService; - private readonly ICurrentContext _currentContext; private readonly ISendCoreHelperService _sendCoreHelperService; public NonAnonymousSendCommand(ISendRepository sendRepository, @@ -28,16 +24,12 @@ public class NonAnonymousSendCommand : INonAnonymousSendCommand IPushNotificationService pushNotificationService, ISendAuthorizationService sendAuthorizationService, ISendValidationService sendValidationService, - IReferenceEventService referenceEventService, - ICurrentContext currentContext, ISendCoreHelperService sendCoreHelperService) { _sendRepository = sendRepository; _sendFileStorageService = sendFileStorageService; _pushNotificationService = pushNotificationService; _sendValidationService = sendValidationService; - _referenceEventService = referenceEventService; - _currentContext = currentContext; _sendCoreHelperService = sendCoreHelperService; } @@ -50,18 +42,6 @@ public class NonAnonymousSendCommand : INonAnonymousSendCommand { await _sendRepository.CreateAsync(send); await _pushNotificationService.PushSyncSendCreateAsync(send); - await _referenceEventService.RaiseEventAsync(new ReferenceEvent - { - Id = send.UserId ?? default, - Type = ReferenceEventType.SendCreated, - Source = ReferenceEventSource.User, - SendType = send.Type, - MaxAccessCount = send.MaxAccessCount, - HasPassword = !string.IsNullOrWhiteSpace(send.Password), - SendHasNotes = send.Data?.Contains("Notes"), - ClientId = _currentContext.ClientId, - ClientVersion = _currentContext.ClientVersion - }); } else { diff --git a/src/Core/Tools/SendFeatures/Services/SendAuthorizationService.cs b/src/Core/Tools/SendFeatures/Services/SendAuthorizationService.cs index 101a33754e..cf9f2636c0 100644 --- a/src/Core/Tools/SendFeatures/Services/SendAuthorizationService.cs +++ b/src/Core/Tools/SendFeatures/Services/SendAuthorizationService.cs @@ -1,9 +1,7 @@ -using Bit.Core.Context; -using Bit.Core.Entities; +using Bit.Core.Entities; using Bit.Core.Platform.Push; using Bit.Core.Tools.Entities; using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; using Bit.Core.Tools.Models.Data; using Bit.Core.Tools.Repositories; using Microsoft.AspNetCore.Identity; @@ -15,21 +13,15 @@ public class SendAuthorizationService : ISendAuthorizationService private readonly ISendRepository _sendRepository; private readonly IPasswordHasher _passwordHasher; private readonly IPushNotificationService _pushNotificationService; - private readonly IReferenceEventService _referenceEventService; - private readonly ICurrentContext _currentContext; public SendAuthorizationService( ISendRepository sendRepository, IPasswordHasher passwordHasher, - IPushNotificationService pushNotificationService, - IReferenceEventService referenceEventService, - ICurrentContext currentContext) + IPushNotificationService pushNotificationService) { _sendRepository = sendRepository; _passwordHasher = passwordHasher; _pushNotificationService = pushNotificationService; - _referenceEventService = referenceEventService; - _currentContext = currentContext; } public SendAccessResult SendCanBeAccessed(Send send, @@ -79,18 +71,6 @@ public class SendAuthorizationService : ISendAuthorizationService await _sendRepository.ReplaceAsync(sendToBeAccessed); await _pushNotificationService.PushSyncSendUpdateAsync(sendToBeAccessed); - await _referenceEventService.RaiseEventAsync(new ReferenceEvent - { - Id = sendToBeAccessed.UserId ?? default, - Type = ReferenceEventType.SendAccessed, - Source = ReferenceEventSource.User, - SendType = sendToBeAccessed.Type, - MaxAccessCount = sendToBeAccessed.MaxAccessCount, - HasPassword = !string.IsNullOrWhiteSpace(sendToBeAccessed.Password), - SendHasNotes = sendToBeAccessed.Data?.Contains("Notes"), - ClientId = _currentContext.ClientId, - ClientVersion = _currentContext.ClientVersion - }); return accessResult; } diff --git a/src/Core/Tools/Services/IReferenceEventService.cs b/src/Core/Tools/Services/IReferenceEventService.cs deleted file mode 100644 index d8fe12b5c7..0000000000 --- a/src/Core/Tools/Services/IReferenceEventService.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Bit.Core.Tools.Models.Business; - -namespace Bit.Core.Tools.Services; - -public interface IReferenceEventService -{ - Task RaiseEventAsync(ReferenceEvent referenceEvent); -} diff --git a/src/Core/Tools/Services/Implementations/AzureQueueReferenceEventService.cs b/src/Core/Tools/Services/Implementations/AzureQueueReferenceEventService.cs deleted file mode 100644 index 52769bdafb..0000000000 --- a/src/Core/Tools/Services/Implementations/AzureQueueReferenceEventService.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Text; -using System.Text.Json; -using Azure.Storage.Queues; -using Bit.Core.Settings; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Utilities; - -namespace Bit.Core.Tools.Services; - -public class AzureQueueReferenceEventService : IReferenceEventService -{ - private const string _queueName = "reference-events"; - - private readonly QueueClient _queueClient; - private readonly GlobalSettings _globalSettings; - - public AzureQueueReferenceEventService( - GlobalSettings globalSettings) - { - _queueClient = new QueueClient(globalSettings.Events.ConnectionString, _queueName); - _globalSettings = globalSettings; - } - - public async Task RaiseEventAsync(ReferenceEvent referenceEvent) - { - await SendMessageAsync(referenceEvent); - } - - private async Task SendMessageAsync(ReferenceEvent referenceEvent) - { - if (_globalSettings.SelfHosted) - { - // Ignore for self-hosted - return; - } - try - { - var message = JsonSerializer.Serialize(referenceEvent, JsonHelpers.IgnoreWritingNullAndCamelCase); - // Messages need to be base64 encoded - var encodedMessage = Convert.ToBase64String(Encoding.UTF8.GetBytes(message)); - await _queueClient.SendMessageAsync(encodedMessage); - } - catch - { - // Ignore failure - } - } -} diff --git a/src/Core/Tools/Services/NoopImplementations/NoopReferenceEventService.cs b/src/Core/Tools/Services/NoopImplementations/NoopReferenceEventService.cs deleted file mode 100644 index aecdf4a80d..0000000000 --- a/src/Core/Tools/Services/NoopImplementations/NoopReferenceEventService.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Bit.Core.Tools.Models.Business; - -namespace Bit.Core.Tools.Services; - -public class NoopReferenceEventService : IReferenceEventService -{ - public Task RaiseEventAsync(ReferenceEvent referenceEvent) - { - return Task.CompletedTask; - } -} diff --git a/src/Core/Vault/Services/Implementations/CipherService.cs b/src/Core/Vault/Services/Implementations/CipherService.cs index f81e404db8..e170cc8769 100644 --- a/src/Core/Vault/Services/Implementations/CipherService.cs +++ b/src/Core/Vault/Services/Implementations/CipherService.cs @@ -3,16 +3,12 @@ using Bit.Core.AdminConsole.Enums; using Bit.Core.AdminConsole.OrganizationFeatures.Policies; using Bit.Core.AdminConsole.OrganizationFeatures.Policies.PolicyRequirements; using Bit.Core.AdminConsole.Services; -using Bit.Core.Context; using Bit.Core.Enums; using Bit.Core.Exceptions; using Bit.Core.Platform.Push; using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Settings; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Core.Utilities; using Bit.Core.Vault.Authorization.Permissions; using Bit.Core.Vault.Entities; @@ -41,8 +37,6 @@ public class CipherService : ICipherService private readonly IPolicyService _policyService; private readonly GlobalSettings _globalSettings; private const long _fileSizeLeeway = 1024L * 1024L; // 1MB - private readonly IReferenceEventService _referenceEventService; - private readonly ICurrentContext _currentContext; private readonly IGetCipherPermissionsForUserQuery _getCipherPermissionsForUserQuery; private readonly IPolicyRequirementQuery _policyRequirementQuery; private readonly IApplicationCacheService _applicationCacheService; @@ -62,8 +56,6 @@ public class CipherService : ICipherService IUserService userService, IPolicyService policyService, GlobalSettings globalSettings, - IReferenceEventService referenceEventService, - ICurrentContext currentContext, IGetCipherPermissionsForUserQuery getCipherPermissionsForUserQuery, IPolicyRequirementQuery policyRequirementQuery, IApplicationCacheService applicationCacheService, @@ -82,8 +74,6 @@ public class CipherService : ICipherService _userService = userService; _policyService = policyService; _globalSettings = globalSettings; - _referenceEventService = referenceEventService; - _currentContext = currentContext; _getCipherPermissionsForUserQuery = getCipherPermissionsForUserQuery; _policyRequirementQuery = policyRequirementQuery; _applicationCacheService = applicationCacheService; @@ -108,9 +98,6 @@ public class CipherService : ICipherService cipher.UserId = savingUserId; } await _cipherRepository.CreateAsync(cipher, collectionIds); - - await _referenceEventService.RaiseEventAsync( - new ReferenceEvent(ReferenceEventType.CipherCreated, await _organizationRepository.GetByIdAsync(cipher.OrganizationId.Value), _currentContext)); } else { diff --git a/src/Identity/Billing/Controller/AccountsController.cs b/src/Identity/Billing/Controller/AccountsController.cs index b83940d3aa..f476e4e094 100644 --- a/src/Identity/Billing/Controller/AccountsController.cs +++ b/src/Identity/Billing/Controller/AccountsController.cs @@ -1,11 +1,7 @@ using Bit.Core; using Bit.Core.Billing.Models.Api.Requests.Accounts; using Bit.Core.Billing.TrialInitiation.Registration; -using Bit.Core.Context; using Bit.Core.Services; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Core.Utilities; using Bit.SharedWeb.Utilities; using Microsoft.AspNetCore.Mvc; @@ -15,9 +11,7 @@ namespace Bit.Identity.Billing.Controller; [Route("accounts")] [ExceptionHandlerFilter] public class AccountsController( - ICurrentContext currentContext, ISendTrialInitiationEmailForRegistrationCommand sendTrialInitiationEmailForRegistrationCommand, - IReferenceEventService referenceEventService, IFeatureService featureService) : Microsoft.AspNetCore.Mvc.Controller { [HttpPost("trial/send-verification-email")] @@ -36,15 +30,6 @@ public class AccountsController( model.Products, trialLength); - var refEvent = new ReferenceEvent - { - Type = ReferenceEventType.SignupEmailSubmit, - ClientId = currentContext.ClientId, - ClientVersion = currentContext.ClientVersion, - Source = ReferenceEventSource.Registration - }; - await referenceEventService.RaiseEventAsync(refEvent); - if (token != null) { return Ok(token); diff --git a/src/Identity/Controllers/AccountsController.cs b/src/Identity/Controllers/AccountsController.cs index 80e9536ea3..4965046bfc 100644 --- a/src/Identity/Controllers/AccountsController.cs +++ b/src/Identity/Controllers/AccountsController.cs @@ -16,9 +16,6 @@ using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Settings; using Bit.Core.Tokens; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Core.Utilities; using Bit.Identity.Models.Request.Accounts; using Bit.Identity.Models.Response.Accounts; @@ -39,7 +36,6 @@ public class AccountsController : Controller private readonly IDataProtectorTokenFactory _assertionOptionsDataProtector; private readonly IGetWebAuthnLoginCredentialAssertionOptionsCommand _getWebAuthnLoginCredentialAssertionOptionsCommand; private readonly ISendVerificationEmailForRegistrationCommand _sendVerificationEmailForRegistrationCommand; - private readonly IReferenceEventService _referenceEventService; private readonly IFeatureService _featureService; private readonly IDataProtectorTokenFactory _registrationEmailVerificationTokenDataFactory; @@ -86,7 +82,6 @@ public class AccountsController : Controller IDataProtectorTokenFactory assertionOptionsDataProtector, IGetWebAuthnLoginCredentialAssertionOptionsCommand getWebAuthnLoginCredentialAssertionOptionsCommand, ISendVerificationEmailForRegistrationCommand sendVerificationEmailForRegistrationCommand, - IReferenceEventService referenceEventService, IFeatureService featureService, IDataProtectorTokenFactory registrationEmailVerificationTokenDataFactory, GlobalSettings globalSettings @@ -99,7 +94,6 @@ public class AccountsController : Controller _assertionOptionsDataProtector = assertionOptionsDataProtector; _getWebAuthnLoginCredentialAssertionOptionsCommand = getWebAuthnLoginCredentialAssertionOptionsCommand; _sendVerificationEmailForRegistrationCommand = sendVerificationEmailForRegistrationCommand; - _referenceEventService = referenceEventService; _featureService = featureService; _registrationEmailVerificationTokenDataFactory = registrationEmailVerificationTokenDataFactory; @@ -115,15 +109,6 @@ public class AccountsController : Controller var token = await _sendVerificationEmailForRegistrationCommand.Run(model.Email, model.Name, model.ReceiveMarketingEmails); - var refEvent = new ReferenceEvent - { - Type = ReferenceEventType.SignupEmailSubmit, - ClientId = _currentContext.ClientId, - ClientVersion = _currentContext.ClientVersion, - Source = ReferenceEventSource.Registration - }; - await _referenceEventService.RaiseEventAsync(refEvent); - if (token != null) { return Ok(token); @@ -142,18 +127,6 @@ public class AccountsController : Controller var user = await _userRepository.GetByEmailAsync(model.Email); var userExists = user != null; - var refEvent = new ReferenceEvent - { - Type = ReferenceEventType.SignupEmailClicked, - ClientId = _currentContext.ClientId, - ClientVersion = _currentContext.ClientVersion, - Source = ReferenceEventSource.Registration, - EmailVerificationTokenValid = tokenValid, - UserAlreadyExists = userExists - }; - - await _referenceEventService.RaiseEventAsync(refEvent); - if (!tokenValid || userExists) { throw new BadRequestException("Expired link. Please restart registration or try logging in. You may already have an account"); diff --git a/src/SharedWeb/Utilities/ServiceCollectionExtensions.cs b/src/SharedWeb/Utilities/ServiceCollectionExtensions.cs index 247d4c5d43..7ee94d0dce 100644 --- a/src/SharedWeb/Utilities/ServiceCollectionExtensions.cs +++ b/src/SharedWeb/Utilities/ServiceCollectionExtensions.cs @@ -352,15 +352,6 @@ public static class ServiceCollectionExtensions { services.AddSingleton(); } - - if (globalSettings.SelfHosted) - { - services.AddSingleton(); - } - else - { - services.AddSingleton(); - } } public static void AddOosServices(this IServiceCollection services) diff --git a/test/Api.Test/Billing/Controllers/OrganizationsControllerTests.cs b/test/Api.Test/Billing/Controllers/OrganizationsControllerTests.cs index 16e32870ad..63afb2a7a8 100644 --- a/test/Api.Test/Billing/Controllers/OrganizationsControllerTests.cs +++ b/test/Api.Test/Billing/Controllers/OrganizationsControllerTests.cs @@ -23,7 +23,6 @@ using Bit.Core.OrganizationFeatures.OrganizationLicenses.Interfaces; using Bit.Core.OrganizationFeatures.OrganizationSubscriptions.Interface; using Bit.Core.Repositories; using Bit.Core.Services; -using Bit.Core.Tools.Services; using NSubstitute; using NSubstitute.ReturnsExtensions; using Xunit; @@ -46,7 +45,6 @@ public class OrganizationsControllerTests : IDisposable private readonly IUpdateSecretsManagerSubscriptionCommand _updateSecretsManagerSubscriptionCommand; private readonly IUpgradeOrganizationPlanCommand _upgradeOrganizationPlanCommand; private readonly IAddSecretsManagerSubscriptionCommand _addSecretsManagerSubscriptionCommand; - private readonly IReferenceEventService _referenceEventService; private readonly ISubscriberService _subscriberService; private readonly IRemoveOrganizationUserCommand _removeOrganizationUserCommand; private readonly IOrganizationInstallationRepository _organizationInstallationRepository; @@ -71,7 +69,6 @@ public class OrganizationsControllerTests : IDisposable _updateSecretsManagerSubscriptionCommand = Substitute.For(); _upgradeOrganizationPlanCommand = Substitute.For(); _addSecretsManagerSubscriptionCommand = Substitute.For(); - _referenceEventService = Substitute.For(); _subscriberService = Substitute.For(); _removeOrganizationUserCommand = Substitute.For(); _organizationInstallationRepository = Substitute.For(); @@ -90,7 +87,6 @@ public class OrganizationsControllerTests : IDisposable _updateSecretsManagerSubscriptionCommand, _upgradeOrganizationPlanCommand, _addSecretsManagerSubscriptionCommand, - _referenceEventService, _subscriberService, _organizationInstallationRepository, _pricingClient); diff --git a/test/Api.Test/Tools/Controllers/SendsControllerTests.cs b/test/Api.Test/Tools/Controllers/SendsControllerTests.cs index b1fa5c9260..7210bddebb 100644 --- a/test/Api.Test/Tools/Controllers/SendsControllerTests.cs +++ b/test/Api.Test/Tools/Controllers/SendsControllerTests.cs @@ -3,7 +3,6 @@ using AutoFixture.Xunit2; using Bit.Api.Tools.Controllers; using Bit.Api.Tools.Models.Request; using Bit.Api.Tools.Models.Response; -using Bit.Core.Context; using Bit.Core.Entities; using Bit.Core.Exceptions; using Bit.Core.Services; @@ -33,7 +32,6 @@ public class SendsControllerTests : IDisposable private readonly ISendAuthorizationService _sendAuthorizationService; private readonly ISendFileStorageService _sendFileStorageService; private readonly ILogger _logger; - private readonly ICurrentContext _currentContext; public SendsControllerTests() { @@ -45,7 +43,6 @@ public class SendsControllerTests : IDisposable _sendFileStorageService = Substitute.For(); _globalSettings = new GlobalSettings(); _logger = Substitute.For>(); - _currentContext = Substitute.For(); _sut = new SendsController( _sendRepository, @@ -55,8 +52,7 @@ public class SendsControllerTests : IDisposable _nonAnonymousSendCommand, _sendFileStorageService, _logger, - _globalSettings, - _currentContext + _globalSettings ); } diff --git a/test/Core.Test/AdminConsole/OrganizationFeatures/Groups/CreateGroupCommandTests.cs b/test/Core.Test/AdminConsole/OrganizationFeatures/Groups/CreateGroupCommandTests.cs index 20745673fd..1481ec6a91 100644 --- a/test/Core.Test/AdminConsole/OrganizationFeatures/Groups/CreateGroupCommandTests.cs +++ b/test/Core.Test/AdminConsole/OrganizationFeatures/Groups/CreateGroupCommandTests.cs @@ -6,9 +6,6 @@ using Bit.Core.Exceptions; using Bit.Core.Models.Data; using Bit.Core.Services; using Bit.Core.Test.AutoFixture.OrganizationFixtures; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; using Bit.Test.Common.Helpers; @@ -27,7 +24,6 @@ public class CreateGroupCommandTests await sutProvider.GetDependency().Received(1).CreateAsync(group); await sutProvider.GetDependency().Received(1).LogGroupEventAsync(group, Enums.EventType.Group_Created); - await sutProvider.GetDependency().Received(1).RaiseEventAsync(Arg.Is(r => r.Type == ReferenceEventType.GroupCreated && r.Id == organization.Id && r.Source == ReferenceEventSource.Organization)); AssertHelper.AssertRecent(group.CreationDate); AssertHelper.AssertRecent(group.RevisionDate); } @@ -48,7 +44,6 @@ public class CreateGroupCommandTests await sutProvider.GetDependency().Received(1).CreateAsync(group, collections); await sutProvider.GetDependency().Received(1).LogGroupEventAsync(group, Enums.EventType.Group_Created); - await sutProvider.GetDependency().Received(1).RaiseEventAsync(Arg.Is(r => r.Type == ReferenceEventType.GroupCreated && r.Id == organization.Id && r.Source == ReferenceEventSource.Organization)); AssertHelper.AssertRecent(group.CreationDate); AssertHelper.AssertRecent(group.RevisionDate); } @@ -60,7 +55,6 @@ public class CreateGroupCommandTests await sutProvider.GetDependency().Received(1).CreateAsync(group); await sutProvider.GetDependency().Received(1).LogGroupEventAsync(group, Enums.EventType.Group_Created, eventSystemUser); - await sutProvider.GetDependency().Received(1).RaiseEventAsync(Arg.Is(r => r.Type == ReferenceEventType.GroupCreated && r.Id == organization.Id && r.Source == ReferenceEventSource.Organization)); AssertHelper.AssertRecent(group.CreationDate); AssertHelper.AssertRecent(group.RevisionDate); } @@ -74,7 +68,6 @@ public class CreateGroupCommandTests await sutProvider.GetDependency().DidNotReceiveWithAnyArgs().CreateAsync(default); await sutProvider.GetDependency().DidNotReceiveWithAnyArgs().LogGroupEventAsync(default, default, default); - await sutProvider.GetDependency().DidNotReceiveWithAnyArgs().RaiseEventAsync(default); } [Theory, OrganizationCustomize(UseGroups = false), BitAutoData] @@ -86,6 +79,5 @@ public class CreateGroupCommandTests await sutProvider.GetDependency().DidNotReceiveWithAnyArgs().CreateAsync(default); await sutProvider.GetDependency().DidNotReceiveWithAnyArgs().LogGroupEventAsync(default, default, default); - await sutProvider.GetDependency().DidNotReceiveWithAnyArgs().RaiseEventAsync(default); } } diff --git a/test/Core.Test/AdminConsole/OrganizationFeatures/Organizations/OrganizationSignUp/CloudOrganizationSignUpCommandTests.cs b/test/Core.Test/AdminConsole/OrganizationFeatures/Organizations/OrganizationSignUp/CloudOrganizationSignUpCommandTests.cs index 544c97d166..8acbe5eded 100644 --- a/test/Core.Test/AdminConsole/OrganizationFeatures/Organizations/OrganizationSignUp/CloudOrganizationSignUpCommandTests.cs +++ b/test/Core.Test/AdminConsole/OrganizationFeatures/Organizations/OrganizationSignUp/CloudOrganizationSignUpCommandTests.cs @@ -10,9 +10,6 @@ using Bit.Core.Exceptions; using Bit.Core.Models.Business; using Bit.Core.Models.Data; using Bit.Core.Repositories; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Core.Utilities; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; @@ -51,15 +48,6 @@ public class CloudICloudOrganizationSignUpCommandTests await sutProvider.GetDependency().Received(1).CreateAsync( Arg.Is(o => o.AccessSecretsManager == signup.UseSecretsManager)); - await sutProvider.GetDependency().Received(1) - .RaiseEventAsync(Arg.Is(referenceEvent => - referenceEvent.Type == ReferenceEventType.Signup && - referenceEvent.PlanName == plan.Name && - referenceEvent.PlanType == plan.Type && - referenceEvent.Seats == result.Organization.Seats && - referenceEvent.Storage == result.Organization.MaxStorageGb)); - // TODO: add reference events for SmSeats and Service Accounts - see AC-1481 - Assert.NotNull(result.Organization); Assert.NotNull(result.OrganizationUser); @@ -145,15 +133,6 @@ public class CloudICloudOrganizationSignUpCommandTests await sutProvider.GetDependency().Received(1).CreateAsync( Arg.Is(o => o.AccessSecretsManager == signup.UseSecretsManager)); - await sutProvider.GetDependency().Received(1) - .RaiseEventAsync(Arg.Is(referenceEvent => - referenceEvent.Type == ReferenceEventType.Signup && - referenceEvent.PlanName == plan.Name && - referenceEvent.PlanType == plan.Type && - referenceEvent.Seats == result.Organization.Seats && - referenceEvent.Storage == result.Organization.MaxStorageGb)); - // TODO: add reference events for SmSeats and Service Accounts - see AC-1481 - Assert.NotNull(result.Organization); Assert.NotNull(result.OrganizationUser); diff --git a/test/Core.Test/AdminConsole/OrganizationFeatures/Organizations/OrganizationSignUp/ProviderClientOrganizationSignUpCommandTests.cs b/test/Core.Test/AdminConsole/OrganizationFeatures/Organizations/OrganizationSignUp/ProviderClientOrganizationSignUpCommandTests.cs index b13c7e5b65..881f134b4c 100644 --- a/test/Core.Test/AdminConsole/OrganizationFeatures/Organizations/OrganizationSignUp/ProviderClientOrganizationSignUpCommandTests.cs +++ b/test/Core.Test/AdminConsole/OrganizationFeatures/Organizations/OrganizationSignUp/ProviderClientOrganizationSignUpCommandTests.cs @@ -10,9 +10,6 @@ using Bit.Core.Models.Data; using Bit.Core.Models.StaticStore; using Bit.Core.Repositories; using Bit.Core.Services; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Core.Utilities; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; @@ -65,17 +62,6 @@ public class ProviderClientOrganizationSignUpCommandTests ) ); - await sutProvider.GetDependency() - .Received(1) - .RaiseEventAsync(Arg.Is(referenceEvent => - referenceEvent.Type == ReferenceEventType.Signup && - referenceEvent.PlanName == plan.Name && - referenceEvent.PlanType == plan.Type && - referenceEvent.Seats == result.Organization.Seats && - referenceEvent.Storage == result.Organization.MaxStorageGb && - referenceEvent.SignupInitiationPath == signup.InitiationPath - )); - await sutProvider.GetDependency() .Received(1) .CreateAsync( diff --git a/test/Core.Test/AdminConsole/Services/OrganizationServiceTests.cs b/test/Core.Test/AdminConsole/Services/OrganizationServiceTests.cs index 18f1f79900..d926e282c9 100644 --- a/test/Core.Test/AdminConsole/Services/OrganizationServiceTests.cs +++ b/test/Core.Test/AdminConsole/Services/OrganizationServiceTests.cs @@ -22,9 +22,6 @@ using Bit.Core.Settings; using Bit.Core.Test.AutoFixture.OrganizationFixtures; using Bit.Core.Test.AutoFixture.OrganizationUserFixtures; using Bit.Core.Tokens; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Core.Utilities; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; @@ -100,10 +97,6 @@ public class OrganizationServiceTests await sutProvider.GetDependency().Received(1) .LogOrganizationUserEventsAsync(Arg.Is>(events => events.Count() == expectedNewUsersCount)); - await sutProvider.GetDependency().Received(1) - .RaiseEventAsync(Arg.Is(referenceEvent => - referenceEvent.Type == ReferenceEventType.InvitedUsers && referenceEvent.Id == org.Id && - referenceEvent.Users == expectedNewUsersCount)); } [Theory, PaidOrganizationCustomize, BitAutoData] @@ -170,10 +163,6 @@ public class OrganizationServiceTests await sutProvider.GetDependency().Received(1) .LogOrganizationUserEventsAsync(Arg.Is>(events => events.Count(e => e.Item2 == EventType.OrganizationUser_Invited) == expectedNewUsersCount)); - await sutProvider.GetDependency().Received(1) - .RaiseEventAsync(Arg.Is(referenceEvent => - referenceEvent.Type == ReferenceEventType.InvitedUsers && referenceEvent.Id == org.Id && - referenceEvent.Users == expectedNewUsersCount)); } [Theory] @@ -728,9 +717,8 @@ public class OrganizationServiceTests .UpdateSubscriptionAsync(Arg.Any()) .ReturnsForAnyArgs(Task.FromResult(0)).AndDoes(x => organization.SmSeats += invitedSmUsers); - // Throw error at the end of the try block - sutProvider.GetDependency().RaiseEventAsync(default) - .ThrowsForAnyArgs(); + sutProvider.GetDependency() + .SendInvitesAsync(Arg.Any()).ThrowsAsync(); sutProvider.GetDependency().GetPlanOrThrow(organization.PlanType) .Returns(StaticStore.GetPlan(organization.PlanType)); diff --git a/test/Core.Test/Auth/UserFeatures/Registration/RegisterUserCommandTests.cs b/test/Core.Test/Auth/UserFeatures/Registration/RegisterUserCommandTests.cs index ffc56e89b2..b19ae47cfc 100644 --- a/test/Core.Test/Auth/UserFeatures/Registration/RegisterUserCommandTests.cs +++ b/test/Core.Test/Auth/UserFeatures/Registration/RegisterUserCommandTests.cs @@ -14,9 +14,6 @@ using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Settings; using Bit.Core.Tokens; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Core.Utilities; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; @@ -57,10 +54,6 @@ public class RegisterUserCommandTests await sutProvider.GetDependency() .Received(1) .SendWelcomeEmailAsync(user); - - await sutProvider.GetDependency() - .Received(1) - .RaiseEventAsync(Arg.Is(refEvent => refEvent.Type == ReferenceEventType.Signup)); } [Theory] @@ -85,10 +78,6 @@ public class RegisterUserCommandTests await sutProvider.GetDependency() .DidNotReceive() .SendWelcomeEmailAsync(Arg.Any()); - - await sutProvider.GetDependency() - .DidNotReceive() - .RaiseEventAsync(Arg.Any()); } // ----------------------------------------------------------------------------------------------- @@ -117,10 +106,6 @@ public class RegisterUserCommandTests await sutProvider.GetDependency() .Received(1) .CreateUserAsync(user, masterPasswordHash); - - await sutProvider.GetDependency() - .Received(1) - .RaiseEventAsync(Arg.Is(refEvent => refEvent.Type == ReferenceEventType.Signup)); } // Complex happy path test @@ -215,18 +200,9 @@ public class RegisterUserCommandTests .Received(1) .SendWelcomeEmailAsync(user); } - - await sutProvider.GetDependency() - .Received(1) - .RaiseEventAsync(Arg.Is(refEvent => refEvent.Type == ReferenceEventType.Signup && refEvent.SignupInitiationPath == initiationPath)); - } else { - await sutProvider.GetDependency() - .Received(1) - .RaiseEventAsync(Arg.Is(refEvent => refEvent.Type == ReferenceEventType.Signup && refEvent.SignupInitiationPath == default)); - // Even if user doesn't have reference data, we should send them welcome email await sutProvider.GetDependency() .Received(1) @@ -359,10 +335,6 @@ public class RegisterUserCommandTests await sutProvider.GetDependency() .Received(1) .SendWelcomeEmailAsync(user); - - await sutProvider.GetDependency() - .Received(1) - .RaiseEventAsync(Arg.Is(refEvent => refEvent.Type == ReferenceEventType.Signup && refEvent.ReceiveMarketingEmails == receiveMarketingMaterials)); } [Theory] @@ -429,10 +401,6 @@ public class RegisterUserCommandTests await sutProvider.GetDependency() .Received(1) .SendWelcomeEmailAsync(user); - - await sutProvider.GetDependency() - .Received(1) - .RaiseEventAsync(Arg.Is(refEvent => refEvent.Type == ReferenceEventType.Signup)); } [Theory] @@ -506,10 +474,6 @@ public class RegisterUserCommandTests await sutProvider.GetDependency() .Received(1) .SendWelcomeEmailAsync(user); - - await sutProvider.GetDependency() - .Received(1) - .RaiseEventAsync(Arg.Is(refEvent => refEvent.Type == ReferenceEventType.Signup)); } [Theory] @@ -604,10 +568,6 @@ public class RegisterUserCommandTests await sutProvider.GetDependency() .Received(1) .SendWelcomeEmailAsync(user); - - await sutProvider.GetDependency() - .Received(1) - .RaiseEventAsync(Arg.Is(refEvent => refEvent.Type == ReferenceEventType.Signup)); } [Theory] diff --git a/test/Core.Test/Services/UserServiceTests.cs b/test/Core.Test/Services/UserServiceTests.cs index a5bfe35152..9252d28588 100644 --- a/test/Core.Test/Services/UserServiceTests.cs +++ b/test/Core.Test/Services/UserServiceTests.cs @@ -26,7 +26,6 @@ using Bit.Core.Platform.Push; using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Settings; -using Bit.Core.Tools.Services; using Bit.Core.Utilities; using Bit.Core.Vault.Repositories; using Bit.Test.Common.AutoFixture; @@ -316,7 +315,6 @@ public class UserServiceTests sutProvider.GetDependency(), sutProvider.GetDependency(), sutProvider.GetDependency(), - sutProvider.GetDependency(), sutProvider.GetDependency(), sutProvider.GetDependency(), sutProvider.GetDependency(), @@ -910,7 +908,6 @@ public class UserServiceTests sutProvider.GetDependency(), sutProvider.GetDependency(), sutProvider.GetDependency(), - sutProvider.GetDependency(), sutProvider.GetDependency(), sutProvider.GetDependency(), sutProvider.GetDependency(), diff --git a/test/Core.Test/Tools/ImportFeatures/ImportCiphersAsyncCommandTests.cs b/test/Core.Test/Tools/ImportFeatures/ImportCiphersAsyncCommandTests.cs index f73a628940..5605b5ab2a 100644 --- a/test/Core.Test/Tools/ImportFeatures/ImportCiphersAsyncCommandTests.cs +++ b/test/Core.Test/Tools/ImportFeatures/ImportCiphersAsyncCommandTests.cs @@ -9,10 +9,7 @@ using Bit.Core.Platform.Push; using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Test.AutoFixture.CipherFixtures; -using Bit.Core.Tools.Enums; using Bit.Core.Tools.ImportFeatures; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Core.Vault.Entities; using Bit.Core.Vault.Models.Data; using Bit.Core.Vault.Repositories; @@ -183,8 +180,6 @@ public class ImportCiphersAsyncCommandTests !cus.Any(cu => cu.CollectionId == collections[0].Id) && // Check that access was not added for the collection that already existed in the organization cus.All(cu => cu.OrganizationUserId == importingOrganizationUser.Id && cu.Manage == true))); await sutProvider.GetDependency().Received(1).PushSyncVaultAsync(importingUserId); - await sutProvider.GetDependency().Received(1).RaiseEventAsync( - Arg.Is(e => e.Type == ReferenceEventType.VaultImported)); } [Theory, BitAutoData] diff --git a/test/Core.Test/Tools/Services/NonAnonymousSendCommandTests.cs b/test/Core.Test/Tools/Services/NonAnonymousSendCommandTests.cs index 15e7d57651..674cca7d5f 100644 --- a/test/Core.Test/Tools/Services/NonAnonymousSendCommandTests.cs +++ b/test/Core.Test/Tools/Services/NonAnonymousSendCommandTests.cs @@ -8,7 +8,6 @@ using Bit.Core.Test.AutoFixture.CurrentContextFixtures; using Bit.Core.Test.Tools.AutoFixture.SendFixtures; using Bit.Core.Tools.Entities; using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; using Bit.Core.Tools.Models.Data; using Bit.Core.Tools.Repositories; using Bit.Core.Tools.SendFeatures; @@ -32,7 +31,6 @@ public class NonAnonymousSendCommandTests private readonly ISendAuthorizationService _sendAuthorizationService; private readonly ISendValidationService _sendValidationService; private readonly IFeatureService _featureService; - private readonly IReferenceEventService _referenceEventService; private readonly ICurrentContext _currentContext; private readonly ISendCoreHelperService _sendCoreHelperService; private readonly NonAnonymousSendCommand _nonAnonymousSendCommand; @@ -45,7 +43,6 @@ public class NonAnonymousSendCommandTests _sendAuthorizationService = Substitute.For(); _featureService = Substitute.For(); _sendValidationService = Substitute.For(); - _referenceEventService = Substitute.For(); _currentContext = Substitute.For(); _sendCoreHelperService = Substitute.For(); @@ -55,8 +52,6 @@ public class NonAnonymousSendCommandTests _pushNotificationService, _sendAuthorizationService, _sendValidationService, - _referenceEventService, - _currentContext, _sendCoreHelperService ); } @@ -135,14 +130,6 @@ public class NonAnonymousSendCommandTests // For new Sends await _sendRepository.Received(1).CreateAsync(send); await _pushNotificationService.Received(1).PushSyncSendCreateAsync(send); - await _referenceEventService.Received(1).RaiseEventAsync(Arg.Is(e => - e.Id == userId && - e.Type == ReferenceEventType.SendCreated && - e.Source == ReferenceEventSource.User && - e.SendType == send.Type && - e.SendHasNotes == true && - e.ClientId == "test-client" && - e.ClientVersion == Version.Parse("1.0.0"))); } else { @@ -150,7 +137,6 @@ public class NonAnonymousSendCommandTests await _sendRepository.Received(1).UpsertAsync(send); Assert.NotEqual(initialDate, send.RevisionDate); await _pushNotificationService.Received(1).PushSyncSendUpdateAsync(send); - await _referenceEventService.DidNotReceive().RaiseEventAsync(Arg.Any()); } } @@ -234,14 +220,6 @@ public class NonAnonymousSendCommandTests // For new Sends await _sendRepository.Received(1).CreateAsync(send); await _pushNotificationService.Received(1).PushSyncSendCreateAsync(send); - await _referenceEventService.Received(1).RaiseEventAsync(Arg.Is(e => - e.Id == userId && - e.Type == ReferenceEventType.SendCreated && - e.Source == ReferenceEventSource.User && - e.SendType == send.Type && - e.HasPassword == false && - e.ClientId == "test-client" && - e.ClientVersion == Version.Parse("1.0.0"))); } else { @@ -249,7 +227,6 @@ public class NonAnonymousSendCommandTests await _sendRepository.Received(1).UpsertAsync(send); Assert.NotEqual(initialDate, send.RevisionDate); await _pushNotificationService.Received(1).PushSyncSendUpdateAsync(send); - await _referenceEventService.DidNotReceive().RaiseEventAsync(Arg.Any()); } } @@ -285,7 +262,6 @@ public class NonAnonymousSendCommandTests await _sendRepository.DidNotReceive().UpsertAsync(Arg.Any()); await _pushNotificationService.DidNotReceive().PushSyncSendCreateAsync(Arg.Any()); await _pushNotificationService.DidNotReceive().PushSyncSendUpdateAsync(Arg.Any()); - await _referenceEventService.DidNotReceive().RaiseEventAsync(Arg.Any()); } [Theory] @@ -328,14 +304,6 @@ public class NonAnonymousSendCommandTests // For new Sends await _sendRepository.Received(1).CreateAsync(send); await _pushNotificationService.Received(1).PushSyncSendCreateAsync(send); - await _referenceEventService.Received(1).RaiseEventAsync(Arg.Is(e => - e.Id == userId && - e.Type == ReferenceEventType.SendCreated && - e.Source == ReferenceEventSource.User && - e.SendType == send.Type && - e.SendHasNotes == true && - e.ClientId == "test-client" && - e.ClientVersion == Version.Parse("1.0.0"))); } else { @@ -343,7 +311,6 @@ public class NonAnonymousSendCommandTests await _sendRepository.Received(1).UpsertAsync(send); Assert.NotEqual(initialDate, send.RevisionDate); await _pushNotificationService.Received(1).PushSyncSendUpdateAsync(send); - await _referenceEventService.DidNotReceive().RaiseEventAsync(Arg.Any()); } } @@ -386,9 +353,6 @@ public class NonAnonymousSendCommandTests // Verify push notification wasn't sent await _pushNotificationService.DidNotReceive().PushSyncSendCreateAsync(Arg.Any()); await _pushNotificationService.DidNotReceive().PushSyncSendUpdateAsync(Arg.Any()); - - // Verify reference event service wasn't called - await _referenceEventService.DidNotReceive().RaiseEventAsync(Arg.Any()); } [Theory] @@ -431,13 +395,6 @@ public class NonAnonymousSendCommandTests // For new Sends await _sendRepository.Received(1).CreateAsync(send); await _pushNotificationService.Received(1).PushSyncSendCreateAsync(send); - await _referenceEventService.Received(1).RaiseEventAsync(Arg.Is(e => - e.Id == userId && - e.Type == ReferenceEventType.SendCreated && - e.Source == ReferenceEventSource.User && - e.SendType == send.Type && - e.ClientId == "test-client" && - e.ClientVersion == Version.Parse("1.0.0"))); } else { @@ -445,7 +402,6 @@ public class NonAnonymousSendCommandTests await _sendRepository.Received(1).UpsertAsync(send); Assert.NotEqual(initialDate, send.RevisionDate); await _pushNotificationService.Received(1).PushSyncSendUpdateAsync(send); - await _referenceEventService.DidNotReceive().RaiseEventAsync(Arg.Any()); } } @@ -481,9 +437,6 @@ public class NonAnonymousSendCommandTests // Verify push notification was sent for the update await _pushNotificationService.Received(1).PushSyncSendUpdateAsync(send); - - // Verify no reference event was raised (only happens for new sends) - await _referenceEventService.DidNotReceive().RaiseEventAsync(Arg.Any()); } [Fact] diff --git a/test/Core.Test/Tools/Services/SendAuthorizationServiceTests.cs b/test/Core.Test/Tools/Services/SendAuthorizationServiceTests.cs index 9b2637d030..c33dbc0ec6 100644 --- a/test/Core.Test/Tools/Services/SendAuthorizationServiceTests.cs +++ b/test/Core.Test/Tools/Services/SendAuthorizationServiceTests.cs @@ -1,5 +1,4 @@ -using Bit.Core.Context; -using Bit.Core.Platform.Push; +using Bit.Core.Platform.Push; using Bit.Core.Tools.Entities; using Bit.Core.Tools.Models.Data; using Bit.Core.Tools.Repositories; @@ -15,8 +14,6 @@ public class SendAuthorizationServiceTests private readonly ISendRepository _sendRepository; private readonly IPasswordHasher _passwordHasher; private readonly IPushNotificationService _pushNotificationService; - private readonly IReferenceEventService _referenceEventService; - private readonly ICurrentContext _currentContext; private readonly SendAuthorizationService _sendAuthorizationService; public SendAuthorizationServiceTests() @@ -24,15 +21,11 @@ public class SendAuthorizationServiceTests _sendRepository = Substitute.For(); _passwordHasher = Substitute.For>(); _pushNotificationService = Substitute.For(); - _referenceEventService = Substitute.For(); - _currentContext = Substitute.For(); _sendAuthorizationService = new SendAuthorizationService( _sendRepository, _passwordHasher, - _pushNotificationService, - _referenceEventService, - _currentContext); + _pushNotificationService); } diff --git a/test/Identity.Test/Controllers/AccountsControllerTests.cs b/test/Identity.Test/Controllers/AccountsControllerTests.cs index a045490862..bff33cc679 100644 --- a/test/Identity.Test/Controllers/AccountsControllerTests.cs +++ b/test/Identity.Test/Controllers/AccountsControllerTests.cs @@ -14,9 +14,6 @@ using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Settings; using Bit.Core.Tokens; -using Bit.Core.Tools.Enums; -using Bit.Core.Tools.Models.Business; -using Bit.Core.Tools.Services; using Bit.Identity.Controllers; using Bit.Identity.Models.Request.Accounts; using Bit.Test.Common.AutoFixture.Attributes; @@ -40,7 +37,6 @@ public class AccountsControllerTests : IDisposable private readonly IDataProtectorTokenFactory _assertionOptionsDataProtector; private readonly IGetWebAuthnLoginCredentialAssertionOptionsCommand _getWebAuthnLoginCredentialAssertionOptionsCommand; private readonly ISendVerificationEmailForRegistrationCommand _sendVerificationEmailForRegistrationCommand; - private readonly IReferenceEventService _referenceEventService; private readonly IFeatureService _featureService; private readonly IDataProtectorTokenFactory _registrationEmailVerificationTokenDataFactory; private readonly GlobalSettings _globalSettings; @@ -55,7 +51,6 @@ public class AccountsControllerTests : IDisposable _assertionOptionsDataProtector = Substitute.For>(); _getWebAuthnLoginCredentialAssertionOptionsCommand = Substitute.For(); _sendVerificationEmailForRegistrationCommand = Substitute.For(); - _referenceEventService = Substitute.For(); _featureService = Substitute.For(); _registrationEmailVerificationTokenDataFactory = Substitute.For>(); _globalSettings = Substitute.For(); @@ -68,7 +63,6 @@ public class AccountsControllerTests : IDisposable _assertionOptionsDataProtector, _getWebAuthnLoginCredentialAssertionOptionsCommand, _sendVerificationEmailForRegistrationCommand, - _referenceEventService, _featureService, _registrationEmailVerificationTokenDataFactory, _globalSettings @@ -163,8 +157,6 @@ public class AccountsControllerTests : IDisposable var okResult = Assert.IsType(result); Assert.Equal(200, okResult.StatusCode); Assert.Equal(token, okResult.Value); - - await _referenceEventService.Received(1).RaiseEventAsync(Arg.Is(e => e.Type == ReferenceEventType.SignupEmailSubmit)); } [Theory] @@ -187,7 +179,6 @@ public class AccountsControllerTests : IDisposable // Assert var noContentResult = Assert.IsType(result); Assert.Equal(204, noContentResult.StatusCode); - await _referenceEventService.Received(1).RaiseEventAsync(Arg.Is(e => e.Type == ReferenceEventType.SignupEmailSubmit)); } [Theory, BitAutoData] @@ -404,12 +395,6 @@ public class AccountsControllerTests : IDisposable // Assert var okResult = Assert.IsType(result); Assert.Equal(200, okResult.StatusCode); - - await _referenceEventService.Received(1).RaiseEventAsync(Arg.Is(e => - e.Type == ReferenceEventType.SignupEmailClicked - && e.EmailVerificationTokenValid == true - && e.UserAlreadyExists == false - )); } [Theory, BitAutoData] @@ -435,12 +420,6 @@ public class AccountsControllerTests : IDisposable // Act & assert await Assert.ThrowsAsync(() => _sut.PostRegisterVerificationEmailClicked(requestModel)); - - await _referenceEventService.Received(1).RaiseEventAsync(Arg.Is(e => - e.Type == ReferenceEventType.SignupEmailClicked - && e.EmailVerificationTokenValid == false - && e.UserAlreadyExists == false - )); } @@ -467,12 +446,6 @@ public class AccountsControllerTests : IDisposable // Act & assert await Assert.ThrowsAsync(() => _sut.PostRegisterVerificationEmailClicked(requestModel)); - - await _referenceEventService.Received(1).RaiseEventAsync(Arg.Is(e => - e.Type == ReferenceEventType.SignupEmailClicked - && e.EmailVerificationTokenValid == true - && e.UserAlreadyExists == true - )); } private void SetDefaultKdfHmacKey(byte[]? newKey) diff --git a/test/IntegrationTestCommon/Factories/WebApplicationFactoryBase.cs b/test/IntegrationTestCommon/Factories/WebApplicationFactoryBase.cs index 6bf0b5edce..e406915e38 100644 --- a/test/IntegrationTestCommon/Factories/WebApplicationFactoryBase.cs +++ b/test/IntegrationTestCommon/Factories/WebApplicationFactoryBase.cs @@ -4,7 +4,6 @@ using Bit.Core.Platform.Push; using Bit.Core.Platform.Push.Internal; using Bit.Core.Repositories; using Bit.Core.Services; -using Bit.Core.Tools.Services; using Bit.Infrastructure.EntityFramework.Repositories; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc.Testing; @@ -209,9 +208,6 @@ public abstract class WebApplicationFactoryBase : WebApplicationFactory // TODO: Install and use azurite in CI pipeline Replace(services); - // TODO: Install and use azurite in CI pipeline - Replace(services); - // Our Rate limiter works so well that it begins to fail tests unless we carve out // one whitelisted ip. We should still test the rate limiter though and they should change the Ip // to something that is NOT whitelisted