Beispiel #1
0
 public PartialViewResult Restore(RestoreModel model)
 {
     if (model.Email.IsNullOrEmpty() || !model.Email.IsMailAdress())
     {
         ModelState.AddModelError("",
                                  LabelDictionary.Translate(
                                      "Для восстановления пароля необходимо указать Email, использованный при регистрации"));
     }
     else
     {
         var user = Membership.GetUser(model.Email);
         if (user == null)
         {
             ModelState.AddModelError("",
                                      LabelDictionary.Translate(
                                          "Пользователь с таким Email не регистрировался на сайте"));
         }
         else
         {
             var res = MailingList.Get("RestorePassLetter")
                       .To(model.Email)
                       .WithReplacement(new MailReplacement("{PASSWORD}", user.GetPassword())).Send();
             ModelState.AddModelError("",
                                      res.IsFilled()
                                          ? res
                                          : LabelDictionary.Translate(
                                          "Пароль для доступа к сайту был успешно отправлен на указанный Email"));
         }
     }
     return(PartialView(model));
 }
Beispiel #2
0
        public ActionResult Restore(RestoreModel model)
        {
            ApplicationUser user = UserManager.FindByEmail(model.Email);

            if (user == null)
            {
                ModelState.AddModelError("", "Пользователь не найден");
            }

            if (ModelState.IsValid)
            {
                model.Id = user.Id;
                string token = UserManager.GeneratePasswordResetToken(user.Id);

                string callbackUrl = Url.Action("RestoreConfirm", "Account",
                                                new { model.Id, Code = token, model.Email }, Request.Url.Scheme);

                UserManager.SendEmail(user.Id, "Сброс пароля",
                                      "Для сброса пароля, перейдите по ссылке <a href=\"" + callbackUrl +
                                      "\">сбросить</a>");

                return(Content("Проверьте почту"));
            }

            return(View());
        }
Beispiel #3
0
        public ActionResult SimpleRestore(RestoreModel model)
        {
            if (model.Email.IsNullOrEmpty() || !model.Email.IsMailAdress())
            {
                model.ErrorText = "Для восстановления пароля необходимо указать Email, использованный при регистрации";
            }
            else
            {
                var user = Membership.FindUsersByEmail(model.Email);
                if (user.Count == 0)
                {
                    model.ErrorText = "Пользователь с таким Email не регистрировался на сайте";
                }
                else
                {
                    foreach (MembershipUser u in user)
                    {
                        var res = MailingList.Get("RestorePassLetter")
                                  .To(model.Email)
                                  .WithReplacement(new MailReplacement("{PASSWORD}", u.GetPassword())).Send();

                        model.ErrorText = res.IsFilled()
                                              ? res
                                              : "Пароль для доступа к сайту был успешно отправлен на указанный Email";
                    }
                }
            }

            return(PartialView(model));
        }
Beispiel #4
0
        /// <summary>
        /// 创建人:李超
        /// 创建日期:2016/11/11
        /// 方法阐述:创建回收站数据还原的方法
        /// </summary>
        /// <param name="context"></param>
        public void RestoreData(HttpContext context)
        {
            bool result = false;

            try
            {
                var json = Common.GetRequest("DataJson");
                if (json.IndexOf("[") == -1)
                {
                    if (json.IndexOf("ArchivesMeasurement") == -1) //没有找到
                    {
                        RestoreModel model = JsonConvert.DeserializeObject <RestoreModel>(json);
                        result = MgrServices.RecycleBinService.RestoreData(model.RBID, model.TableName, model.FieldName, model.FieldValue, model.FieldNameDelete);
                    }
                    if (json.IndexOf("ArchivesMeasurement") >= 1) //找到了
                    {
                        RestoreModel model = JsonConvert.DeserializeObject <RestoreModel>(json);
                        result = MgrServices.RecycleBinService.InsertData(model.RBID, model.TableName, model.FieldName, model.FieldValue, model.FieldNameDelete);
                    }
                }
                else
                {
                    List <RestoreModel> model = JsonConvert.DeserializeObject <List <RestoreModel> >(json);
                    for (int i = 0; i < model.Count; i++)
                    {
                        result = MgrServices.RecycleBinService.RestoreData(model[i].RBID, model[i].TableName, model[i].FieldName, model[i].FieldValue, model[i].FieldNameDelete);
                    }
                }
                context.Response.Write(result);
            }
            catch (Exception ex)
            {
                context.Response.Write(result);
            }
        }
