示例#1
0
        public void TestSendPlainTextOnlyOff()
        {
            // Create a member.

            var member = _memberAccountsCommand.CreateTestMember(Email, FirstName, LastName);

            // Send.

            var communication = new PasswordReminderEmail(member, Email, NewPassword);

            _emailsCommand.TrySend(communication);

            // Should get both html and plain text versions.

            var email = _emailServer.AssertEmailSent();

            Assert.AreEqual("", email.Body);
            email.AssertViewCount(2);

            // Plain view should be first so it is shown properly in gmail / iPhone etc.

            Assert.AreEqual(MediaTypeNames.Text.Plain, email.AlternateViews[0].MediaType);
            Assert.AreEqual(MediaTypeNames.Text.Html, email.AlternateViews[1].MediaType);

            email.AssertView(MediaTypeNames.Text.Html, GetBody(communication, member, GetContent(communication, member, NewPassword)));
            email.AssertView(MediaTypeNames.Text.Plain, GetPlainBody(communication, GetPlainContent(communication, member, NewPassword)));
            Assert.AreEqual(email.GetHtmlView().Body, GetBody(communication, member, GetContent(communication, member, NewPassword)));
            Assert.AreEqual(email.GetPlainTextView().Body, GetPlainBody(communication, GetPlainContent(communication, member, NewPassword)));
        }
        public ActionResult ChangePassword(Guid id, MemberLoginModel memberLogin, [Bind(Include = "SendPasswordEmail")] CheckBoxValue sendPasswordEmail)
        {
            var member = _membersQuery.GetMember(id);

            if (member == null)
            {
                return(NotFound("member", "id", id));
            }

            var credentials = _loginCredentialsQuery.GetCredentials(member.Id);

            if (credentials == null)
            {
                return(NotFound("member", "id", id));
            }

            try
            {
                // Validate.

                memberLogin.SendPasswordEmail = sendPasswordEmail.IsChecked;
                memberLogin.Validate();

                // Update.

                credentials.PasswordHash       = LoginCredentials.HashToString(memberLogin.Password);
                credentials.MustChangePassword = true;
                _loginCredentialsCommand.UpdateCredentials(member.Id, credentials, User.Id().Value);

                string message;
                if (memberLogin.SendPasswordEmail)
                {
                    var reminderEmail = new PasswordReminderEmail(member, credentials.LoginId, memberLogin.Password);
                    _emailsCommand.TrySend(reminderEmail);
                    message = "The password has been reset and an email has been sent.";
                }
                else
                {
                    message = "The password has been reset.";
                }

                return(RedirectToRouteWithConfirmation(MembersRoutes.Edit, new { id }, message));
            }
            catch (UserException ex)
            {
                ModelState.AddModelError(ex, new StandardErrorHandler());
            }

            memberLogin.LoginId = credentials.LoginId;
            return(View("Edit", new UserModel <IMember, MemberLoginModel>
            {
                User = _membersQuery.GetMember(id),
                UserLogin = memberLogin
            }));
        }
示例#3
0
        void ISecurityHandler.OnPasswordReset(bool isGenerated, Guid userId, string loginId, string password)
        {
            if (!isGenerated)
            {
                return;
            }

            var contact = _usersQuery.GetUser(userId);

            if (contact == null)
            {
                return;
            }

            var reminderEmail = new PasswordReminderEmail(contact, loginId, password);

            _emailsCommand.TrySend(reminderEmail, null);
        }
示例#4
0
        public void TestEmailAlternateViewsContents()
        {
            // Create a member.

            Member member = _memberAccountsCommand.CreateTestMember(Email, FirstName, LastName);

            // Send.

            var communication = new PasswordReminderEmail(member, Email, NewPassword);

            _emailsCommand.TrySend(communication);

            // Check.

            var email = _emailServer.AssertEmailSent();

            Assert.AreEqual("", email.Body);
            email.AssertViewCount(2);
            email.AssertView(MediaTypeNames.Text.Html, GetBody(communication, member, GetContent(communication, member, NewPassword)));
            email.AssertView(MediaTypeNames.Text.Plain, GetPlainBody(communication, GetPlainContent(communication, member, NewPassword)));
        }