Ejemplo n.º 1
0
        public async Task <ActionResult> ResetPassword(string password, string confirmPassword, string payload)
        {
            if (password != confirmPassword)
            {
                ViewData["error"] = "Detta lösenord stämmer inte överens med det första du angav.";
            }

            if (!_userManager.IsUserPasswordValid(password))
            {
                ViewData["error"] = "Lösenordet är inte av rätt typ. Se krav för nytt lösenord.";
            }

            if (ViewData["error"] != null)
            {
                ViewData["payload"] = payload;
                return(PageView("Reset password"));
            }

            payload = payload?.Replace(' ', '+');
            try
            {
                var data = _tokenGenerator.Decrypt <ResetPasswordConfirmationData>(payload);
                //check if the guid is still valid
                var checkGuidResult = await _securityRepo.CheckPasswordGuidAsync(data.UserName, data.GuidString);

                if (!checkGuidResult)
                {
                    return(new HttpStatusCodeResult(400));
                }

                //activate user
                await _userManager.ActivateAccount(data.UserName);

                //reset now
                await _securityRepo.ChangePasswordAsync(data.UserName, password);
            }
            //pretend these security error didn't happen
            catch (CryptographicException) { }
            catch (ArgumentException) { }
            catch (FaultException ex) when(ex.Message.Contains("The new password cannot be the same"))
            {
                ViewData["error"] = "Lösenordet är inte av rätt typ. Se krav för nytt lösenord.";
                return(PageView("Reset password"));
            }

            // return success anyway
            return(View("~/Views/Login/ResetPasswordSuccessful.cshtml", StartPageViewModel));
        }