Esempio n. 1
0
        public async Task <IActionResult> ResetPassword([FromForm] UserPasswordResetDto passwordResetDetails)
        {
            if (passwordResetDetails == null)
            {
                throw new ArgumentNullException(nameof(passwordResetDetails));
            }

            var result = await _userAdminSvc.ResetPasswordAsync(passwordResetDetails);

            string message;

            switch (result)
            {
            case ServiceResultStatusCode.Success:
                message = $"User password successfully updated. \"Username\"={passwordResetDetails.Username}, \"UserId\"={passwordResetDetails.Id}";
                _logger.LogInformation(message + $", \"ServiceResultStatusCode\"={result}");
                Alert(message, AlertType.success);
                return(RedirectToAction("Index"));

            default:
                message = $"An error occurred. Could not update user password. \"Username\"={passwordResetDetails.Username}, \"UserId\"={passwordResetDetails.Id}";
                _logger.LogInformation(message + $", \"ServiceResultStatusCode\"={result}");
                Alert(message, AlertType.danger);
                return(RedirectToAction("Index"));
            }
        }
Esempio n. 2
0
        public IActionResult ResetPassword([FromBody] UserPasswordResetDto model)
        {
            bool passwordsMatch = _userRepo.DoPasswordsMatch(model.Password, model.ConfirmPassword);

            if (!passwordsMatch)
            {
                return(BadRequest(new { message = "Passwords do not match" }));
            }
            var reset = _userRepo.ResetPassword(model.Username, model.Password, model.ConfirmPassword, model.ExistingPassword);

            if (reset == false)
            {
                return(BadRequest(new { message = "Error while resetting password" }));
            }
            return(Ok());
        }
Esempio n. 3
0
        public IActionResult ChangePassword([FromBody] UserPasswordResetDto model)
        {
            var userId = ClaimsReader.GetUserId(Request.HttpContext.Request);
            var user   = context.Users.SingleOrDefault(a => a.Id == userId);

            if (user == null)
            {
                return(NotFound());
            }

            if (!UserValidators.CheckIfPasswordIsCorrect(model.Password))
            {
                return(BadRequest("Hasło musi posiadać wielką i małą literę, liczbę oraz znak specjalny a także składać się co najmniej z 8 znaków"));
            }

            try
            {
                if (!VerifyPasswordHash(model.OldPassword, user.PasswordHash, user.PasswordSalt))
                {
                    return(BadRequest());
                }
            }
            catch (Exception)
            {
                return(BadRequest());
            }

            CreatePasswordHash(model.Password, out byte[] passwordHash, out byte[] passwordSalt);

            user.PasswordHash = passwordHash;
            user.PasswordSalt = passwordSalt;

            try
            {
                context.SaveChanges();
            }
            catch (Exception)
            {
                return(BadRequest());
            }

            return(Ok());
        }
        public void ResetPasswordAsync_UserNotFound_ReturnsServiceResultStatusCodeNotFound()
        {
            var mockDal       = Substitute.For <IUserDal>();
            var mockLogger    = Substitute.For <ILogger <UserAdministrationService> >();
            var mockCryptoSvc = Substitute.For <ICryptographyService>();

            mockDal.GetEntityAsync(1).Returns((User)null);

            var adminSvc = new UserAdministrationService(mockLogger, mockDal, mockCryptoSvc);

            var passwordRequest = new UserPasswordResetDto()
            {
                Id = 1
            };

            var result = adminSvc.ResetPasswordAsync(passwordRequest).GetAwaiter().GetResult();

            Assert.That(result, Is.EqualTo(ServiceResultStatusCode.NotFound));
        }
Esempio n. 5
0
        public async Task <IActionResult> ResetPassword(UserPasswordResetDto userPasswordResetDto)
        {
            TempData["Active"] = "Kullanıcı";
            if (ModelState.IsValid)
            {
                User user = await _userManager.FindByEmailAsync(userPasswordResetDto.Email);

                if (user != null)
                {
                    string resetToken = await _userManager.GeneratePasswordResetTokenAsync(user);

                    MailMessage mail = new MailMessage();
                    mail.IsBodyHtml = true;
                    mail.To.Add(userPasswordResetDto.Email);
                    mail.From       = new MailAddress("*****@*****.**", "Şifre Güncelleme", System.Text.Encoding.UTF8);
                    mail.Subject    = "Şifre Güncelleme Talebi";
                    mail.Body       = $"<a target=\"_blank\" href=\"https://*****:*****@gmail.com", "bitirmeprojesi7bitirmeprojesi7");
                    smp.UseDefaultCredentials = false;
                    smp.Port      = 587;
                    smp.Host      = "smtp.gmail.com";
                    smp.EnableSsl = true;
                    smp.Send(mail);

                    ViewBag.State = true;
                }
                else
                {
                    ViewBag.State = false;

                    return(View());
                }
            }
            else
            {
                return(View(userPasswordResetDto));
            }
            return(View());
        }
        public void ResetPasswordAsync_PasswordUpdateSuccess_ReturnsServiceResultStatusCodeSuccess()
        {
            var mockDal       = Substitute.For <IUserDal>();
            var mockLogger    = Substitute.For <ILogger <UserAdministrationService> >();
            var mockCryptoSvc = Substitute.For <ICryptographyService>();

            var mockJobDescription = new JobDescription()
            {
                Description = "Head Honcho",
                Role        = UserRole.MedicalPractitioner
            };

            var mockEmployeeDetails = new Employee()
            {
                Firstname = "Aoife",
                Lastname  = "McGonagle",
                Title     = Title.Miss,
            };

            var mockUser = new User()
            {
                EmployeeDetails = mockEmployeeDetails,
                Username        = "******",
                JobDescription  = mockJobDescription,
                State           = AccountState.Active
            };

            mockDal.GetEntityAsync(1).Returns(mockUser);
            mockDal.UpdateAsync(Arg.Any <User>()).Returns(mockUser);
            var adminSvc = new UserAdministrationService(mockLogger, mockDal, mockCryptoSvc);

            var passwordRequest = new UserPasswordResetDto()
            {
                Id = 1
            };

            var result = adminSvc.ResetPasswordAsync(passwordRequest).GetAwaiter().GetResult();

            Assert.That(result, Is.EqualTo(ServiceResultStatusCode.Success));
        }
        /// <summary>
        /// Reset the user account password
        /// </summary>
        /// <param name="userPasswordReset"></param>
        /// <returns></returns>
        public async Task <ServiceResultStatusCode> ResetPasswordAsync(UserPasswordResetDto userPasswordReset)
        {
            if (userPasswordReset == null)
            {
                throw new ArgumentNullException(nameof(userPasswordReset));
            }

            var user = await _userDal.GetEntityAsync(userPasswordReset.Id);

            if (user == null)
            {
                return(ServiceResultStatusCode.NotFound);
            }

            // Generate the password hash and salt
            _cryptoSvc.CreateHash(userPasswordReset.Password, out var hashPassword, out var saltPassword);

            // update the user account
            user.PasswordHash = hashPassword;
            user.PasswordSalt = saltPassword;

            return(await _userDal.UpdateAsync(user) != null ? ServiceResultStatusCode.Success : ServiceResultStatusCode.Failed);
        }