/// <summary>
        /// Получает ChangePasswordEmailModel
        /// </summary>
        /// <param name="Email"></param>
        /// <param name="NewPassword"></param>
        /// <param name="SelfChangePassword"></param>
        /// <returns></returns>
        public static ChangePasswordEmailModel GetChangePasswordEmailModel(string Email, string NewPassword, bool SelfChangePassword)
        {
            ChangePasswordEmailModel toReturn = new ChangePasswordEmailModel();

            toReturn.Caption = "Change password";
            toReturn.MailTo.Add(Email);
            toReturn.Password    = NewPassword;
            toReturn.SelfChanged = SelfChangePassword;
            return(toReturn);
        }
Ejemplo n.º 2
0
        public ActionResult EditPassword(NotSignedPasswordModel payload)
        {
            if (!ModelState.IsValid)
            {
                return(View("PasswordRecovery", payload));
            }

            var isValidHash = _auth.Validate(payload.Email, payload.HashCode, Hashs.Recovery);
            var EFUser      = _auth.GetCredentials(payload.Email);

            if (!isValidHash || EFUser == null)
            {
                Response.StatusCode = (int)HttpStatusCode.NotFound;
                // ModelState.AddModelError("", "User not registered.");
                ViewBag.Error = "Incapaz de alterar a senha para o usuário especificado.";
                return(View("PasswordRecovery", payload));
            }

            try
            {
                // get new password recovery hash created to user
                var newLoginHash = _auth.ProvideLogin(EFUser, payload.NewPassword);
                var rootUrl      = System.Web.HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);

                // setup view model to fill email
                var changePasswordEmailModel = new ChangePasswordEmailModel
                {
                    RecipientDisplayName = EFUser.Name,
                    RecipientEmail       = EFUser.Email,
                    NewPassword          = payload.NewPassword,
                    Site = rootUrl
                };
                // render the view as string to send via SMTP
                var emailContentHtml = StringRenderer.RenderView(changePasswordViewPath, changePasswordEmailModel, false);

                _email.Send(emailContentHtml, changePasswordEmailModel);
            }
            catch (Exception)
            {
                Response.StatusCode = (int)HttpStatusCode.NotFound;
                ModelState.AddModelError("", "User not registered.");
                ViewBag.Error = "Incapaz de alterar a senha para o usuário especificado.";
                return(View("PasswordRecovery", payload));
            }

            Response.StatusCode = (int)HttpStatusCode.OK;
            TempData["Message"] = "Entre com sua nova senha.";
            return(RedirectToAction("Index"));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Изменение пароля пользователя с идентификатором <paramref name="id" />
        /// пользователем с Email <paramref name="currentUserEmail" />;
        /// В случае если пользователь меняет пароль самому себе он должен указать старый пароль
        /// </summary>
        /// <param name="id">Идентификатор пользователя для которого меняется пароль</param>
        /// <param name="currentUserEmail">Email польозователя который меняет пароль</param>
        /// <param name="model"></param>
        /// <returns></returns>
        public ServiceResponce ChangePassword(int id, string currentUserEmail, ChangePasswordModel model)
        {
            User user = _userRep.FindOneById(id);

            if (user == null)
            {
                return(ServiceResponce
                       .FromFailed()
                       .Add("error", "User with specified Id was not found"));
            }

            bool SelfChangePassword = false;

            if (user.UserName.Equals(currentUserEmail))
            {
                SelfChangePassword = true;
                if (!user.Password.Equals(PasswordService.GeneratePasswordHash(model.OldPassword)))
                {
                    return(ServiceResponce
                           .FromFailed()
                           .Add("error", "Incorrect OldPassword"));
                }
            }

            user.Password = PasswordService.GeneratePasswordHash(model.NewPassword);
            _userRep.Save(user);

            if (model.SendCopyPassword)
            {
                // Создаем задачу отправки сообщения в фоне и запускаем ее
                new Thread(send =>
                {
                    ChangePasswordEmailModel ChangePasswordEmailModel
                        = ChangePasswordEmailModelHelper.GetChangePasswordEmailModel(user.UserName, model.NewPassword, SelfChangePassword);
                    string ChangePasswordText = _templateServ
                                                .Run("Emails/ChangePassword", typeof(ChangePasswordEmailModel), ChangePasswordEmailModel);
                    EmailService.SendMail(ChangePasswordEmailModel, ChangePasswordText);
                }).Start();
            }

            return(ServiceResponce.FromSuccess());
        }
        public ActionResult Index(ProfileModel payload)
        {
            if (!ModelState.IsValid)
            {
                return(View(payload));
            }

            var EFUser = (User)Session["User"];

            if (EFUser == null)
            {
                ViewBag.Error = "Unable to update profile, due to user disabled or not found.";
                return(View(payload));
            }
            EFUser             = _auth.GetCredentials(EFUser.Email);
            EFUser.Name        = payload.Name;
            EFUser.Email       = payload.Email;
            EFUser.IsAnonymous = payload.IsAnonymous;

            _auth.UpdateCredentials(EFUser, payload.Password);
            Session["User"] = EFUser;

            // setup view model to fill email render the view as string to send via SMTP
            if (!string.IsNullOrEmpty(payload.Password))
            {
                var rootUrl = System.Web.HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);

                var changePasswordEmailModel = new ChangePasswordEmailModel
                {
                    RecipientDisplayName = EFUser.Name,
                    RecipientEmail       = EFUser.Email,
                    NewPassword          = payload.Password,
                    Site = rootUrl
                };
                var emailContentHtml = StringRenderer.RenderView(changePasswordViewPath, changePasswordEmailModel, false);
                _email.Send(emailContentHtml, changePasswordEmailModel);
            }

            ViewBag.Success = "Profile updated";
            return(View("Index", payload));
        }