From c56dd04096127b6c63727902fd2af1b2b651468a Mon Sep 17 00:00:00 2001 From: Vincent Salucci <26154748+vincentsalucci@users.noreply.github.com> Date: Wed, 26 May 2021 16:54:25 -0500 Subject: [PATCH] [Reset Password] Email template (#1353) --- .../Handlebars/AdminResetPassword.html.hbs | 9 +++++++++ .../Handlebars/AdminResetPassword.text.hbs | 3 +++ src/Core/Models/Mail/AdminResetPasswordViewModel.cs | 8 ++++++++ src/Core/Services/IMailService.cs | 1 + .../Implementations/HandlebarsMailService.cs | 13 +++++++++++++ src/Core/Services/Implementations/UserService.cs | 2 +- .../Services/NoopImplementations/NoopMailService.cs | 5 +++++ 7 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/Core/MailTemplates/Handlebars/AdminResetPassword.html.hbs create mode 100644 src/Core/MailTemplates/Handlebars/AdminResetPassword.text.hbs create mode 100644 src/Core/Models/Mail/AdminResetPasswordViewModel.cs diff --git a/src/Core/MailTemplates/Handlebars/AdminResetPassword.html.hbs b/src/Core/MailTemplates/Handlebars/AdminResetPassword.html.hbs new file mode 100644 index 0000000000..164fe523ea --- /dev/null +++ b/src/Core/MailTemplates/Handlebars/AdminResetPassword.html.hbs @@ -0,0 +1,9 @@ +{{#>FullHtmlLayout}} + + + + +
+ The master password for {{UserName}} has been changed by an administrator in your {{OrgName}} organization. If you did not initiate this request, please reach out to your administrator immediately. +
+{{/FullHtmlLayout}} diff --git a/src/Core/MailTemplates/Handlebars/AdminResetPassword.text.hbs b/src/Core/MailTemplates/Handlebars/AdminResetPassword.text.hbs new file mode 100644 index 0000000000..30e211af4f --- /dev/null +++ b/src/Core/MailTemplates/Handlebars/AdminResetPassword.text.hbs @@ -0,0 +1,3 @@ +{{#>BasicTextLayout}} +The master password for {{UserName}} has been changed by an administrator in your {{OrgName}} organization. If you did not initiate this request, please reach out to your administrator immediately. +{{/BasicTextLayout}} diff --git a/src/Core/Models/Mail/AdminResetPasswordViewModel.cs b/src/Core/Models/Mail/AdminResetPasswordViewModel.cs new file mode 100644 index 0000000000..5f5e859ac2 --- /dev/null +++ b/src/Core/Models/Mail/AdminResetPasswordViewModel.cs @@ -0,0 +1,8 @@ +namespace Bit.Core.Models.Mail +{ + public class AdminResetPasswordViewModel : BaseMailModel + { + public string UserName { get; set; } + public string OrgName { get; set; } + } +} diff --git a/src/Core/Services/IMailService.cs b/src/Core/Services/IMailService.cs index c09eb132fc..00f3b424d7 100644 --- a/src/Core/Services/IMailService.cs +++ b/src/Core/Services/IMailService.cs @@ -40,5 +40,6 @@ namespace Bit.Core.Services Task SendEmergencyAccessRecoveryReminder(EmergencyAccess emergencyAccess, string initiatingName, string email); Task SendEmergencyAccessRecoveryTimedOut(EmergencyAccess ea, string initiatingName, string email); Task SendEnqueuedMailMessageAsync(IMailQueueMessage queueMessage); + Task SendAdminResetPasswordEmailAsync(string email, string userName, string orgName); } } diff --git a/src/Core/Services/Implementations/HandlebarsMailService.cs b/src/Core/Services/Implementations/HandlebarsMailService.cs index 17c2ee7a45..072f350db6 100644 --- a/src/Core/Services/Implementations/HandlebarsMailService.cs +++ b/src/Core/Services/Implementations/HandlebarsMailService.cs @@ -361,6 +361,19 @@ namespace Bit.Core.Services await AddMessageContentAsync(message, queueMessage.TemplateName, queueMessage.Model); await _mailDeliveryService.SendEmailAsync(message); } + + public async Task SendAdminResetPasswordEmailAsync(string email, string userName, string orgName) + { + var message = CreateDefaultMessage("Master Password Has Been Changed", email); + var model = new AdminResetPasswordViewModel() + { + UserName = CoreHelpers.SanitizeForEmail(userName), + OrgName = CoreHelpers.SanitizeForEmail(orgName), + }; + await AddMessageContentAsync(message, "AdminResetPassword", model); + message.Category = "AdminResetPassword"; + await _mailDeliveryService.SendEmailAsync(message); + } private Task EnqueueMailAsync(IMailQueueMessage queueMessage) => _mailEnqueuingService.EnqueueAsync(queueMessage, SendEnqueuedMailMessageAsync); diff --git a/src/Core/Services/Implementations/UserService.cs b/src/Core/Services/Implementations/UserService.cs index c070849236..54deb5756d 100644 --- a/src/Core/Services/Implementations/UserService.cs +++ b/src/Core/Services/Implementations/UserService.cs @@ -689,7 +689,7 @@ namespace Bit.Core.Services user.Key = key; await _userRepository.ReplaceAsync(user); - // TODO Reset Password - Send email alerting user of changed password + await _mailService.SendAdminResetPasswordEmailAsync(user.Email, user.Name ?? user.Email, org.Name); await _eventService.LogOrganizationUserEventAsync(orgUser, EventType.OrganizationUser_AdminResetPassword); await _pushService.PushLogOutAsync(user.Id); diff --git a/src/Core/Services/NoopImplementations/NoopMailService.cs b/src/Core/Services/NoopImplementations/NoopMailService.cs index 29bef48922..a7bd0b28a8 100644 --- a/src/Core/Services/NoopImplementations/NoopMailService.cs +++ b/src/Core/Services/NoopImplementations/NoopMailService.cs @@ -158,5 +158,10 @@ namespace Bit.Core.Services { return Task.FromResult(0); } + + public Task SendAdminResetPasswordEmailAsync(string email, string userName, string orgName) + { + return Task.FromResult(0); + } } }