Exemple #1
0
        public ActionResult Register(string id, string returnUrl, FormCollection collection)
        {
            string   password        = collection["password"];
            string   confirmPassword = collection["confirmPassword"];
            string   email           = collection["email"].Trim(); // во время обычной регистрации имейл это логин
            TimeSpan offset          = TimeSpan.FromMinutes(collection["timezone"].ToInt());

            try
            {
                #region Валидация
                if (password.IsNullOrEmpty())
                {
                    ModelState.AddModelError("password", "Введите пароль.");
                }
                if (email.IsNullOrEmpty())
                {
                    ModelState.AddModelError("email", "Введите email.");
                }

                if (!email.IsValidEmail())
                {
                    ModelState.AddModelError("email", "Введите правильный email.");
                }

                if (password != confirmPassword)
                {
                    ModelState.AddModelError("confirmPassword", "Повторите пароль правильно.");
                }

                // Пользователь регестрируется через имейл, по этому он является логином
                IUser oldUser = Utility.Users.Get(email);
                if (oldUser != null)
                {
                    ViewData.Add("email", email);
                    ModelState.AddModelError("email", "Пользователь уже зарегестрирован.");

                    // на всякий случай высылаем повторно конфирм, если пользователь решил ввести данные повторно
                    if (!oldUser.IsConfirmed && UsersUtility.CheckPassword(oldUser, password))
                    {
                        MailsManager.SendConfirmEmail(oldUser);
                    }
                }
                #endregion

                if (ModelState.IsValid)
                {
                    string nick = email.Split('@')[0];
                    try
                    {
                        Utility.Users.Add(
                            nick,
                            password,
                            email,
                            offset,
                            id,                             // Код инвайта
                            RegistrationType.Default);
                    }
                    catch (TariffException exception)
                    {
                        return(Message(exception.Message));
                    }

                    if (returnUrl.IsNullOrEmpty())
                    {
                        return(View("Registration"));
                    }

                    return(Redirect(returnUrl));
                }

                ViewData.Model = GetTimeZones();

                return(View());
            }
            catch
            {
                Utility.Users.Delete(email);
                throw;
            }
        }