示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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));
        }