示例#1
0
        public async Task <ActionResult> RecoverPasswordPost(RecoverViewModel recoverVm)
        {
            if (ModelState.IsValid)
            {
                var user = await _userManager.FindByEmailAsync(recoverVm.Email);

                if (user == null || !(await UserManager.IsEmailConfirmedAsync(user.Id)))
                {
                    ModelState.AddModelError("email", "Email này chưa được đăng ký!");
                    return(View("RecoverPassword", recoverVm));
                }

                var newPassword = "******";
                user.PasswordHash = _userManager.PasswordHasher.HashPassword(newPassword);
                await _userManager.UpdateAsync(user);

                ViewData["SuccessMsg"] = "Lấy lại mật khẩu thành công!";

                // send response mail
                string mailContent = System.IO.File.ReadAllText(Server.MapPath("/Assets/client/template/recoverPassword.html"));
                mailContent = mailContent.Replace("{{Link}}", ConfigHelper.GetByKey("CurrentLink") + "dang-nhap.html");
                mailContent = mailContent.Replace("{{Username}}", user.UserName);
                mailContent = mailContent.Replace("{{Password}}", newPassword);

                var    toEmail     = user.Email;
                string mailSubject = "Lấy lại mật khẩu tại hulasports.com";
                MailHelper.SendMail(toEmail, mailSubject, mailContent);
            }
            return(View("RecoverPassword", recoverVm));
        }
示例#2
0
        public ActionResult Recover(RecoverViewModel viewModel)
        {
            if (string.IsNullOrWhiteSpace(viewModel.Email))
            {
                TempData[RecoverValidationSummaryKey] = T("You did not provide a valid email.").ToString();
            }
            else
            {
                if (_userService.VerifyUserUnicity(viewModel.Email, viewModel.Email))
                {
                    TempData[RecoverValidationSummaryKey] = T("Oops, this email address is not registered!").ToString();
                }
                else
                {
                    var siteUrl = _workContextAccessor.GetContext().HttpContext.Request.Url;
                    _userService.SendLostPasswordEmail(viewModel.Email, nonce =>
                                                       new Uri(siteUrl, Url.Action("ResetPassword", "Account", new { area = "Teeyoot.Account", nonce = HttpUtility.UrlEncode(nonce) }))
                                                       .ToString());

                    TempData[RecoverEmailSentKey] = true;
                }
            }

            return(this.RedirectLocal("~/Recover"));
        }
        public ActionResult Forgot(RecoverViewModel recoverModel)
        {
            var u = m.GetUserByEmail(recoverModel.userEmail);

            if (u == null)
            {
                ModelState.AddModelError("", "Invalid Email: No account found with the specified email");
                return(View());
            }

            recoverModel.banUser        = u.banUser;
            recoverModel.email_Verified = u.email_Verified;
            recoverModel.userName       = u.userName;

            bool error = m.RecoverUser(recoverModel);

            if (!error)
            {
                ViewBag.success = "An email has been sent to the specified email, provided it was used to make a Cooking Curator Account";
                u.GUID          = recoverModel.GUID;
                return(View());
            }
            else
            {
                //Account is banned or email was never verified
                ModelState.AddModelError("", "You cannot recover this account, either your email isn't verified or you are banned");
                return(View());
            }
        }
示例#4
0
        public ActionResult Recover()
        {
            var model = new RecoverViewModel
            {
                HasRecaptcha = _configuration.HasRecaptcha
            };

            return(View("Recover", model));
        }
