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 } } }
public async Task SendForgotPasswordMail(API.Request.ValidEmail email) { var user = await _context.Users. Include(x => x.EmailTokens). FirstOrDefaultAsync(x => x.Email == email.Email && !x.EmailTokens.Any(y => y.TokenType == DaoEmailToken.Type.Validation)); if (user != null) { using (var transaction = _context.Database.BeginTransaction()){ try{ var emailToken = new DaoEmailToken() { TokenType = DaoEmailToken.Type.Password, ExpirationDate = _timeService.UtcNow.AddDays(1), Token = _random.RandomString(40), User = user }; await _context.EmailTokens.AddAsync(emailToken); if (await _context.SaveChangesAsync() != 1) { throw new Exceptions.DatabaseException("token_not_saved"); } await _emailService.SendMailAsync(MimeKit.Text.TextFormat.Text, user.DisplayName, email.Email, "Elfelejtett jelszó", $"Jelszó megváltoztatásához kattintson ide: {_uriConf.URIForEndUsers}/reset?token={emailToken.Token}"); transaction.Commit(); } catch { transaction.Rollback(); // Eat all exceptions, User cannot know if this was successfull only for debug #if DEBUG throw; #endif } } } else { // Don't handle, user can't know failure #if DEBUG throw new Exceptions.ResourceNotFoundException("user"); #endif } }
public async Task <bool> Register(NewUser newUser) { var existingUser = await _context.Users.FirstOrDefaultAsync(x => x.Email == newUser.Email); if (existingUser != null) { throw new Exceptions.BusinessException("email_taken"); } using (var transaction = _context.Database.BeginTransaction()) { try { var emailToken = new DaoEmailToken() { TokenType = DaoEmailToken.Type.Validation, ExpirationDate = _timeService.UtcNow.AddDays(1), Token = _random.RandomString(40) }; var userToBeInserted = new DaoUser() { DisplayName = newUser.DisplayName, Email = newUser.Email, Password = Hasher.GetHash(newUser.Password), EmailTokens = new DaoEmailToken[] { emailToken } }; await _context.Users.AddAsync(userToBeInserted); if (await _context.SaveChangesAsync() != 2) { throw new Exceptions.DatabaseException("registration_not_saved"); } await _emailService.SendMailAsync(MimeKit.Text.TextFormat.Text, newUser.DisplayName, newUser.Email, "MShare Regisztráció", $"Sikeres regisztráció, az email cím megerősítéséhez kérem kattintson ide: {_uriConf.URIForEndUsers}/account/confirm/{emailToken.Token}"); transaction.Commit(); return(true); } catch { transaction.Rollback(); throw; } } }
public async Task Register(NewUser newUser) { var existingUser = await Context.Users .FirstOrDefaultAsync(x => x.Email == newUser.Email); if (existingUser != null) throw new BusinessException("email_taken"); using (var transaction = Context.Database.BeginTransaction()) { try { var emailToken = new DaoEmailToken() { TokenType = DaoEmailToken.Type.Validation, ExpirationDate = TimeService.UtcNow.AddDays(1), Token = random.RandomString(40) }; var userToBeInserted = new DaoUser() { DisplayName = newUser.DisplayName, Email = newUser.Email, Password = Hasher.GetHash(newUser.Password), EmailTokens = new DaoEmailToken[] { emailToken }, Lang = newUser.Lang }; await Context.Users.AddAsync(userToBeInserted); if (await Context.SaveChangesAsync() != 2) throw new DatabaseException("registration_not_saved"); var model = new ConfirmationViewModel() { Title = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_REGISTER_SUBJECT), PreHeader = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_REGISTER_PREHEADER), Hero = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_REGISTER_HERO), Greeting = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_CASUAL_BODY_GREETING, newUser.DisplayName), Intro = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_REGISTER_BODY_INTRO), EmailDisclaimer = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_REGISTER_BODY_DISCLAIMER), Cheers = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_CASUAL_BODY_CHEERS), BadButton = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_FOOTER_BADBUTTON), MShareTeam = Localizer.GetString(newUser.Lang, LocalizationResource.MSHARE_TEAM), SiteBaseUrl = $"{UriConf.URIForEndUsers}", Button = new EmailButtonViewModel() { Url = $"{UriConf.URIForEndUsers}/api/androidlanding/confirmregistration/{emailToken.Token}", Text = Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_REGISTER_BODY_BUTTON) } }; var htmlBody = await Renderer.RenderViewToStringAsync($"/Views/Emails/Confirmation/ConfirmationHtml.cshtml", model); await EmailService.SendMailAsync(MimeKit.Text.TextFormat.Html, newUser.DisplayName, newUser.Email, Localizer.GetString(newUser.Lang, LocalizationResource.EMAIL_REGISTER_SUBJECT), htmlBody); transaction.Commit(); } catch { transaction.Rollback(); throw; } } }