From 2f7c2a64e0837f69cc96d37258c9503dbe6fe534 Mon Sep 17 00:00:00 2001 From: Chad Scharf <3904944+cscharf@users.noreply.github.com> Date: Thu, 25 Feb 2021 13:40:26 -0500 Subject: [PATCH] Reference events for Send (#1165) --- src/Core/Enums/ReferenceEventType.cs | 4 ++++ src/Core/Models/Business/ReferenceEvent.cs | 7 +++++++ .../Services/Implementations/SendService.cs | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/src/Core/Enums/ReferenceEventType.cs b/src/Core/Enums/ReferenceEventType.cs index 25fb19a2df..5609fafb73 100644 --- a/src/Core/Enums/ReferenceEventType.cs +++ b/src/Core/Enums/ReferenceEventType.cs @@ -24,5 +24,9 @@ namespace Bit.Core.Enums InvitedUsers, [EnumMember(Value = "rebilled")] Rebilled, + [EnumMember(Value = "send-created")] + SendCreated, + [EnumMember(Value = "send-accessed")] + SendAccessed, } } diff --git a/src/Core/Models/Business/ReferenceEvent.cs b/src/Core/Models/Business/ReferenceEvent.cs index 14b8de6c5f..b074519e95 100644 --- a/src/Core/Models/Business/ReferenceEvent.cs +++ b/src/Core/Models/Business/ReferenceEvent.cs @@ -45,5 +45,12 @@ namespace Bit.Core.Models.Business public short? Seats { get; set; } public short? Storage { get; set; } + + [JsonConverter(typeof(StringEnumConverter))] + public SendType? SendType { get; set; } + + public int? MaxAccessCount { get; set; } + + public bool? HasPassword { get; set; } } } diff --git a/src/Core/Services/Implementations/SendService.cs b/src/Core/Services/Implementations/SendService.cs index 2959261716..8342c8bf70 100644 --- a/src/Core/Services/Implementations/SendService.cs +++ b/src/Core/Services/Implementations/SendService.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using Bit.Core.Context; using Bit.Core.Enums; using Bit.Core.Exceptions; +using Bit.Core.Models.Business; using Bit.Core.Models.Data; using Bit.Core.Models.Table; using Bit.Core.Repositories; @@ -24,6 +25,7 @@ namespace Bit.Core.Services private readonly ISendFileStorageService _sendFileStorageService; private readonly IPasswordHasher _passwordHasher; private readonly IPushNotificationService _pushService; + private readonly IReferenceEventService _referenceEventService; private readonly GlobalSettings _globalSettings; private readonly ICurrentContext _currentContext; @@ -35,6 +37,7 @@ namespace Bit.Core.Services ISendFileStorageService sendFileStorageService, IPasswordHasher passwordHasher, IPushNotificationService pushService, + IReferenceEventService referenceEventService, GlobalSettings globalSettings, IPolicyRepository policyRepository, ICurrentContext currentContext) @@ -47,6 +50,7 @@ namespace Bit.Core.Services _sendFileStorageService = sendFileStorageService; _passwordHasher = passwordHasher; _pushService = pushService; + _referenceEventService = referenceEventService; _globalSettings = globalSettings; _currentContext = currentContext; } @@ -60,6 +64,7 @@ namespace Bit.Core.Services { await _sendRepository.CreateAsync(send); await _pushService.PushSyncSendCreateAsync(send); + await RaiseReferenceEventAsync(send, ReferenceEventType.SendCreated); } else { @@ -178,9 +183,23 @@ namespace Bit.Core.Services // TODO: maybe move this to a simple ++ sproc? send.AccessCount++; await _sendRepository.ReplaceAsync(send); + await RaiseReferenceEventAsync(send, ReferenceEventType.SendAccessed); return (send, false, false); } + private async Task RaiseReferenceEventAsync(Send send, ReferenceEventType eventType) + { + await _referenceEventService.RaiseEventAsync(new ReferenceEvent + { + Id = send.UserId ?? default, + Type = eventType, + Source = ReferenceEventSource.User, + SendType = send.Type, + MaxAccessCount = send.MaxAccessCount, + HasPassword = !string.IsNullOrWhiteSpace(send.Password), + }); + } + public string HashPassword(string password) { return _passwordHasher.HashPassword(new User(), password);