示例#5
0
        public async Task <ActionResult> RecoverAsync(RecoverViewModel model)
        {
            var requester = UserIdentity.GetRequester(this);
            var userName  = model.UserName;

            AppSensor.ValidateFormData(this, new List <string> {
                "UserName"
            });
            if (ModelState.IsValid)
            {
                var user = _context.User.SingleOrDefault(u =>
                                                         u.UserName == model.UserName && u.Enabled && u.EmailVerified && u.Approved);
                if (_configuration.HasRecaptcha)
                {
                    if (!_recaptcha.ValidateRecaptcha(this))
                    {
                        Logger.Information("Failed Account Recover Post Recaptcha failed by requester {@requester}",
                                           requester);
                        return(View("Recover", model));
                    }
                }

                if (user != null)
                {
                    user.PasswordResetToken         = Guid.NewGuid().ToString().Replace("-", "");
                    user.PasswordResetExpiryDateUtc = DateTime.UtcNow.AddMinutes(15);
                    // Send recovery email with link to recover password form
                    var emailBody = EmailTemplates.ChangePasswordPendingBodyText(user.FirstName, user.LastName,
                                                                                 _configuration.ApplicationName, _configuration.WebsiteBaseUrl, user.PasswordResetToken);
                    var emailSubject = $"{_configuration.ApplicationName} - Complete the password recovery process";
                    _services.SendEmail(_configuration.DefaultFromEmailAddress, new List <string> {
                        user.UserName
                    }, null,
                                        null, emailSubject, emailBody, true);
                    user.UserLogs.Add(new UserLog {
                        Description = "Password reset link generated and sent"
                    });
                    await _context.SaveChangesAsync();
                }
                else
                {
                    Logger.Information("Failed Account Recover Post UserName {userName} by requester {@requester}",
                                       userName, requester);
                    return(View("RecoverSuccess"));
                }
            }
            else
            {
                AppSensor.InspectModelStateErrors(this);
            }

            return(View("RecoverSuccess"));
        }
示例#6
0
        public ActionResult Recover()
        {
            var viewModel = new RecoverViewModel();

            if (TempData[RecoverValidationSummaryKey] != null)
            {
                viewModel.RecoverFailed       = true;
                viewModel.RecoverIssueSummary = (string)TempData[RecoverValidationSummaryKey];
            }

            if (TempData[RecoverEmailSentKey] != null)
            {
                viewModel.RecoverEmailSent = (bool)TempData[RecoverEmailSentKey];
            }

            return(View(viewModel));
        }
        public async Task Given_ValidSubmissionData_When_RecoverPost_Then_SavesEmailsAndSuccessViewReturned()
        {
            // Arrange
            RecoverViewModel model = new RecoverViewModel
            {
                UserName = TestUserName
            };

            _recaptcha.Expect(a => a.ValidateRecaptcha(Arg <Controller> .Is.Anything)).Return(true);

            // Act
            var result = await _sut.RecoverAsync(model);

            // Assert
            AssertViewResultReturned(result, "RecoverSuccess");
            _services.AssertWasCalled(a => a.SendEmail(Arg <string> .Is.Anything, Arg <List <string> > .Is.Anything, Arg <List <string> > .Is.Anything,
                                                       Arg <List <string> > .Is.Anything, Arg <string> .Is.Anything, Arg <string> .Is.Anything, Arg <bool> .Is.Anything));
            Context.AssertWasCalled(a => a.SaveChangesAsync());
        }
        public ActionResult Reset(RecoverViewModel resetModel, String id)
        {
            //Take the GUID from the URL
            resetModel.GUID = id;

            //Passwords must match
            if (resetModel.confirmPassword != resetModel.password)
            {
                ModelState.AddModelError("", "Error: The passwords you entered do not match.");
                return(View());
            }

            //Check for special characters
            Regex r = new Regex("^[a-zA-Z0-9_]*$");

            if (!r.IsMatch(resetModel.password))
            {
                ModelState.AddModelError("", "Error: Do not use special characters, only alphanumeric values.");
                return(View());
            }

            if (resetModel.password.Length < 8)
            {
                ModelState.AddModelError("", "Error: Password must be at least 8 characters.");
                return(View());
            }

            bool changeSuccess = m.ChangePW(resetModel);

            //Database updated successfully or not
            if (changeSuccess)
            {
                return(RedirectToAction("Index"));
            }
            else
            {
                ModelState.AddModelError("", "Error: An unknown error occured.");
                return(View());
            }
        }
示例#9
0
 //Recover Password
 public ActionResult RecoverPassword(RecoverViewModel recoverVm)
 {
     return(View(recoverVm));
 }