コード例 #1
0
        public void ResetPassword_Fails()
        {
            // Arrange
            var passwordForResetDto = new PasswordForResetDto()
            {
                Token    = "randomtoken",
                Email    = "*****@*****.**",
                Password = "******"
            };
            var user = new User()
            {
                UserName = "******",
                Id       = 1
            };

            _repoMock.Setup(x => x.GetUser(passwordForResetDto.Email)).ReturnsAsync(user);

            _mockUserManager.Setup(x => x.ResetPasswordAsync(user, It.IsAny <string>(), passwordForResetDto.Password)).Returns(Task.FromResult(IdentityResult.Failed())).Verifiable();

            // Act
            var result = _emailService.ResetPasswordAsync(passwordForResetDto).Result;

            // Assert
            var okResult = Assert.IsType <UserManagerResponse>(result);

            Assert.False(okResult.IsSuccess);
            Assert.Equal("Something went wrong", okResult.Message);
        }
コード例 #2
0
        public async Task <IActionResult> ResetPasswordWhileLoggedIn(PasswordForResetDto passwordForReset)
        {
            string userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;
            var    user   = await _userManager.FindByIdAsync(userId);

            if (passwordForReset.Password != passwordForReset.ConfirmPassword)
            {
                return(BadRequest("Passwords must be the same"));
            }
            if (await _userManager.CheckPasswordAsync(user, passwordForReset.OldPassword) == false)
            {
                return(BadRequest("Old password does not match"));
            }
            var token = await _userManager.GeneratePasswordResetTokenAsync(user);

            var result = await _userManager.ResetPasswordAsync(user, token, passwordForReset.Password);

            if (result.Succeeded)
            {
                _logger.LogInfo(user.Id, $"Passwor has been changed for user: {user.UserName}");
                return(Ok(new { message = "Password has been changed" }));
            }
            _logger.LogWarning(user.Id, $"Error occured during passoword reset for user: {user.UserName}");
            return(BadRequest("Something went wrong"));
        }
コード例 #3
0
        public void ResetPassword_Success_ReturnsOk()
        {
            var userId = 2;
            var passwordForResetDto = new PasswordForResetDto
            {
                Token    = It.IsAny <string>(),
                Email    = "*****@*****.**",
                Password = "******",
            };
            var response = new UserManagerResponse
            {
                IsSuccess = true,
                Message   = "Password reset was successful"
            };
            var userFromRepo = FakeUsers().SingleOrDefault(x => x.Id == userId);

            _mockEmailService.Setup(x => x.ResetPasswordAsync(passwordForResetDto)).ReturnsAsync(response);

            _recipeRepoMock.Setup(x => x.GetUser(passwordForResetDto.Email)).ReturnsAsync(userFromRepo);

            var result = _authController.ResetPassword(passwordForResetDto).Result;

            var okResult = Assert.IsType <OkObjectResult>(result);
            // Assert.Equal(response, okResult.Value);
        }
コード例 #4
0
        public async Task <IActionResult> ResetPassword(PasswordForResetDto passwordForResetDto)
        {
            var result = await _emailService.ResetPasswordAsync(passwordForResetDto);

            var user = await _recipeRepo.GetUser(passwordForResetDto.Email);

            if (result.IsSuccess)
            {
                return(Ok(new {
                    token = GenerateJwtToken(user)
                }));
            }

            return(BadRequest(result));
        }
コード例 #5
0
        public async Task <IActionResult> ResetPassword(PasswordForResetDto passwordForReset)
        {
            if (passwordForReset.Password != passwordForReset.ConfirmPassword)
            {
                return(BadRequest("Passwords must be the same"));
            }
            var user = await _userManager.FindByNameAsync(passwordForReset.UserName);

            var result = await _userManager.ResetPasswordAsync(user, passwordForReset.Token, passwordForReset.Password);

            if (result.Succeeded)
            {
                _logger.LogInfo(user.Id, $"Passwor has been changed for user: {user.UserName}");
                return(Ok(new { message = "Password has been changed" }));
            }
            _logger.LogWarning(user.Id, $"Password reset failed for user {user.UserName}");
            return(BadRequest("Reset password failed"));
        }
コード例 #6
0
        public void ResetPassword_User_Null()
        {
            // Arrange
            var passwordForResetDto = new PasswordForResetDto()
            {
                Token    = "randomtoken",
                Email    = "*****@*****.**",
                Password = "******"
            };

            // Act
            var result = _emailService.ResetPasswordAsync(passwordForResetDto).Result;

            // Assert
            var okResult = Assert.IsType <UserManagerResponse>(result);

            Assert.False(okResult.IsSuccess);
            Assert.Equal("No user associated with this email", okResult.Message);
        }
コード例 #7
0
        public void ResetPassWord_Fails_ReturnsBadRequest()
        {
            var passwordForResetDto = new PasswordForResetDto
            {
                Token    = It.IsAny <string>(),
                Email    = "*****@*****.**",
                Password = "******",
            };
            var response = new UserManagerResponse
            {
                IsSuccess = false,
                Message   = "Password reset failed"
            };

            _mockEmailService.Setup(x => x.ResetPasswordAsync(passwordForResetDto)).ReturnsAsync(response);

            var result = _authController.ResetPassword(passwordForResetDto).Result;

            var okResult = Assert.IsType <BadRequestObjectResult>(result);

            Assert.Equal(response, okResult.Value);
        }
コード例 #8
0
        public async Task <UserManagerResponse> ResetPasswordAsync(PasswordForResetDto passwordForResetDto)
        {
            var user = await _recipeRepo.GetUser(passwordForResetDto.Email);

            if (user == null)
            {
                return new UserManagerResponse
                       {
                           IsSuccess = false,
                           Message   = "No user associated with this email"
                       }
            }
            ;



            var    decodedToken = WebEncoders.Base64UrlDecode(passwordForResetDto.Token);
            string normalToken  = Encoding.UTF8.GetString(decodedToken);

            var result = await _userManager.ResetPasswordAsync(user, normalToken, passwordForResetDto.Password);

            if (result.Succeeded)
            {
                return new UserManagerResponse
                       {
                           IsSuccess = true,
                           Message   = "Password has been reset successfully"
                       }
            }
            ;

            return(new UserManagerResponse
            {
                IsSuccess = false,
                Message = "Something went wrong",
                Errors = result.Errors.Select(e => e.Description)
            });
        }