1
0
mirror of https://github.com/bitwarden/server synced 2025-12-15 07:43:54 +00:00

Added conditional subject and button text to invite email. (#6304)

* Added conditional subject and button text to invite email.

* Added feature flag.
This commit is contained in:
Jared McCannon
2025-09-12 10:41:53 -05:00
committed by GitHub
parent 7eb5035d94
commit 18aed0bd79
7 changed files with 88 additions and 14 deletions

View File

@@ -351,21 +351,43 @@ public class HandlebarsMailService : IMailService
public async Task SendOrganizationInviteEmailsAsync(OrganizationInvitesInfo orgInvitesInfo)
{
MailQueueMessage CreateMessage(string email, object model)
{
var message = CreateDefaultMessage($"Join {orgInvitesInfo.OrganizationName}", email);
return new MailQueueMessage(message, "OrganizationUserInvited", model);
}
var messageModels = orgInvitesInfo.OrgUserTokenPairs.Select(orgUserTokenPair =>
{
Debug.Assert(orgUserTokenPair.OrgUser.Email is not null);
var orgUserInviteViewModel = OrganizationUserInvitedViewModel.CreateFromInviteInfo(
orgInvitesInfo, orgUserTokenPair.OrgUser, orgUserTokenPair.Token, _globalSettings);
var orgUserInviteViewModel = orgInvitesInfo.IsSubjectFeatureEnabled
? OrganizationUserInvitedViewModel.CreateFromInviteInfo_v2(
orgInvitesInfo, orgUserTokenPair.OrgUser, orgUserTokenPair.Token, _globalSettings)
: OrganizationUserInvitedViewModel.CreateFromInviteInfo(orgInvitesInfo, orgUserTokenPair.OrgUser,
orgUserTokenPair.Token, _globalSettings);
return CreateMessage(orgUserTokenPair.OrgUser.Email, orgUserInviteViewModel);
});
await EnqueueMailAsync(messageModels);
return;
MailQueueMessage CreateMessage(string email, OrganizationUserInvitedViewModel model)
{
var subject = $"Join {model.OrganizationName}";
if (orgInvitesInfo.IsSubjectFeatureEnabled)
{
ArgumentNullException.ThrowIfNull(model);
subject = model! switch
{
{ IsFreeOrg: true, OrgUserHasExistingUser: true } => "You have been invited to a Bitwarden Organization",
{ IsFreeOrg: true, OrgUserHasExistingUser: false } => "You have been invited to Bitwarden Password Manager",
{ IsFreeOrg: false, OrgUserHasExistingUser: true } => $"{model.OrganizationName} invited you to their Bitwarden organization",
{ IsFreeOrg: false, OrgUserHasExistingUser: false } => $"{model.OrganizationName} set up a Bitwarden account for you"
};
}
var message = CreateDefaultMessage(subject, email);
return new MailQueueMessage(message, "OrganizationUserInvited", model);
}
}
public async Task SendOrganizationUserRevokedForTwoFactorPolicyEmailAsync(string organizationName, string email)