private async Task SendResetPasswordEmailAsync(User user, EmailPurposeEnum emailPurpose) { var resetPasswordToken = await _tokenProviderService.GeneratePasswordResetTokenAsync(user); var callbackUrl = UrlHelperExtensions.ApiCallbackLink(_authApiUrlConfiguration.ResetPasswordUrl, resetPasswordToken); string baseEmailTemplate; switch (emailPurpose) { case EmailPurposeEnum.ResetPassword: baseEmailTemplate = _emailTemplateProvider.GetBaseTemplateHtml(); var resetPasswordEmailTemplate = _emailTemplateProvider.GetTemplateHtml( _emailTemplatesConfiguration.ResetPasswordEmailTemplateName); await _emailService.SendNotificationAsync(new ResetPasswordEmailNotification( new ResetPasswordEmailModel(callbackUrl, user.Email), new RecipientDto(user.Email, user.UserName), baseEmailTemplate, resetPasswordEmailTemplate)); break; case EmailPurposeEnum.PasswordExpiration: baseEmailTemplate = _emailTemplateProvider.GetBaseTemplateHtml(); var passwordHasExpiredEmailTemplate = _emailTemplateProvider.GetTemplateHtml( _emailTemplatesConfiguration.PasswordHasExpiredEmailTemplateName); if (!user.LastPasswordExpiredEmailSentDate.HasValue || user.LastPasswordExpiredEmailSentDate.Value.AddMinutes(_passwordConfiguration .TokenLifeTimeInMinutes) <= DateTimeOffset.UtcNow) { await _emailService.SendNotificationAsync(new PasswordHasExpiredEmailNotification( new PasswordHasExpiredEmailModel(callbackUrl, user.Email), new RecipientDto(user.Email, user.UserName), baseEmailTemplate, passwordHasExpiredEmailTemplate)); await UpdateLastPasswordExpiredEmailSentDateAsync(user.Id); } break; default: throw new ArgumentOutOfRangeException(nameof(emailPurpose), emailPurpose, UnsupportedEmailPurposeException); } }
public async Task SendResetPasswordEmailAsync(string userId, EmailPurposeEnum emailPurpose) { var user = await _userDomainService.GetUserByIdAsync(userId); await SendResetPasswordEmailAsync(user, emailPurpose); }