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); } } }