Exemple #1
0
        public ActionResult UserBookings()
        {
            IRepository repository = new CommunicationWithDataBase();

            logger.Debug($"Обращение к базе данных, получение пользователя по логину");
            User user = repository.GetUserByLogin(User.Identity.Name);

            if (user == null)
            {
                logger.Debug($"Ошибка. не возможно получить пользователя");
            }
            logger.Debug($"Обращение к базе данных, получение комнат забронированых пользователем {user.Login}");
            List <Booking> bookings        = repository.GetUserBookings(user.Id);
            List <Booking> currentBookings = bookings.Where(b => b.BookingStatusId == 2).ToList();

            logger.Info($"Возвращение забронированных пользователем комнат");
            return(View(currentBookings));
        }
        public ActionResult Authorization(UserAuthorization model)
        {
            IRepository repository = new CommunicationWithDataBase();

            logger.Debug("Обращение к базе данных для получения данных о пользователе");
            User user = repository.GetUserByLogin(model.Login?.ToLower());

            if (user?.BlockDate > DateTime.Now)
            {
                logger.Debug($"Ошибка входа, пользователь {user.Login} заблокирован в системе");
                ModelState.AddModelError("AuthorizationValidationError",
                                         $"Вы заблокированы в системе до {user.BlockDate.ToString("d")}.");
            }
            else if (model.Password == null)
            {
                ModelState.AddModelError("AuthorizationValidationError", "Логин или пароль некорректен");
            }
            else if (repository.CheckUserAuthorization(model.Login?.ToLower(), model?.Password))
            {
                logger.Debug($"Обращение к базе данных для проверки подлиности данных авторизации");
                if (model.Login == null)
                {
                    logger.Error("Ошибка. Логин пользователя был null");
                }

                FormsAuthentication.SetAuthCookie(model.Login.ToLower(), true);
                logger.Info($"Пользователь {user.Login} выполнил вход на сайт");
                return(RedirectToAction("Index", "Home"));
            }
            else
            {
                ModelState.AddModelError("AuthorizationValidationError", "Логин или пароль некорректен");
            }

            logger.Info($"Отказ входа. некорректные данные");
            return(View(model));
        }
        public ActionResult Registration(UserRegistration user)
        {
            IRepository repository = new CommunicationWithDataBase();

            logger.Debug("Попытка создания нового пользователя");

            if (user.Password != null)
            {
                if (user.Password.Length < 6 || user.Password.Length > 15)
                {
                    ModelState.AddModelError(nameof(user.Password), "Пароль должен содержать от 6 до 15 символов");
                }

                if (!Regex.IsMatch(user.Password, "^[a-zA-ZА-Яа-я0-9_\\.\\-]+$"))
                {
                    ModelState.AddModelError(nameof(user.Password), "Пароль содержит некорректные символы");
                }

                if (user.ConfirmPassword != user.Password)
                {
                    ModelState.AddModelError(nameof(user.ConfirmPassword), "Пароли не совпадают");
                }
            }

            if (!(user.DateOfBirth > DateTime.Now.AddYears(-110) &&
                  user.DateOfBirth < DateTime.Now.AddYears(-16)))
            {
                ModelState.AddModelError(nameof(user.DateOfBirth),
                                         "Некорректная дата рождения. Наши пользователи должны быть старше 16 и моложе 110 лет");
            }

            if (user.Login != null)
            {
                if (!Regex.IsMatch(user.Login, "^[A-Za-z]+"))
                {
                    ModelState.AddModelError(nameof(user.Login),
                                             "В логине должны присутствовать буквы английского алфавита");
                }

                logger.Debug($"Обращение к базе данных для проврки уникальности логина {user.Login}");
                if (repository.GetUserByLogin(user.Login.ToLower()) != null)
                {
                    ModelState.AddModelError(nameof(user.Login), "Пользователь с таким логином уже существует");
                }
            }

            if (user.Email != null)
            {
                logger.Debug($"Обращение к базе данных для проврки уникальности email {user.Email}");
                if (repository.GetUserByEmail(user.Email) != null)
                {
                    ModelState.AddModelError(nameof(user.Email), "Email используется в системе");
                }
            }

            if (ModelState.IsValid)
            {
                try
                {
                    repository.CreateUser(user.FirstName.ToLower(), user.SecondName.ToLower(),
                                          user.Login.ToLower(), user.Email, user.Password, user.DateOfBirth);
                }
                catch
                {
                    logger.Error("Ошибка. пользователь не был создан");
                }

                logger.Info("В систему добавлен новый пользователь");

                FormsAuthentication.SetAuthCookie(user.Login.ToLower(), true);

                return(RedirectToAction("Index", "Home"));
            }

            return(View(user));
        }