1
0
mirror of https://github.com/bitwarden/server.git synced 2025-07-04 01:22:50 -05:00

Update emails

This commit is contained in:
Justin Baur
2021-11-15 14:34:12 -05:00
parent 85225790d6
commit afa53fcccd
19 changed files with 90 additions and 46 deletions

View File

@ -757,35 +757,39 @@ namespace Bit.Core.Services
await _mailDeliveryService.SendEmailAsync(message);
}
public async Task SendFamiliesForEnterpriseOfferEmailAsync(string email, string organizationName, string token)
public async Task SendFamiliesForEnterpriseOfferEmailAsync(string email, string sponsorEmail, bool existingAccount, string token)
{
var message = CreateDefaultMessage("Free Bitwarden Family Plan Offer", email);
var message = CreateDefaultMessage("Finish Activation - Your Free Families Subscription", email);
var model = new FamiliesForEnterpriseOfferViewModel
{
SponsorEmail = sponsorEmail,
WebVaultUrl = _globalSettings.BaseServiceUri.VaultWithHash,
SiteName = _globalSettings.SiteName,
SponsorshipToken = token,
};
await AddMessageContentAsync(message, "FamiliesForEnterprise.FamiliesForEnterpriseOffer", model);
await AddMessageContentAsync(message, existingAccount
? "FamiliesForEnterprise.FamiliesForEnterpriseOfferExistingAccount"
: "FamiliesForEnterprise.FamiliesForEnterpriseOfferNewAccount", model);
message.Category = "FamiliesForEnterpriseOffer";
await _mailDeliveryService.SendEmailAsync(message);
}
public async Task SendFamiliesForEnterpriseRedeemedEmailsAsync(string familyUserEmail, string sponsorEmail, string sponsorOrgName)
public async Task SendFamiliesForEnterpriseRedeemedEmailsAsync(string familyUserEmail, string sponsorEmail)
{
// Email family user
await SendFamiliesForEnterpriseInviteRedeemedToFamilyUserEmailAsync(familyUserEmail);
// Email enterprise org user
await SendFamiliesForEnterpriseInviteRedeemedToOrgUserEmailAsync(sponsorEmail, sponsorOrgName);
await SendFamiliesForEnterpriseInviteRedeemedToOrgUserEmailAsync(sponsorEmail);
}
private async Task SendFamiliesForEnterpriseInviteRedeemedToFamilyUserEmailAsync(string email)
{
// TODO: Complete emails
var message = CreateDefaultMessage("You Have Redeemed A Family Organization Sponsorship", email);
var message = CreateDefaultMessage("Success! Families Subscription Activated", email);
var model = new FamiliesForEnterpriseRedeemedToFamilyUserViewModel
{
@ -795,13 +799,13 @@ namespace Bit.Core.Services
await _mailDeliveryService.SendEmailAsync(message);
}
private async Task SendFamiliesForEnterpriseInviteRedeemedToOrgUserEmailAsync(string email, string organizationName)
private async Task SendFamiliesForEnterpriseInviteRedeemedToOrgUserEmailAsync(string email)
{
// TODO: Complete emails
var message = CreateDefaultMessage("A User Has Redeemeed Your Sponsorship", email);
var message = CreateDefaultMessage("Success! Families Subscription Activated", email);
var model = new FamiliesForEnterpriseRedeemedToOrgUserViewModel
{
OrganizationName = CoreHelpers.SanitizeForEmail(organizationName, false),
};
await AddMessageContentAsync(message, "FamiliesForEnterprise.FamiliesForEnterpriseRedeemedToOrgUser", model);
message.Category = "FamilyForEnterpriseRedeemedToOrgUser";
@ -814,7 +818,7 @@ namespace Bit.Core.Services
var message = CreateDefaultMessage("Your Sponsorship Requires Reconfirmation", email);
var model = new FamiliesForEnterpriseReconfirmationRequiredViewModel
{
};
await AddMessageContentAsync(message, "FamiliesForEnterprise.FamiliesForEnterpriseReconfirmationRequired", model);
message.Category = "FamiliesForEnterpriseReconfirmationRequired";
@ -823,7 +827,6 @@ namespace Bit.Core.Services
public async Task SendFamiliesForEnterpriseSponsorshipRevertingEmailAsync(string email, string familyOrgName)
{
// TODO: Complete emails
var message = CreateDefaultMessage($"{familyOrgName} Organization Sponsorship Is No Longer Valid", email);
var model = new FamiliesForEnterpriseSponsorshipRevertingViewModel
{
@ -834,13 +837,14 @@ namespace Bit.Core.Services
await _mailDeliveryService.SendEmailAsync(message);
}
public async Task SendFamiliesForEnterpriseSponsorshipEndingEmailAsync(string email)
public async Task SendFamiliesForEnterpriseSponsorshipEndingEmailAsync(string email, DateTime sponsorshipEndDate)
{
// TODO: Complete emails
var message = CreateDefaultMessage("A Family Organization Sponsorship Is Ending", email);
var endsInTime = DateTime.UtcNow - sponsorshipEndDate;
var message = CreateDefaultMessage("Action Required: Renew Families Subscription", email);
var model = new FamiliesForEnterpriseSponsorshipEndingViewModel
{
DaysLeft = (int)endsInTime.TotalDays,
};
await AddMessageContentAsync(message, "FamiliesForEnterprise.FamiliesForEnterpriseSponsorshipEnding", model);
message.Category = "FamiliesForEnterpriseSponsorshipEnding";

View File

@ -15,6 +15,7 @@ namespace Bit.Core.Services
private readonly IOrganizationSponsorshipRepository _organizationSponsorshipRepository;
private readonly IOrganizationRepository _organizationRepository;
private readonly IUserRepository _userRepository;
private readonly IPaymentService _paymentService;
private readonly IMailService _mailService;
@ -22,12 +23,14 @@ namespace Bit.Core.Services
public OrganizationSponsorshipService(IOrganizationSponsorshipRepository organizationSponsorshipRepository,
IOrganizationRepository organizationRepository,
IUserRepository userRepository,
IPaymentService paymentService,
IMailService mailService,
IDataProtectionProvider dataProtectionProvider)
{
_organizationSponsorshipRepository = organizationSponsorshipRepository;
_organizationRepository = organizationRepository;
_userRepository = userRepository;
_paymentService = paymentService;
_mailService = mailService;
_dataProtector = dataProtectionProvider.CreateProtector("OrganizationSponsorshipServiceDataProtector");
@ -105,8 +108,11 @@ namespace Bit.Core.Services
public async Task SendSponsorshipOfferAsync(Organization sponsoringOrg, OrganizationSponsorship sponsorship)
{
var user = await _userRepository.GetByEmailAsync(sponsorship.OfferedToEmail);
var isExistingAccount = user != null;
await _mailService.SendFamiliesForEnterpriseOfferEmailAsync(sponsorship.OfferedToEmail, sponsoringOrg.Name,
RedemptionToken(sponsorship.Id, sponsorship.PlanSponsorshipType.Value));
isExistingAccount, RedemptionToken(sponsorship.Id, sponsorship.PlanSponsorshipType.Value));
}
public async Task SetUpSponsorshipAsync(OrganizationSponsorship sponsorship, Organization sponsoredOrganization)