Beispiel #5
0
        public ActionResult RestorePass(RestoreModel model)
        {
            try
            {
                string     _login   = model.Email;
                UsersModel UserInfo = _repository.getCustomer(_login);

                // Ошибки в форме
                if (!ModelState.IsValid)
                {
                    // пустое поле
                    if (_login == null || _login == "")
                    {
                        ModelState.AddModelError("", "Поле \"E-Mail\" не заполнено. Для восстановления пароля введите адрес почты.");
                    }
                    return(View(model));
                }

                // существует ли адрес
                if (UserInfo != null)
                {
                    // Формируем код востановления пароля
                    Guid RestoreCode = Guid.NewGuid();
                    _repository.setRestorePassCode(UserInfo.Id, RestoreCode);

                    #region оповещение на e-mail
                    string Massege = String.Empty;
                    Mailer Letter  = new Mailer()
                    {
                        Theme = "Изменение пароля"
                    };
                    Massege       = "<p>Уважаемый " + UserInfo.FIO + ", Вы отправили запрос на смену пароля на сайте " + Request.Url.Host + ".</p>";
                    Massege      += "<p>Для вас сформирована ссылка, перейдя по которой, Вы сможете ввести новый пароль для вашего аккаунта.</p>";
                    Massege      += "<p><a href=\"https://" + Request.Url.Host + "/user/ChangePass/" + RestoreCode + "/\">https://" + Request.Url.Host + "/user/ChangePass/" + RestoreCode + "/</a></p>";
                    Massege      += "<p>С уважением, администрация сайта!</p>";
                    Massege      += "<hr><i><span style=\"font-size:11px\">Это сообщение отпралено роботом, на него не надо отвечать</i></span>";
                    Letter.MailTo = UserInfo.EMail;
                    Letter.Text   = Massege;
                    string ErrorText = Letter.SendMail();
                    #endregion

                    return(RedirectToAction("MsgSendMail", "User"));
                }
                else
                {
                    ModelState.AddModelError("", "Адрес почты заполнен неверно. Попробуйте ещё раз");
                }
                return(View(model));
            }
            catch
            {
                return(View(model));
            }
        }
Beispiel #6
0
 public ApiResult Restore([FromBody] RestoreModel model)
 {
     _logger.LogDebug($"restore model={Newtonsoft.Json.JsonConvert.SerializeObject(model)}, userId={_userId}");
     _siteMapModifyService.RestoreSiteMapItems(
         _siteId, _userId, model.ItemId,
         model.IsRestoreAllVersions ?? false,
         model.IsRestoreChildren ?? false,
         model.IsRestoreContentVersions ?? false,
         model.IsRestoreWidgets ?? false);
     return(ApiResult.Success());
 }
Beispiel #7
0
        public ActionResult RestoreConfirmValidate(RestoreModel model)
        {
            IdentityResult result =
                UserManager.ResetPassword(model.Id, model.Code, model.NewPassword);

            if (result.Succeeded)
            {
                return(RedirectToAction("Login"));
            }

            foreach (string error in result.Errors)
            {
                ModelState.AddModelError("", error);
            }

            return(View(model));
        }
Beispiel #8
0
 public ActionResult RestoreConfirm(RestoreModel model)
 {
     return(View(model));
 }
