diff --git a/src/Core/Models/Data/EmergencyAccessNotify.cs b/src/Core/Models/Data/EmergencyAccessNotify.cs index 179137703..6bfb13795 100644 --- a/src/Core/Models/Data/EmergencyAccessNotify.cs +++ b/src/Core/Models/Data/EmergencyAccessNotify.cs @@ -10,5 +10,6 @@ namespace Bit.Core.Models.Data { public string GrantorEmail { get; set; } public string GranteeName { get; set; } + public string GranteeEmail { get; set; } } } diff --git a/src/Core/Services/Implementations/EmergencyAccessService.cs b/src/Core/Services/Implementations/EmergencyAccessService.cs index 07682842d..efcd86a6e 100644 --- a/src/Core/Services/Implementations/EmergencyAccessService.cs +++ b/src/Core/Services/Implementations/EmergencyAccessService.cs @@ -313,8 +313,10 @@ namespace Bit.Core.Services var ea = notify.ToEmergencyAccess(); ea.LastNotificationDate = DateTime.UtcNow; await _emergencyAccessRepository.ReplaceAsync(ea); - - await _mailService.SendEmergencyAccessRecoveryReminder(ea, notify.GranteeName, notify.GrantorEmail); + + var granteeNameOrEmail = string.IsNullOrWhiteSpace(notify.GranteeName) ? notify.GranteeEmail : notify.GranteeName; + + await _mailService.SendEmergencyAccessRecoveryReminder(ea, granteeNameOrEmail, notify.GrantorEmail); } } @@ -327,9 +329,12 @@ namespace Bit.Core.Services var ea = details.ToEmergencyAccess(); ea.Status = EmergencyAccessStatusType.RecoveryApproved; await _emergencyAccessRepository.ReplaceAsync(ea); - - await _mailService.SendEmergencyAccessRecoveryApproved(ea, details.GrantorName, details.GranteeEmail); - await _mailService.SendEmergencyAccessRecoveryTimedOut(ea, details.GranteeName, details.GrantorEmail); + + var grantorNameOrEmail = string.IsNullOrWhiteSpace(details.GrantorName) ? details.GrantorEmail : details.GrantorName; + var granteeNameOrEmail = string.IsNullOrWhiteSpace(details.GranteeName) ? details.GranteeEmail : details.GranteeName; + + await _mailService.SendEmergencyAccessRecoveryApproved(ea, grantorNameOrEmail, details.GranteeEmail); + await _mailService.SendEmergencyAccessRecoveryTimedOut(ea, granteeNameOrEmail, details.GrantorEmail); } } diff --git a/src/Sql/dbo/Stored Procedures/EmergencyAccess_ReadToNotify.sql b/src/Sql/dbo/Stored Procedures/EmergencyAccess_ReadToNotify.sql index 195257d09..320773c95 100644 --- a/src/Sql/dbo/Stored Procedures/EmergencyAccess_ReadToNotify.sql +++ b/src/Sql/dbo/Stored Procedures/EmergencyAccess_ReadToNotify.sql @@ -6,6 +6,7 @@ BEGIN SELECT EA.*, Grantee.Name as GranteeName, + Grantee.Email as GranteeEmail, Grantor.Email as GrantorEmail FROM [dbo].[EmergencyAccess] EA diff --git a/util/Migrator/DbScripts/2021_02_26_00_EmergencyAcess_ReadToNotify.sql b/util/Migrator/DbScripts/2021_02_26_00_EmergencyAcess_ReadToNotify.sql new file mode 100644 index 000000000..15bc47175 --- /dev/null +++ b/util/Migrator/DbScripts/2021_02_26_00_EmergencyAcess_ReadToNotify.sql @@ -0,0 +1,30 @@ +IF OBJECT_ID('[dbo].[EmergencyAccess_ReadToNotify]') IS NOT NULL +BEGIN + DROP PROCEDURE [dbo].[EmergencyAccess_ReadToNotify] +END +GO + +CREATE PROCEDURE [dbo].[EmergencyAccess_ReadToNotify] +AS +BEGIN + SET NOCOUNT ON + + SELECT + EA.*, + Grantee.Name as GranteeName, + Grantee.Email as GranteeEmail, + Grantor.Email as GrantorEmail + FROM + [dbo].[EmergencyAccess] EA + LEFT JOIN + [dbo].[User] Grantor ON Grantor.[Id] = EA.[GrantorId] + LEFT JOIN + [dbo].[User] Grantee On Grantee.[Id] = EA.[GranteeId] + WHERE + EA.[Status] = 3 + AND + DATEADD(DAY, EA.[WaitTimeDays] - 1, EA.[RecoveryInitiatedDate]) <= GETUTCDATE() + AND + DATEADD(DAY, 1, EA.[LastNotificationDate]) <= GETUTCDATE() +END +GO