Ejemplo n.º 1
0
        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));
        }