Beispiel #9
0
        public ActionResult RestorePassword(RestoreModel model)
        {
            var user = userBusinessLogic.User_GetByLogin(model.Login);

            if (user != null)
            {
                if (model.Choice == "email")
                {
                    if (!string.IsNullOrEmpty(user.Email))
                    {
                        UserEditModel userModel = new UserEditModel();
                        userModel          = new UserEditModel(user);
                        userModel.Password = UserEditModel.GeneratePassword();
                        try
                        {
                            userModel.SendEmail();
                            long userId = userBusinessLogic.User_Save(userModel.GetUserSaveData());
                            ViewBag.Message = "Письмо успешно отправлено на почту " + userModel.ReplaceEmail(user.Email);
                        }
                        catch (Exception e)
                        {
                            ViewBag.Message = e.Message;
                        }
                    }
                    else
                    {
                        ViewBag.Message = string.Format("У пользователя [{0}] не указан e-mail. Обратитесь к администратору.", model.Login);
                    }
                }

                if (model.Choice == "sms")
                {
                    if (!string.IsNullOrEmpty(user.Phone))
                    {
                        UserEditModel userModel = new UserEditModel();
                        userModel          = new UserEditModel(user);
                        userModel.Password = UserEditModel.GeneratePassword();
                        try
                        {
                            string result = userModel.SendSms();
                            if (string.IsNullOrEmpty(result))
                            {
                                long userId = userBusinessLogic.User_Save(userModel.GetUserSaveData());
                                ViewBag.Message = "СМС отправлено на телефон " + userModel.ReplacePhone(userModel.Phone);
                            }
                            else
                            {
                                ViewBag.Message = result;
                            }
                        }
                        catch (Exception e)
                        {
                            ViewBag.Message = e.Message;
                        }
                    }
                    else
                    {
                        ViewBag.Message = string.Format("У пользователя [{0}] не указан телефон. Обратитесь к администратору.", model.Login);
                    }
                }
            }
            else
            {
                ViewBag.Message = string.Format("Пользователь [{0}] не найден", model.Login);
            }

            return(View());
        }
        public async Task <APIResponse> Password([FromBody] RestoreModel model)
        {
            // validate
            if (BaseValidableModel.IsInvalid(model, out var errFields))
            {
                return(APIResponse.BadRequest(errFields));
            }

            var agent      = GetUserAgentInfo();
            var userLocale = GetUserLocale();

            // captcha
            if (!HostingEnvironment.IsDevelopment())
            {
                if (!await Core.Recaptcha.Verify(AppConfig.Services.Recaptcha.SecretKey, model.Captcha, agent.Ip))
                {
                    return(APIResponse.BadRequest(nameof(model.Captcha), "Failed to validate captcha"));
                }
            }

            // try find user
            var user = await UserManager.FindByEmailAsync(model.Email);

            if (user == null || !(await UserManager.IsEmailConfirmedAsync(user)))
            {
                return(APIResponse.Success());
            }

            // confirmation token
            var token = Core.Tokens.JWT.CreateSecurityToken(
                appConfig: AppConfig,
                entityId: user.UserName,
                audience: JwtAudience.Cabinet,
                area: Common.JwtArea.RestorePassword,
                securityStamp: "",
                validFor: TimeSpan.FromHours(24)
                );

            var callbackUrl = this.MakeAppLink(JwtAudience.Cabinet, fragment: AppConfig.Apps.Cabinet.RoutePasswordRestoration.Replace(":token", token));

            // restoration email
            await EmailComposer.FromTemplate(await TemplateProvider.GetEmailTemplate(EmailTemplate.PasswordRestoration, userLocale))
            .Link(callbackUrl)
            .Initiator(agent.Ip, agent.Agent, DateTime.UtcNow)
            .Send(model.Email, user.UserName, EmailQueue)
            ;

            // activity
            var userActivity = CoreLogic.User.CreateUserActivity(
                user: user,
                type: Common.UserActivityType.Password,
                comment: "Password restoration requested",
                ip: agent.Ip,
                agent: agent.Agent,
                locale: userLocale
                );

            DbContext.UserActivity.Add(userActivity);
            await DbContext.SaveChangesAsync();

            return(APIResponse.Success());
        }