public async Task <User> Authenticate(string username, string password) { try { if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)) { return(null); } var user = await _repository.GetItemAsync <User>(u => u.Username == username); if (user == null) { return(null); } var passResult = new PasswordHasher().VerifyHashedPassword(user.Password, password); if (passResult.Equals(PasswordVerificationResult.Failed)) { return(null); } // authentication successful so return user details without password user.Password = null; return(user); } catch (Exception ex) { logger.LogError(ex, $"UserService: Authenticate Failed {ex.Message}"); } return(null); }
public ActionResult ConfirmAccount(AdminsConfirmAccountVM model) { if (ModelState.IsValid) { Administrator admin = unitOfWork.AdminRepository.GetById(model.Id); admin.Username = model.Username; if (admin != null) { if (PasswordHasher.Equals(model.Password, admin.Salt, admin.Hash)) { var passPhrase = PasswordHasher.Hash(model.NewPassword); admin.Hash = passPhrase.Hash; admin.Salt = passPhrase.Salt; admin.IsConfirmed = true; unitOfWork.AdminRepository.Update(admin); unitOfWork.Save(); TempData.FlashMessage("Your account has been confirmed. Please, login!"); return(RedirectToAction("Login", "Account")); } else { ModelState.AddModelError("", "Incorrect Password"); } } } return(View(model)); }
public bool AuthenticateUser(string username, string password) { LoggedUser = null; AppContext ctx = new AppContext(); UserRepository userRepo = new UserRepository(ctx); User user = userRepo.GetByUsername(username); if (user != null) { if (PasswordHasher.Equals(password, user.Salt, user.Hash)) { LoggedUser = user; return(true); } } return(false); }
public bool AuthenticateUser(string username, string password, UserTypeEnum userType) { LoggedUser = null; UserType = null; AppContext ctx = new AppContext(); switch (userType) { case UserTypeEnum.Administrator: AdministratorRepository adminRepo = new AdministratorRepository(new AppContext()); LoggedUser = unitOfWork.AdminRepository.GetByUsername(username); break; case UserTypeEnum.Student: StudentRepository studentRepo = new StudentRepository(new AppContext()); LoggedUser = unitOfWork.StudentRepository.GetByUsername(username); break; case UserTypeEnum.Teacher: TeacherRepository teacherRepo = new TeacherRepository(new AppContext()); LoggedUser = unitOfWork.TeacherRepository.GetByUsername(username); break; } if (LoggedUser != null) { if (PasswordHasher.Equals(password, LoggedUser.Salt, LoggedUser.Hash)) { UserType = userType; return(true); } LoggedUser = null; } return(false); }
public ActionResult EditProfile(AccountsEditProfileVM model) { if (ModelState.IsValid) { //User user; ////UserRepository<User> repo; //switch (AuthenticationManager.UserType.Value) //{ // case UserTypeEnum.Administrator: // AdministratorRepository adminrepo = unitOfWork.AdminRepository; // user = unitOfWork.AdminRepository.GetById(model.Id); // break; // case UserTypeEnum.Student: // StudentRepository studentrepo = unitOfWork.StudentRepository; // user = unitOfWork.StudentRepository.GetById(model.Id); // break; // case UserTypeEnum.Teacher: // TeacherRepository teacherrepo = unitOfWork.TeacherRepository; // user = unitOfWork.TeacherRepository.GetById(model.Id); // break; //} //Type t = user.GetType(); //if (t.IsAssignableFrom(typeof(User))) //{ // //UserRepository<t> repo = new UserRepository<t>; //} //if (PasswordHasher.Equals(model.OldPassword, user.Salt, user.Hash)) //{ // user.Username = model.Username; // user.Email = model.Email; // AuthenticationManager.LoggedUser.Username = user.Username; // if (model.NewPassword != null) // { // if (model.NewPassword.Length > 2) // { // var passPhrase = PasswordHasher.Hash(model.NewPassword); // user.Hash = passPhrase.Hash; // user.Salt = passPhrase.Salt; // repo.Update(user); // unitOfWork.Save(); // TempData.FlashMessage("You successfully updated your account!", null, FlashMessageTypeEnum.Green); // return RedirectToAction("Index", "Home"); // } // else // { // ModelState.AddModelError(String.Empty, "Password must be at least 3 symbols"); // } // } // else // { // repo.Update(user); // unitOfWork.Save(); // TempData.FlashMessage("You successfully updated your account!", null, FlashMessageTypeEnum.Green); // return RedirectToAction("Index", "Home"); // } //} //else //{ // ModelState.AddModelError(String.Empty, "Wrong Password!"); //} switch (AuthenticationManager.UserType.Value) { case UserTypeEnum.Administrator: Administrator admin = unitOfWork.AdminRepository.GetById(model.Id); if (PasswordHasher.Equals(model.OldPassword, admin.Salt, admin.Hash)) { admin.Username = model.Username; admin.Email = model.Email; AuthenticationManager.LoggedUser.Username = admin.Username; if (model.NewPassword != null) { if (model.NewPassword.Length > 2) { var passPhrase = PasswordHasher.Hash(model.NewPassword); admin.Hash = passPhrase.Hash; admin.Salt = passPhrase.Salt; unitOfWork.AdminRepository.Update(admin); unitOfWork.Save(); TempData.FlashMessage("You successfully updated your account!", null, FlashMessageTypeEnum.Green); return(RedirectToAction("Index", "Home")); } else { ModelState.AddModelError(String.Empty, "Password must be at least 3 symbols"); } } else { unitOfWork.AdminRepository.Update(admin); unitOfWork.Save(); TempData.FlashMessage("You successfully updated your account!", null, FlashMessageTypeEnum.Green); return(RedirectToAction("Index", "Home")); } } else { ModelState.AddModelError(String.Empty, "Wrong Password!"); } break; case UserTypeEnum.Student: Student student = unitOfWork.StudentRepository.GetById(model.Id); if (PasswordHasher.Equals(model.OldPassword, student.Salt, student.Hash)) { student.Username = model.Username; student.Email = model.Email; AuthenticationManager.LoggedUser.Username = student.Username; if (model.NewPassword != null) { if (model.NewPassword.Length > 2) { var passPhrase = PasswordHasher.Hash(model.NewPassword); student.Hash = passPhrase.Hash; student.Salt = passPhrase.Salt; unitOfWork.StudentRepository.Update(student); unitOfWork.Save(); TempData.FlashMessage("You successfully updated your account!", null, FlashMessageTypeEnum.Green); return(RedirectToAction("Index", "Home")); } else { ModelState.AddModelError(String.Empty, "Password must be at least 3 symbols"); } } else { unitOfWork.StudentRepository.Update(student); unitOfWork.Save(); TempData.FlashMessage("You successfully updated your account!", null, FlashMessageTypeEnum.Green); return(RedirectToAction("Index", "Home")); } } else { ModelState.AddModelError(String.Empty, "Wrong Password!"); } break; case UserTypeEnum.Teacher: Teacher teacher = unitOfWork.TeacherRepository.GetById(model.Id); if (PasswordHasher.Equals(model.OldPassword, teacher.Salt, teacher.Hash)) { teacher.Username = model.Username; teacher.Email = model.Email; AuthenticationManager.LoggedUser.Username = teacher.Username; if (model.NewPassword != null) { if (model.NewPassword.Length > 2) { var passPhrase = PasswordHasher.Hash(model.NewPassword); teacher.Hash = passPhrase.Hash; teacher.Salt = passPhrase.Salt; unitOfWork.TeacherRepository.Update(teacher); unitOfWork.Save(); TempData.FlashMessage("You successfully updated your account!", null, FlashMessageTypeEnum.Green); return(RedirectToAction("Index", "Home")); } else { ModelState.AddModelError(String.Empty, "Password must be at least 3 symbols"); } } else { unitOfWork.TeacherRepository.Update(teacher); unitOfWork.Save(); TempData.FlashMessage("You successfully updated your account!", null, FlashMessageTypeEnum.Green); return(RedirectToAction("Index", "Home")); } } else { ModelState.AddModelError(String.Empty, "Wrong Password!"); } break; } } return(View(model)); }