diff options
author | Marcin Kuzminski <marcin@python-works.com> | 2013-02-25 21:27:52 +0100 |
---|---|---|
committer | Marcin Kuzminski <marcin@python-works.com> | 2013-02-25 21:27:52 +0100 |
commit | 7bb8ad3aa20be84b03fd34f080783f76c96e1861 (patch) | |
tree | 9bbdc5b04e994d67b598687ade0bee204cf710a1 /rhodecode/model/user.py | |
parent | db2d4d85d3fc82bdb4d630efa992381530cf5961 (diff) |
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
--HG--
branch : beta
Diffstat (limited to 'rhodecode/model/user.py')
-rw-r--r-- | rhodecode/model/user.py | 55 |
1 files changed, 53 insertions, 2 deletions
diff --git a/rhodecode/model/user.py b/rhodecode/model/user.py index 453c6472..956d4a29 100644 --- a/rhodecode/model/user.py +++ b/rhodecode/model/user.py @@ -42,6 +42,7 @@ from rhodecode.model.db import User, UserRepoToPerm, Repository, Permission, \ UserEmailMap, UserIpMap from rhodecode.lib.exceptions import DefaultUserException, \ UserOwnsReposException +from rhodecode.model.meta import Session log = logging.getLogger(__name__) @@ -316,11 +317,61 @@ class UserModel(BaseModel): 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): """ |