Beispiel #1
0
        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));
 }