# HG changeset patch # User Marcin Kuzminski # Date 1361824072 -3600 # Node ID bbd72d82060a08805e23e5edb6c43086423be562 # Parent 80dc3a194d43524984483f679e4df0f14b07ba95 moved out password reset tasks from celery, it doesn't make any sense to keep them there, additionally they are broken in when executing _(), and url() calls. This fixes issue #572 diff -r 80dc3a194d43 -r bbd72d82060a rhodecode/lib/celerylib/tasks.py --- a/rhodecode/lib/celerylib/tasks.py Tue Feb 26 13:36:38 2013 +0100 +++ b/rhodecode/lib/celerylib/tasks.py Mon Feb 25 21:27:52 2013 +0100 @@ -247,72 +247,6 @@ log.info('LockHeld') return 'Task with key %s already running' % lockkey -@task(ignore_result=True) -@dbsession -def send_password_link(user_email): - from rhodecode.model.notification import EmailNotificationModel - - log = get_logger(send_password_link) - DBS = get_session() - - try: - user = User.get_by_email(user_email) - if user: - log.debug('password reset user found %s' % user) - link = url('reset_password_confirmation', key=user.api_key, - qualified=True) - reg_type = EmailNotificationModel.TYPE_PASSWORD_RESET - body = EmailNotificationModel().get_email_tmpl(reg_type, - **{'user':user.short_contact, - 'reset_url':link}) - log.debug('sending email') - run_task(send_email, user_email, - _("password reset link"), body) - log.info('send new password mail to %s' % user_email) - else: - log.debug("password reset email %s not found" % user_email) - except: - log.error(traceback.format_exc()) - return False - - return True - -@task(ignore_result=True) -@dbsession -def reset_user_password(user_email): - from rhodecode.lib import auth - - log = get_logger(reset_user_password) - DBS = get_session() - - try: - try: - user = User.get_by_email(user_email) - new_passwd = auth.PasswordGenerator().gen_password(8, - auth.PasswordGenerator.ALPHABETS_BIG_SMALL) - if user: - user.password = auth.get_crypt_password(new_passwd) - user.api_key = auth.generate_api_key(user.username) - DBS.add(user) - DBS.commit() - log.info('change password for %s' % user_email) - if new_passwd is None: - raise Exception('unable to generate new password') - except: - log.error(traceback.format_exc()) - DBS.rollback() - - run_task(send_email, user_email, - 'Your new password', - 'Your new RhodeCode password:%s' % (new_passwd)) - log.info('send new password mail to %s' % user_email) - - except: - log.error('Failed to update user password') - log.error(traceback.format_exc()) - - return True - @task(ignore_result=True) @dbsession diff -r 80dc3a194d43 -r bbd72d82060a rhodecode/model/user.py --- a/rhodecode/model/user.py Tue Feb 26 13:36:38 2013 +0100 +++ b/rhodecode/model/user.py Mon Feb 25 21:27:52 2013 +0100 @@ -42,6 +42,7 @@ UserEmailMap, UserIpMap from rhodecode.lib.exceptions import DefaultUserException, \ UserOwnsReposException +from rhodecode.model.meta import Session log = logging.getLogger(__name__) @@ -316,11 +317,61 @@ def reset_password_link(self, data): from rhodecode.lib.celerylib import tasks, run_task - run_task(tasks.send_password_link, data['email']) + from rhodecode.model.notification import EmailNotificationModel + user_email = data['email'] + try: + user = User.get_by_email(user_email) + if user: + log.debug('password reset user found %s' % user) + link = url('reset_password_confirmation', key=user.api_key, + qualified=True) + reg_type = EmailNotificationModel.TYPE_PASSWORD_RESET + body = EmailNotificationModel().get_email_tmpl(reg_type, + **{'user': user.short_contact, + 'reset_url': link}) + log.debug('sending email') + run_task(tasks.send_email, user_email, + _("password reset link"), body, body) + log.info('send new password mail to %s' % user_email) + else: + log.debug("password reset email %s not found" % user_email) + except: + log.error(traceback.format_exc()) + return False + + return True def reset_password(self, data): from rhodecode.lib.celerylib import tasks, run_task - run_task(tasks.reset_user_password, data['email']) + from rhodecode.lib import auth + user_email = data['email'] + try: + try: + user = User.get_by_email(user_email) + new_passwd = auth.PasswordGenerator().gen_password(8, + auth.PasswordGenerator.ALPHABETS_BIG_SMALL) + if user: + user.password = auth.get_crypt_password(new_passwd) + user.api_key = auth.generate_api_key(user.username) + Session().add(user) + Session().commit() + log.info('change password for %s' % user_email) + if new_passwd is None: + raise Exception('unable to generate new password') + except: + log.error(traceback.format_exc()) + Session().rollback() + + run_task(tasks.send_email, user_email, + _('Your new password'), + _('Your new RhodeCode password:%s') % (new_passwd)) + log.info('send new password mail to %s' % user_email) + + except: + log.error('Failed to update user password') + log.error(traceback.format_exc()) + + return True def fill_data(self, auth_user, user_id=None, api_key=None): """ diff -r 80dc3a194d43 -r bbd72d82060a rhodecode/templates/email_templates/password_reset.html --- a/rhodecode/templates/email_templates/password_reset.html Tue Feb 26 13:36:38 2013 +0100 +++ b/rhodecode/templates/email_templates/password_reset.html Mon Feb 25 21:27:52 2013 +0100 @@ -1,12 +1,11 @@ ## -*- coding: utf-8 -*- <%inherit file="main.html"/> -${_('Hello')} ${user} - -${_('We received a request to create a new password for your account.')} - -${_('You can generate it by clicking following URL')}: - +

${_('Hello %s') % user}

+
${_('We received a request to create a new password for your account.')}
+
${_('You can generate it by clicking following URL')}:
+
 ${reset_url}
-
-${_("If you didn't request new password please ignore this email.")}
+
+
+${_("If you did not request new password please ignore this email.")}