public ActionResult Register(RegisterModel model) { if (!ModelState.IsValid) { return(View(model)); } if (RemontinkaServer.Instance.DataStore.UserLoginExists(model.Login)) { ModelState.AddModelError("Login", "Логин уже существует"); return(View(model)); } if (RemontinkaServer.Instance.DataStore.UserDomainEmailIsExists(model.Email)) { ModelState.AddModelError("Email", "Такой email уже есть"); return(View(model)); } try { var registrationUnit = new RegistrationUnit { ClientIdentifier = HttpContext.Request.UserHostName, Email = model.Email.ToLower(), FirstName = model.FirstName, LastName = model.LastName, LegalName = model.LegalName, Login = model.Login, Password = model.Password, Trademark = model.Trademark, Address = model.Address }; var result = RemontinkaServer.Instance.SecurityService.Register(registrationUnit); if (!result.Success) { ModelState.AddModelError(string.Empty, result.Description); return(View(model)); } } catch (Exception ex) { var inner = string.Empty; if (ex.InnerException != null) { inner = ex.InnerException.Message; } _logger.ErrorFormat("Произошла ошибка во время регистрации пользователя {0} {1} {2} {3} {4}", model.Login, inner, ex.Message, ex.GetType(), ex.StackTrace); ModelState.AddModelError(string.Empty, "Произошла ошибка регистрации, повторите запрос чуть позже"); return(View(model)); } return(View("RegisterSuccess")); }
/// <summary> /// Регистрирует нового пользователя. /// </summary> /// <param name="unit">Юнит регистрации.</param> /// <returns>Результат регистрации.</returns> public RegistrationResult Register(RegistrationUnit unit) { _logger.InfoFormat("Начало регистрации пользователя {0}: {1}", unit.Login, unit.ClientIdentifier); var result = new RegistrationResult(); try { var domain = new UserDomain(); domain.IsActive = false; domain.EventDate = DateTime.UtcNow; domain.LegalName = unit.LegalName; domain.PasswordHash = BcryptHash(unit.Password); domain.RegistredEmail = unit.Email; domain.Trademark = unit.Trademark; domain.Address = unit.Address; domain.UserLogin = unit.Login; RemontinkaServer.Instance.DataStore.SaveUserDomain(domain); _logger.InfoFormat("Завели новый домен с id {0} для пользователя {1}", domain.UserDomainID, unit.Login); var user = new User(); user.Email = unit.Email; user.FirstName = unit.FirstName; user.LastName = unit.LastName; user.LoginName = unit.Login; user.PasswordHash = string.Empty; user.MiddleName = string.Empty; user.Phone = string.Empty; user.ProjectRoleID = ProjectRoleSet.Admin.ProjectRoleID; user.UserDomainID = domain.UserDomainID; try { RemontinkaServer.Instance.DataStore.SaveUser(user); result.Success = true; var body = string.Format(RegistrationMessageBodyFormat, user.FirstName, string.Format(RegistrationActivateUrlFormat, domain.UserDomainID)); RemontinkaServer.Instance.MailingService.Send(unit.Email, RegistrationMessageTitleFormat, body); _logger.InfoFormat("Пользователь успешно зарегистрирован {0}", unit.Login); } catch (Exception ex) { result.Description = "Ошибка регистрации пользователя домена"; var innerException = string.Empty; if (ex.InnerException != null) { innerException = ex.InnerException.Message; } _logger.ErrorFormat("Во время сохранения пользователя {0} для домена {1}, произошла ошибка, откатываем домен: {2}, {3} {4} {5}", unit.Login, domain.UserDomainID, ex.Message, innerException, ex.GetType(), ex.StackTrace); RemontinkaServer.Instance.DataStore.DeleteUserDomain(domain.UserDomainID); } } catch (Exception ex) { result.Description = "Ошибка"; var innerException = string.Empty; if (ex.InnerException != null) { innerException = ex.InnerException.Message; } _logger.ErrorFormat("Во время регистрации пользователя {0}, произошла ошибка {1}, {2} {3} {4}", unit.Login, ex.Message, innerException, ex.GetType(), ex.StackTrace); } return(result); }