public Result <ServiceResponse> ForgotPassword(ForgotPasswordRequest request) { return(this.UseConnection("Default", connection => { request.CheckNotNull(); if (string.IsNullOrEmpty(request.Email)) { throw new ArgumentNullException("email"); } var user = connection.TryFirst <UserRow>(UserRow.Fields.Email == request.Email); if (user == null) { throw new ValidationError("CantFindUserWithEmail", Texts.Validation.CantFindUserWithEmail); } byte[] bytes; using (var ms = new MemoryStream()) using (var bw = new BinaryWriter(ms)) { bw.Write(DateTime.UtcNow.AddHours(3).ToBinary()); bw.Write(user.UserId.Value); bw.Flush(); bytes = ms.ToArray(); } var token = Convert.ToBase64String(MachineKey.Protect(bytes, "ResetPassword")); var externalUrl = Config.Get <EnvironmentSettings>().SiteExternalUrl ?? Request.Url.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/"); var resetLink = UriHelper.Combine(externalUrl, "Account/ResetPassword?t="); resetLink = resetLink + Uri.EscapeDataString(token); var emailModel = new ResetPasswordEmailModel(); emailModel.Username = user.Username; emailModel.DisplayName = user.DisplayName; emailModel.ResetLink = resetLink; var emailSubject = Texts.Forms.Membership.ResetPassword.EmailSubject.ToString(); var emailBody = TemplateHelper.RenderTemplate( MVC.Views.Membership.Account.ResetPassword.AccountResetPasswordEmail, emailModel); Common.EmailHelper.Send(emailSubject, emailBody, user.Email); return new ServiceResponse(); })); }
public async Task <IActionResult> SendResetPassword(string UserName) { var user = await _userService.GetUserByEmail(UserName); var urlAction = new UrlActionContext { Action = "ResetPassword", Controller = "Account", Values = new { email = UserName, code = await _userService.GetResetPasswordCode(user) }, Protocol = Request.Scheme, Host = Request.Host.ToString() }; var resetPasswordEmailModel = new ResetPasswordEmailModel { DisplayName = $"{user.FirstName} {user.LastName}", Email = UserName, ActionUrl = Url.Action(urlAction) }; var emailRenderService = HttpContext.RequestServices.GetService <IEmailTemplateRenderService>(); var emailService = HttpContext.RequestServices.GetService <IEmailService>(); var message = await emailRenderService.RenderTemplate("EmailTemplates/ResetPasswordEmail", resetPasswordEmailModel, Request.Host.ToString()); try { emailService.SendEmail(UserName, "resetowanie hasła w aplikacji Kółko i krzyżyk", message).Wait(); } catch { } return(View("ConfirmResetPasswordRequest", resetPasswordEmailModel)); }
public Result <ServiceResponse> ForgotPassword(ForgotPasswordRequest request) { return(this.UseConnection("Default", connection => { request.CheckNotNull(); if (string.IsNullOrEmpty(request.Email)) { throw new ArgumentNullException("email"); } var user = connection.TryFirst <UserRow>(UserRow.Fields.Email == request.Email); if (user == null) { throw new ValidationError("CantFindUserWithEmail", Texts.Validation.CantFindUserWithEmail); } byte[] bytes; using (var ms = new MemoryStream()) using (var bw = new BinaryWriter(ms)) { bw.Write(DateTime.UtcNow.AddHours(3).ToBinary()); bw.Write(user.UserId.Value); bw.Flush(); bytes = ms.ToArray(); } var token = Convert.ToBase64String(MachineKey.Protect(bytes, "ResetPassword")); var externalUrl = Config.Get <EnvironmentSettings>().SiteExternalUrl ?? Request.Url.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/"); var resetLink = UriHelper.Combine(externalUrl, "Account/ResetPassword?t="); resetLink = resetLink + Uri.EscapeDataString(token); var emailModel = new ResetPasswordEmailModel(); emailModel.Username = user.Username; emailModel.DisplayName = user.DisplayName; emailModel.ResetLink = resetLink; var emailSubject = Texts.Forms.Membership.ResetPassword.EmailSubject.ToString(); var emailBody = TemplateHelper.RenderTemplate( MVC.Views.Membership.Account.ResetPassword.AccountResetPasswordEmail, emailModel); var message = new MailMessage(); message.To.Add(user.Email); message.Subject = emailSubject; message.Body = emailBody; message.IsBodyHtml = true; var client = new SmtpClient(); if (client.DeliveryMethod == SmtpDeliveryMethod.SpecifiedPickupDirectory && string.IsNullOrEmpty(client.PickupDirectoryLocation)) { var pickupPath = Server.MapPath("~/App_Data"); pickupPath = Path.Combine(pickupPath, "Mail"); Directory.CreateDirectory(pickupPath); client.PickupDirectoryLocation = pickupPath; } client.Send(message); return new ServiceResponse(); })); }
public Result<ServiceResponse> ForgotPassword(ForgotPasswordRequest request) { return this.UseConnection("Default", connection => { request.CheckNotNull(); if (string.IsNullOrEmpty(request.Email)) throw new ArgumentNullException("email"); var user = connection.TryFirst<UserRow>(UserRow.Fields.Email == request.Email); if (user == null) throw new ValidationError("CantFindUserWithEmail", Texts.Validation.CantFindUserWithEmail); byte[] bytes; using (var ms = new MemoryStream()) using (var bw = new BinaryWriter(ms)) { bw.Write(DateTime.UtcNow.AddHours(3).ToBinary()); bw.Write(user.UserId.Value); bw.Flush(); bytes = ms.ToArray(); } var token = Convert.ToBase64String(MachineKey.Protect(bytes, "ResetPassword")); var externalUrl = Config.Get<EnvironmentSettings>().SiteExternalUrl ?? Request.Url.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/"); var resetLink = UriHelper.Combine(externalUrl, "Account/ResetPassword?t="); resetLink = resetLink + Uri.EscapeDataString(token); var emailModel = new ResetPasswordEmailModel(); emailModel.Username = user.Username; emailModel.DisplayName = user.DisplayName; emailModel.ResetLink = resetLink; var emailSubject = Texts.Forms.Membership.ResetPassword.EmailSubject.ToString(); var emailBody = TemplateHelper.RenderTemplate( MVC.Views.Membership.Account.ResetPassword.AccountResetPasswordEmail, emailModel); var message = new MailMessage(); message.To.Add(user.Email); message.Subject = emailSubject; message.Body = emailBody; message.IsBodyHtml = true; var client = new SmtpClient(); if (client.DeliveryMethod == SmtpDeliveryMethod.SpecifiedPickupDirectory && string.IsNullOrEmpty(client.PickupDirectoryLocation)) { var pickupPath = Server.MapPath("~/App_Data"); pickupPath = Path.Combine(pickupPath, "Mail"); Directory.CreateDirectory(pickupPath); client.PickupDirectoryLocation = pickupPath; } client.Send(message); return new ServiceResponse(); }); }