diff --git a/scribeengine/controllers/account.py b/scribeengine/controllers/account.py index 9df759a..6545d1a 100644 --- a/scribeengine/controllers/account.py +++ b/scribeengine/controllers/account.py @@ -74,6 +74,36 @@ class AccountController(BaseController): h.flash.set_message(u'There was a problem updating your account.', u'error') h.redirect_to(h.url_for(controller=u'account')) + @authenticate() + def password(self): + c.page_title = u'Your Password' + return render(u'/account/password.mako') + + @jsvalidate(u'account-password') + def password_jsschema(self): + return { + u'password-password': JSString(required=True, message=u'You haven\'t typed in a password.'), + u'password-confirm': JSString(required=True, equalTo=u'#password-password', message=u'Your passwords don\'t match.') + } + + def password_schema(self): + return { + 'password-password': UnicodeString(not_empty=True, messages={'empty': u'You haven\'t typed in a password.'}), + 'confirm-password': [FieldsMatch('password-password', 'password-confirm', messages={'invalid': u'Your passwords don\'t match.'})] + } + + @authenticate() + def password_POST(self): + password_hash = utils.hash_password(c.form_values[u'password-password']) + log.debug('Old Hash: "%s"', c.current_user.password) + log.debug('New Hash: "%s"', password_hash) + c.current_user.password = password_hash + c.current_user.modified = datetime.now() + Session.add(c.current_user) + Session.commit() + h.flash.set_message(u'Successfully updated your password.', u'success') + h.redirect_to('/account/password') + def register(self): c.page_title = u'Register' return render(u'/account/register.mako') @@ -207,7 +237,10 @@ class AccountController(BaseController): u'e-mail.', u'success') h.redirect_to('/account/login') - def password(self, id=None): + def resetpassword(self, id=None): + """ + Reset your password. + """ if not id or not request.GET.get(u'code'): h.flash.set_message(u'There was a problem with your activation code, please reset your password again.', u'error') h.redirect_to(h.url_for(controller=u'account', action=u'login')) @@ -218,33 +251,35 @@ class AccountController(BaseController): if c.user.activation_key != request.GET.get(u'code'): h.flash.set_message(u'There was a problem with your activation code, please reset your password again.', u'error') h.redirect_to(h.url_for(controller=u'account', action=u'login')) - c.page_title = u'Change Password' - return render(u'/account/password.mako') + c.page_title = u'Reset Password' + return render(u'/account/resetpassword.mako') - @jsvalidate(u'account-password') - def password_jsschema(self): + @jsvalidate(u'account-resetpassword') + def resetpassword_jsschema(self): return { u'password-password': JSString(required=True, message=u'You haven\'t typed in a password.'), u'password-confirm': JSString(required=True, equalTo=u'#password-password', message=u'Your passwords don\'t match.') } - def password_schema(self): + def resetpassword_schema(self): return { 'password-password': UnicodeString(not_empty=True, messages={'empty': u'You haven\'t typed in a password.'}), 'confirm-password': [FieldsMatch('password-password', 'password-confirm', messages={'invalid': u'Your passwords don\'t match.'})] } - def password_POST(self, id=None): + def resetpassword_POST(self, id=None): user = Session.query(User).get(id) if not user: - h.flash.set_message(u'There was a problem with your account, please reset your password again.', u'error') + h.flash.set_message(u'There was a problem with your account, ' + u'please reset your password again.', u'error') h.redirect_to(h.url_for(controller=u'account', action=u'login')) user.password = utils.hash_password(c.form_values[u'password-password']) user.activation_key = None user.modified = datetime.now() Session.add(user) Session.commit() - h.flash.set_message(u'Successfully updated your password. Please login with your new password.', u'success') + h.flash.set_message(u'Successfully updated your password. Please login ' + u'with your new password.', u'success') h.redirect_to('/account/login') def login(self): diff --git a/scribeengine/templates/account/password.mako b/scribeengine/templates/account/password.mako index 3eaa03e..c6cc1df 100644 --- a/scribeengine/templates/account/password.mako +++ b/scribeengine/templates/account/password.mako @@ -1,9 +1,9 @@ <%inherit file="/base.mako"/> <%include file="/flash.mako"/>
-

New password

+

Change password

<%include file="/errors.mako"/> -
+
diff --git a/scribeengine/templates/account/resetpassword.mako b/scribeengine/templates/account/resetpassword.mako new file mode 100644 index 0000000..f72c855 --- /dev/null +++ b/scribeengine/templates/account/resetpassword.mako @@ -0,0 +1,21 @@ +<%inherit file="/base.mako"/> + <%include file="/flash.mako"/> +
+

Reset password

+ <%include file="/errors.mako"/> + +
+
+ + +
+
+ + +
+
+ +
+
+ +
diff --git a/scribeengine/templates/email/reset.mako b/scribeengine/templates/email/reset.mako index 40ab706..529cd6f 100644 --- a/scribeengine/templates/email/reset.mako +++ b/scribeengine/templates/email/reset.mako @@ -4,7 +4,7 @@ You have just reset your password on ${c.blog_title}, but before you continue, you will need to activate your account. You can do this by simply clicking on the link below, or copying and pasting it into your browser. -${c.blog_host}${h.url_for(controller=u'account', action=u'password', id=c.user.id, code=c.user.activation_key)} +${c.blog_host}${h.url_for(controller=u'account', action=u'resetpassword', id=c.user.id, code=c.user.activation_key)} Kind regards,