public async Task SendForgotPasswordMail(string email, DaoLangTypes.Type lang) { using (var transaction = Context.Database.BeginTransaction()) { try { var daoUser = await GetUser(email); var emailToken = new DaoEmailToken() { TokenType = DaoEmailToken.Type.Password, ExpirationDate = TimeService.UtcNow.AddDays(1), Token = random.RandomString(40), User = daoUser }; await Context.EmailTokens.AddAsync(emailToken); if (await Context.SaveChangesAsync() != 1) { throw new DatabaseException("token_not_saved"); } var model = new ConfirmationViewModel() { Title = Localizer.GetString(lang, LocalizationResource.EMAIL_FORGOTPSW_SUBJECT), PreHeader = Localizer.GetString(lang, LocalizationResource.EMAIL_FORGOTPSW_PREHEADER), Hero = Localizer.GetString(lang, LocalizationResource.EMAIL_FORGOTPSW_HERO), Greeting = Localizer.GetString(lang, LocalizationResource.EMAIL_CASUAL_BODY_GREETING, daoUser.DisplayName), Intro = Localizer.GetString(lang, LocalizationResource.EMAIL_FORGOTPSW_BODY_INTRO), EmailDisclaimer = Localizer.GetString(lang, LocalizationResource.EMAIL_FORGOTPSW_BODY_DISCLAIMER), Cheers = Localizer.GetString(lang, LocalizationResource.EMAIL_CASUAL_BODY_CHEERS), BadButton = Localizer.GetString(lang, LocalizationResource.EMAIL_FOOTER_BADBUTTON), MShareTeam = Localizer.GetString(lang, LocalizationResource.MSHARE_TEAM), SiteBaseUrl = $"{UriConf.URIForEndUsers}", Button = new EmailButtonViewModel() { Url = $"{UriConf.URIForEndUsers}/api/androidlanding/forgotpassword/{emailToken.Token}", Text = Localizer.GetString(lang, LocalizationResource.EMAIL_FORGOTPSW_BODY_BUTTON) } }; var htmlBody = await Renderer.RenderViewToStringAsync($"/Views/Emails/Confirmation/ConfirmationHtml.cshtml", model); await EmailService.SendMailAsync(MimeKit.Text.TextFormat.Html, daoUser.DisplayName, email, Localizer.GetString(lang, LocalizationResource.EMAIL_FORGOTPSW_SUBJECT), htmlBody); transaction.Commit(); } catch { transaction.Rollback(); // Eat all exceptions, User cannot know if this was successfull only for debug #if DEBUG throw; #endif } } }
/// <summary>Returns a localized string from a language</summary> /// <param name="localizer">Extension's localizer</param> /// <param name="language">Language in which to return the key in</param> /// <param name="name">Name of the key</param> /// <param name="arguments">Arguments for the value</param> public static string GetString(this IStringLocalizer localizer, DaoLangTypes.Type language, string name, params object[] arguments) { return(localizer.WithCulture(new CultureInfo(language.ToString())).GetString(name, arguments)); }