public ActionResult passwordChange2(Model.UserPasschange model) { var success = false; var result = new List <string>(); try { if (!ModelState.IsValid) { result.AddRange(ModelState.Values.Where(y => y.Errors.Count > 0). SelectMany(x => x.Errors).Select(x => x.ErrorMessage).ToList()); } var data_ = AppCore.GetUserContextManager().GetCurrentUserContext().GetData(); if (result.Count == 0) { if (!ModelState.Keys.Contains("passwordOld")) { result.Add("Не указан текущий пароль."); } else if (UsersExtensions.hashPassword(model.passwordOld) != data_.password) { result.Add("Неправильный пароль."); } if (!ModelState.Keys.Contains("passwordNew")) { result.Add("Не указан новый пароль."); } } //todo сделать сохранение пароля. if (result.Count == 0) { data_.password = UsersExtensions.hashPassword(model.passwordNew); success = true; } } catch (Exception ex) { result.Add(ex.Message); success = false; } return(this.ReturnJson(success, result.Count > 0 ? " - " + string.Join("\r\n - ", result) : "")); }
public ResultWData <User> RegisterUser(Model.PreparedForRegister data) { var answer = new ResultWData <User>(); try { using (var db = this.CreateUnitOfWork()) { var validationResult = ValidateModel(data); if (!validationResult.ContainsKey(nameof(data.email)) && !string.IsNullOrEmpty(data.email)) { data.email = data.email.ToLower(); if (db.Users.Where(x => x.email == data.email).Count() > 0) { validationResult.AddModelError(nameof(data.email), "Пользователь с таким Email-адресом уже существует!"); } } if (!validationResult.ContainsKey(nameof(data.phone)) && !string.IsNullOrEmpty(data.phone)) { if (db.Users.Where(x => x.phone == data.phone).Count() > 0) { validationResult.AddModelError(nameof(data.phone), "Пользователь с таким номером телефона уже существует!"); } } if (validationResult.IsValid) { var symbols = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; var random = new Random(); var salt = new string(Enumerable.Repeat(symbols, 5).Select(s => s[random.Next(s.Length)]).ToArray()); var stateConfirmation = new string(Enumerable.Repeat(symbols, 32).Select(s => s[random.Next(s.Length)]).ToArray()); var regMode = AppCore.Config.register_mode; if (data.State.HasValue) { switch (data.State.Value) { case UserState.Active: regMode = Core.Types.RegisterMode.Immediately; break; case UserState.RegisterWaitForModerate: regMode = Core.Types.RegisterMode.ManualCheck; break; case UserState.RegisterNeedConfirmation: regMode = Core.Types.RegisterMode.SelfConfirmation; break; default: throw new Exception("При регистрации пользователя нельзя указывать данное состояние учетной записи."); } } var CommentAdmin = ""; var query = new User() { password = UsersExtensions.hashPassword(data.password), salt = salt, email = data.email?.ToLower(), State = (UserState)(short)regMode, CommentAdmin = CommentAdmin, name = !string.IsNullOrEmpty(data.name) ? data.name : "", phone = data.phone, about = data.about, Comment = data.Comment, UniqueKey = data.UniqueKey, DateReg = data.DateReg.Timestamp(), IP_reg = data.IP_reg, Superuser = data.Superuser, StateConfirmation = regMode == Core.Types.RegisterMode.ManualCheck ? stateConfirmation : string.Empty, //IP_reg = Request.ServerVariables["REMOTE_ADDR"] }; query.Fields.CopyValuesFrom(data.Fields); using (var scope = db.CreateScope()) { db.Users.Add(query); db.SaveChanges(); var id = -1; var can = false; { id = query.id; //$exts = $this->getUserManager()->getExtensionsWithMethod('register'); //$added = array(); can = true; // foreach ($exts as $k =>$v) //{ // $res = $v->register(array( // 'login' => data.login"], // 'pass' => data.password"], // 'email' => data.email"], // )); // if ($res) $added[$k] = $v; // else // { // foreach ( $added as $k2 =>$v2) if (method_exists($v2, 'userDelete')) $v2->userDelete(data.reg_login"]); // $can = false; // break; // } // } } if (can) { var new_id = id;// = DataManager.getInsertedID(); if (id > 0) { if (regMode == Core.Types.RegisterMode.Immediately) { answer.FromSuccess("Вы успешно зарегистрировались на сайте и можете зайти, используя логин и пароль, указанные при регистрации."); } else if (regMode == Core.Types.RegisterMode.SelfConfirmation) { answer.FromSuccess("Вы успешно зарегистрировались на сайте. В течение определенного времени на Ваш электронный адрес, указанный при регистрации, придет письмо с указаниями по дальнейшим действиям, необходимым для завершения регистрации."); } else if (regMode == Core.Types.RegisterMode.ManualCheck) { answer.FromSuccess("Заявка на регистрацию отправлена. Администратор рассмотрит Вашу заявку и примет решение, после чего Вы получите уведомление на указанный адрес электронной почты."); } //this.assign("message", string.Join("\r\n - ", result.Values)); //this.assign("login", data.email); //Module.DB.RoleUser. // AddOrUpdate(new TraceWeb.DB.RoleUser() // { // IdRole = 1, // IdUser = new_id, // IdUserChange = 0, // DateChange = DateTime.Now.Timestamp() // }); //Module.DB.SaveChanges(); //if (regMode != 2) // Messaging.Manager.Email.sendMailFromSite( // data.email"], // data.email"], // "Регистрация на сайте", // this.displayToVar("register_mail.cshtml") // ); //if (regMode == 2) //{ // this.assign("id", id); // this.assign("login", data.email"]); // this.assign("comment", data.comment"]); // Messaging.Manager.Email.sendMailToAdmin("Новая заявка на регистрацию", this.displayToVar("register_mail_admin.cshtml")); // Messaging.Manager.Email.sendMailSubscription(1, "Новая заявка на регистрацию", this.displayToVar("register_mail_admin.cshtml")); // Messaging.Manager.Email.sendMailFromSite(data.email"], data.email"], "Регистрация на сайте", this.displayToVar("register_mail2.cshtml")); //} //success = "<br>"; answer.Data = query; } } else { answer.FromFail("Ошибка во время регистрации пользователя. Обратитесь к администратору сайта."); } if (answer.Success) { scope.Commit(); } } } else { var errorMessages = new System.Collections.ObjectModel.Collection <string>(); validationResult.ForEach(x => x.Value.Errors.ForEach(error => errorMessages.Add(error.ErrorMessage))); answer.FromFail("Возникли ошибки во время проверки данных:\r\n - " + string.Join(";\r\n - ", errorMessages) + "."); } } } catch (EntityValidationException ex) { Debug.Logs("RegisterUser1: {0}", ex.CreateComplexMessage()); answer.FromFail(ex.CreateComplexMessage()); } catch (Exception ex) { Debug.Logs("RegisterUser2: {0}", ex.Message); answer.FromException(ex); } return(answer); }
public ResultWData <User> RegisterUser(Model.PreparedForRegister data) { var answer = new ResultWData <User>(); try { using (var db = new CoreContext()) { var hasEmail = false; var hasPhone = false; var validationResult = ValidateModel(data); if (!validationResult.ContainsKey(nameof(data.email)) && !string.IsNullOrEmpty(data.email)) { data.email = data.email.ToLower(); hasEmail = true; if (db.Users.Where(x => x.email == data.email).Count() > 0) { validationResult.AddModelError(nameof(data.email), "Пользователь с таким адресом электронной почты уже существует!"); } } if (!validationResult.ContainsKey(nameof(data.phone)) && !string.IsNullOrEmpty(data.phone)) { hasPhone = true; if (db.Users.Where(x => x.phone == data.phone).Count() > 0) { validationResult.AddModelError(nameof(data.phone), "Пользователь с таким номером телефона уже существует!"); } } if (validationResult.IsValid) { var salt = StringsHelper.GenerateRandomString("abcdefghijklmnoprstuvxyzABCDEFGHIKLMNOPRSTUVXYZ0123456789", 5); var stateConfirmation = DateTime.Now.Ticks.ToString().MD5(); var regMode = AppCore.WebConfig.register_mode; if (data.State.HasValue) { switch (data.State) { case Core.Db.UserState.Active: regMode = RegisterMode.Immediately; break; case Core.Db.UserState.RegisterWaitForModerate: regMode = RegisterMode.ManualCheck; break; case Core.Db.UserState.RegisterNeedConfirmation: regMode = RegisterMode.SelfConfirmation; break; default: throw new Exception("При регистрации пользователя нельзя указывать данное состояние учетной записи."); } } else { switch (regMode) { case RegisterMode.Immediately: data.State = Core.Db.UserState.Active; break; case RegisterMode.SelfConfirmation: data.State = Core.Db.UserState.RegisterNeedConfirmation; break; case RegisterMode.ManualCheck: data.State = Core.Db.UserState.RegisterWaitForModerate; break; } } var CommentAdmin = ""; var query = new User() { password = UsersExtensions.hashPassword(data.password), salt = salt, email = data.email?.ToLower(), State = data.State.Value, CommentAdmin = CommentAdmin, name = !string.IsNullOrEmpty(data.name) ? data.name : "", phone = data.phone, about = data.about, Comment = data.Comment, UniqueKey = data.UniqueKey, //DateReg = data.DateReg.Timestamp(), // todo добавить запись о регистрации в журнал регистраций Superuser = data.Superuser, StateConfirmation = regMode == RegisterMode.SelfConfirmation ? stateConfirmation : string.Empty, }; query.Fields.CopyValuesFrom(data.Fields); using (var scope = db.CreateScope()) { db.Users.Add(query); db.SaveChanges(); var credentitals = string.Join(" или ", new string[] { hasEmail ? "адрес электронной почты" : string.Empty, hasPhone ? "номер телефона" : string.Empty }.Where(x => !string.IsNullOrEmpty(x))); if (regMode == RegisterMode.Immediately) { if (hasEmail) { AppCore.Get <EmailService>().SendMailFromSite( data.name, data.email, "Регистрация на сайте", WebUtils.RazorRenderHelper.RenderView(this, "RegisterNotificationEmailImmediately.cshtml", query), ContentType.Html ); } if (hasPhone) { AppCore.Get <MessagingSMS.SMSService>()?.SendMessage(data.phone, "Регистрация на сайте прошла успешно."); } answer.FromSuccess($"Вы успешно зарегистрировались на сайте и можете зайти, используя {credentitals}."); } else if (regMode == RegisterMode.SelfConfirmation) { if (hasEmail) { AppCore.Get <EmailService>().SendMailFromSite( data.name, data.email, "Регистрация на сайте", WebUtils.RazorRenderHelper.RenderView(this, "RegisterNotificationEmailConfirm.cshtml", new Model.RegisterNotificationConfirm() { Data = query, ConfirmationCode = query.StateConfirmation }), ContentType.Html ); } answer.FromSuccess("Вы успешно зарегистрировались на сайте. В течение определенного времени на Ваш электронный адрес, указанный при регистрации, придет письмо с указаниями по дальнейшим действиям, необходимым для завершения регистрации."); } else if (regMode == RegisterMode.ManualCheck) { if (hasEmail) { AppCore.Get <EmailService>().SendMailFromSite( data.name, data.email, "Регистрация на сайте", WebUtils.RazorRenderHelper.RenderView(this, "RegisterNotificationEmailModerate.cshtml", query), ContentType.Html ); } answer.FromSuccess($"Заявка на регистрацию отправлена. Администратор рассмотрит Вашу заявку и примет решение, после чего Вы получите уведомление на указанный {credentitals}."); var usersToNotify = AppCore.Get <ModuleUsersManagement>().GetUsersByRolePermission <ModuleUsersManagement>(ModuleUsersManagement.PermissionReceiveRegisterModeratorNotifications); if (usersToNotify.Count > 0) { var mailAdmin = WebUtils.RazorRenderHelper.RenderView(this, "RegisterNotificationEmailAdmin.cshtml", query); usersToNotify. Where(x => !string.IsNullOrEmpty(x.email)). ForEach(x => AppCore.Get <EmailService>().SendMailFromSite(x.email, x.email, "Новая заявка на регистрацию", mailAdmin, ContentType.Html)); } } answer.Data = query; if (answer.Success) { scope.Complete(); } } } else { var errorMessages = new System.Collections.ObjectModel.Collection <string>(); validationResult.ForEach(x => x.Value.Errors.ForEach(error => errorMessages.Add(error.ErrorMessage))); answer.FromFail("Возникли ошибки во время проверки данных:\r\n - " + string.Join(";\r\n - ", errorMessages) + "."); } } } catch (ValidationException ex) { Debug.Logs("RegisterUser1: {0}", ex.CreateComplexMessage()); answer.FromFail(ex.CreateComplexMessage()); } catch (HandledException ex) { Debug.Logs("RegisterUser2: {0}", ex.Message); this.RegisterEvent(EventType.Warning, "Регистрация пользователя", "Данные: " + Newtonsoft.Json.JsonConvert.SerializeObject(data), ex); answer.FromFail("Регистрация прервана из-за ошибки: " + ex.Message); } catch (Exception ex) { Debug.Logs("RegisterUser2: {0}", ex.Message); this.RegisterEvent(EventType.Error, "Регистрация пользователя - необработанная ошибка", "Данные: " + Newtonsoft.Json.JsonConvert.SerializeObject(data), ex); answer.FromFail("Регистрация прервана из-за непредвиденной ошибки"); } return(answer); }
private ExecutionAuthResult CheckLogin(int idUser, string login, string password, DB.CoreContext db, out DB.User outData) { outData = null; try { if (idUser <= 0 && string.IsNullOrEmpty(login)) { return(new ExecutionAuthResult(eAuthResult.WrongAuthData, "Не указаны реквизиты для авторизации!")); } List <DB.User> query = null; bool directAuthorize = false; // Если в $user передан id и $password не передан вообще. if (idUser > 0) { query = db.Users.Where(x => x.IdUser == idUser).ToList(); directAuthorize = true; } // Если Email if (query == null && login.isEmail()) { switch (AppCore.WebConfig.userAuthorizeAllowed) { case eUserAuthorizeAllowed.Nothing: return(new ExecutionAuthResult(eAuthResult.AuthDisabled, "Авторизация запрещена.")); case eUserAuthorizeAllowed.OnlyPhone: return(new ExecutionAuthResult(eAuthResult.AuthMethodNotAllowed, "Авторизация возможна только по номеру телефона.")); case eUserAuthorizeAllowed.EmailAndPhone: query = (from p in db.Users where string.Compare(p.email, login, true) == 0 select p).ToList(); break; case eUserAuthorizeAllowed.OnlyEmail: query = (from p in db.Users where string.Compare(p.email, login, true) == 0 select p).ToList(); break; } } // Если номер телефона if (query == null) { var phone = PhoneBuilder.ParseString(login); if (phone.IsCorrect) { switch (AppCore.WebConfig.userAuthorizeAllowed) { case eUserAuthorizeAllowed.Nothing: return(new ExecutionAuthResult(eAuthResult.AuthDisabled, "Авторизация запрещена.")); case eUserAuthorizeAllowed.OnlyEmail: return(new ExecutionAuthResult(eAuthResult.AuthMethodNotAllowed, "Авторизация возможна только через электронную почту.")); case eUserAuthorizeAllowed.EmailAndPhone: query = (from p in db.Users where string.Compare(p.phone, phone.ParsedPhoneNumber, true) == 0 select p).ToList(); break; case eUserAuthorizeAllowed.OnlyPhone: query = (from p in db.Users where string.Compare(p.phone, phone.ParsedPhoneNumber, true) == 0 select p).ToList(); break; } } else { if (!login.isEmail()) { return(new ExecutionAuthResult(eAuthResult.WrongAuthData, "Переданные данные не являются ни номером телефона, ни адресом электронной почты.")); } } } if (query == null) { return(new ExecutionAuthResult(eAuthResult.UnknownError, "Что-то пошло не так во время авторизации.")); } if (query.Count == 1) { var res = query.First(); if (directAuthorize || res.password == UsersExtensions.hashPassword(password)) { outData = res; return(new ExecutionAuthResult(eAuthResult.Success)); } else { return(new ExecutionAuthResult(eAuthResult.WrongPassword, "Неверный пароль.")); } } else if (query.Count > 1) { AppCore.Get <MessagingManager <WebApplication> >().GetCriticalMessagesReceivers().ForEach(x => x.SendToAdmin("Одинаковые реквизиты входа!", "Найдено несколько пользователей с логином '" + login + "'")); return(new ExecutionAuthResult(eAuthResult.MultipleFound, "Найдено несколько пользователей с логином '" + login + "'. Обратитесь к администратору для решения проблемы.")); } else { return(new ExecutionAuthResult(eAuthResult.NothingFound, $"Пользователь '{login}' не найден в базе данных.")); } } catch (Exception ex) { this.RegisterEvent(EventType.Error, "Ошибка во время поиска и проверки пользователя", $"IdUser={idUser}, Login='******'.", null, ex); return(new ExecutionAuthResult(eAuthResult.UnknownError, "Неизвестная ошибка во время проверки авторизации.")); } }
public virtual JsonResult UserSave(int IdUser = 0, Model.AdminUserEdit model = null) { var result = JsonAnswer <int>(); try { if (IdUser < 0) { throw new Exception("Не указан пользователь!"); } else { using (var db = new CoreContext()) { int id = 0; User data = null; UserState oldState = 0; if (IdUser > 0) { data = db.Users.Where(u => u.IdUser == IdUser).FirstOrDefault(); if (data == null) { ModelState.AddModelError("IdUser", "Неправильно указан пользователь!"); } else if (data.Superuser != 0 && !AppCore.GetUserContextManager().GetCurrentUserContext().IsSuperuser) { ModelState.AddModelError("IdUser", "У вас нет прав на редактирование суперпользователей - это могут делать только другие суперпользователи!"); } else { oldState = data.State; id = IdUser; } } else { data = new User() { salt = "", //DateReg = DateTime.Now.Timestamp(), // todo добавить запись о регистрации в журнал регистраций }; } var errors = new List <string>(); if (ModelState.ContainsKeyCorrect("User.email")) { data.email = model.User.email?.ToLower(); } if (ModelState.ContainsKeyCorrect("User.phone")) { data.phone = model.User.phone; } if (ModelState.ContainsKeyCorrect("User.name")) { data.name = model.User.name; } if (Request.Form.HasKey("login") && !string.IsNullOrEmpty(Request.Form["login"])) { if (!Request.Form["login"].isOneStringTextOnly() // todo переработать этот участок в нормальную модель || DataManager.check(Request.Form["login"]) ) { errors.Add("Некорректный ввод поля login!"); } else { data.name = Request.Form["login"]; } } if (ModelState.ContainsKeyCorrect("User.name")) { data.name = model.User.name; } if (ModelState.ContainsKeyCorrect("User.about")) { data.about = model.User.about; } if (ModelState.ContainsKeyCorrect("User.Superuser")) { if (!AppCore.GetUserContextManager().GetCurrentUserContext().IsSuperuser) { errors.Add("Недостаточно прав для установки или снятия признака суперпользователя!"); } data.Superuser = (byte)(model.User.Superuser == 0 ? 0 : 1); } if (ModelState.ContainsKeyCorrect("User.State")) { switch (model.User.State) { case UserState.Active: case UserState.RegisterNeedConfirmation: case UserState.RegisterWaitForModerate: case UserState.RegisterDecline: case UserState.Disabled: data.State = model.User.State; break; default: ModelState.AddModelError("User.State", "Неизвестное состояние пользователя."); break; } } if (ModelState.ContainsKeyCorrect(nameof(model.IsNeedToChangePassword)) && ModelState.ContainsKeyCorrect(nameof(model.User) + "." + nameof(model.User.password))) { if (data.IdUser > 0 && model.IsNeedToChangePassword) { data.password = UsersExtensions.hashPassword(model.User.password); } else if (data.IdUser == 0) { data.password = UsersExtensions.hashPassword(model.User.password); } } if (ModelState.ContainsKeyCorrect("User.Comment")) { data.Comment = model.User.Comment; } if (ModelState.ContainsKeyCorrect("User.CommentAdmin")) { data.CommentAdmin = model.User.CommentAdmin; } if (Request.Form.HasKey("adminComment") && !string.IsNullOrEmpty(Request.Form["adminComment"])) { if (!Request.Form["adminComment"].isOneStringTextOnly() // todo переработать этот участок в нормальную модель || DataManager.check(Request.Form["adminComment"]) ) { errors.Add("Некорректный ввод комментария администратора!"); } else { data.CommentAdmin = Request.Form["adminComment"]; } } result.Message = errors.Count > 0 ? " - " + string.Join("\r\n - ", errors) : ""; if (errors.Count == 0 && ModelState.IsValid) { data.Fields.CopyValuesFrom(model.User.Fields); data.DateChangeBase = DateTime.Now; data.IdUserChange = AppCore.GetUserContextManager().GetCurrentUserContext().IdUser; using (var trans = new TransactionScope()) { if (data.IdUser == 0) { db.Users.Add(data); } if (db.SaveChanges <User>() > 0) { result.Message = "Сохранение данных прошло успешно!"; result.Success = true; Module.RegisterEventForItem(data, EventType.Info, JournalEventUserEdit, "Редактирование данных", $"Пользователь №{data.IdUser} '" + data.ToString() + "'"); if (result.Success) { { var rolesMustHave = new List <int>(model.UserRoles ?? new List <int>()); db.RoleUser.RemoveRange(db.RoleUser.Where(x => x.IdUser == data.IdUser)); rolesMustHave.ForEach(x => db.RoleUser.Add(new RoleUser() { IdRole = x, IdUser = data.IdUser, IdUserChange = AppCore.GetUserContextManager().GetCurrentUserContext().IdUser, DateChange = DateTime.Now.Timestamp() })); db.SaveChanges <RoleUser>(); } /* * todo рассылка на мыло и по телефону * */ if (oldState == UserState.RegisterWaitForModerate && data.State == UserState.Active) { this.assign("login", Request.Form["email"]); this.assign("message", "Ваша заявка была одобрена администратором, вы можете зайти на сайт, используя логин и пароль, указанные при регистрации!"); AppCore.Get <EmailService>().SendMailFromSite( data.ToString(), data.email, "Успешная регистрация на сайте", this.ViewString("Register/register_mail2.cshtml"), ContentType.Html ); Module.RegisterEventForItem(data, EventType.Info, JournalEventUserStateAccept, "Заявка одобрена", "Пользователь №" + data.IdUser + " '" + data.ToString() + "'"); } if (oldState == UserState.RegisterWaitForModerate && data.State == UserState.RegisterDecline) { var message = "."; //Если администратор указал комментарий к отклонению заявки if (!string.IsNullOrEmpty(data.CommentAdmin)) { message = " по следующей причине: " + data.CommentAdmin; this.assign("comment", data.CommentAdmin); } this.assign("login", data.email); this.assign("message", "Ваша заявка была отклонена администратором" + message); AppCore.Get <EmailService>().SendMailFromSite( data.ToString(), data.email, "Регистрация на сайте отклонена", this.ViewString("Register/register_mail_decline.cshtml"), ContentType.Html ); Module.RegisterEventForItem(data, EventType.Info, JournalEventUserStateDecline, "Заявка отклонена", "Пользователь №" + data.IdUser + " '" + data.ToString() + "'. Заявка отклонена администратором" + message); } if (oldState != data.State && data.State == UserState.Disabled) { var message = "."; //Если администратор указал комментарий к отключению заявки if (Request.Form.HasKey("adminComment") && !string.IsNullOrEmpty(Request.Form["adminComment"])) { message = " по следующей причине: " + Request.Form["adminComment"]; this.assign("comment", Request.Form["adminComment"]); } if (Request.Form.HasKey("CommentAdmin") && !string.IsNullOrEmpty(Request.Form["CommentAdmin"])) { message = " по следующей причине: " + Request.Form["CommentAdmin"]; this.assign("comment", Request.Form["CommentAdmin"]); } this.assign("login", data.email); this.assign("message", "Ваш аккаунт заблокирован администратором" + message); AppCore.Get <EmailService>().SendMailFromSite( data.ToString(), data.email, "Аккаунт заблокирован", this.ViewString("Register/register_mail_ban.cshtml"), ContentType.Html ); Module.RegisterEventForItem(data, EventType.Info, JournalEventUserStateBlocked, "Аккаунт заблокирован", "Пользователь №" + data.IdUser + " '" + data.ToString() + "'. Аккаунт заблокирован" + message); } } result.Data = data.IdUser; trans.Complete(); } else { result.Message = "Сохранение данных провалилось!"; } } } } } } catch (Exception ex) { result.FromException(ex); } return(ReturnJson(result)); }
public ActionResult PasswordRestoreSave(Model.PasswordRestoreSave model = null) { var answer = JsonAnswer <string>(); try { if (ModelState.IsValid) { using (var db = Module.CreateUnitOfWork()) { var res = (from p in db.PasswordRemember join u in db.Users on p.user_id equals u.IdUser where p.code == model.Code select new { Password = p, User = u }).FirstOrDefault(); if (res == null) { ModelState.AddModelError(nameof(model.Code), "Некорректный код подтверждения."); } else { var symbols = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; var salt = ""; var rand = new Random(); for (int i = 0; i < 5; i++) { var index = rand.Next(0, symbols.Length - 1); salt = salt + symbols[index]; } using (var scope = new System.Transactions.TransactionScope()) { db.PasswordRemember.Delete(res.Password); res.User.password = UsersExtensions.hashPassword(model.Password); res.User.salt = salt; db.SaveChanges(); scope.Complete(); } answer.FromSuccess("Новый пароль был сохранен."); } } } } catch (BehaviourException ex) { Module.RegisterEvent(EventType.Info, "Ошибка восстановления пароля при сохранении", ex.Message, ex.InnerException); answer.FromFail(ex.Message); } catch (Exception ex) { Module.RegisterEvent(EventType.Error, "Ошибка восстановления пароля при сохранении", "Необработанная ошибка", ex); answer.FromFail("Возникла ошибка во время сохранения пароля"); } if (!ModelState.IsValid) { this.RegisterEventInvalidModel("Форма восстановления пароля - шаг 2"); } return(ReturnJson(answer)); }