public ActionResult Register(UserRegistrationModel model)
        {
            bool hasLocker = false;

            try
            {
                Monitor.Enter(locker, ref hasLocker);
                var regions = SetRegionsViewBag();
                if (regions.Count(r => r.Iid == (model.Region ?? 0)) < 1)
                {
                    ModelState.AddModelError(String.Empty, "У вас нет прав для создания пользователей от выбранного региона");
                }
                if (ModelState.IsValid && db.UserProfiles.Count(u => u.Name.Equals(model.UserName, StringComparison.OrdinalIgnoreCase)) > 0)
                {
                    ModelState.AddModelError(String.Empty, "Пользователь с таким именем существует");
                }
                if (ModelState.IsValid)
                {
                    var newUser = new UserProfileModel
                    {
                        Email    = model.Email,
                        Inactive = true,
                        RegionId = model.Region,
                        Name     = model.UserName,
                        Token    = GenerateToken()
                    };
                    newUser.SetPassword(String.Empty);

                    MailService.SendMessage(newUser.Email, "Активация пользователя",
                                            String.Format("На Ваше имя зарегистрирован пользователь.{0}" +
                                                          "Имя пользователя: {1}{0}" +
                                                          "Для активации учетной записи и создания пароля, пожалуйста, перейдите по ссылке {2}",
                                                          Environment.NewLine, newUser.Name,
                                                          Url.Action("Activate", "Account", new { id = newUser.Token }, "http")), false);
                    if (newUser.RegionId < 1)
                    {
                        newUser.RegionId = null;
                    }
                    db.UserProfiles.Add(newUser);
                    db.SaveChanges();
                    return(RedirectToAction("Index", new { id = newUser.RegionId == null ? null : newUser.Region.IidParent, creationResult = DbResult.Created }));
                }
                else
                {
                    return(View(model));
                }
            }
            finally
            {
                if (hasLocker)
                {
                    Monitor.Exit(locker);
                }
            }
        }
        public ActionResult Activate(UserActivationModel model)
        {
            bool hasLocker = false;

            try
            {
                Monitor.Enter(locker, ref hasLocker);
                UserProfileModel user = null;
                if (ModelState.IsValid)
                {
                    user = db.UserProfiles.FirstOrDefault(u => u.Name.Equals(model.UserName, StringComparison.OrdinalIgnoreCase) &&
                                                          u.Token.Equals(model.Token, StringComparison.OrdinalIgnoreCase));
                }
                if (user == null)
                {
                    ModelState.AddModelError(String.Empty, "Пользователь не найден");
                }
                if (ModelState.IsValid)
                {
                    user.SetPassword(model.Password);
                    user.PasswordTokenExpirationTime = null;
                    user.Token    = String.Empty;
                    user.Inactive = false;
                    db.SaveChanges();
                    return(RedirectToAction("Login", new { returnUrl = String.Empty, result = DbResult.Updated }));
                }
                else
                {
                    return(View(model));
                }
            }
            finally
            {
                if (hasLocker)
                {
                    Monitor.Exit(locker);
                }
            }
        }