aboutsummaryrefslogtreecommitdiff
path: root/rhodecode/model/user.py
diff options
context:
space:
mode:
authorMarcin Kuzminski <marcin@python-works.com>2013-02-25 21:27:52 +0100
committerMarcin Kuzminski <marcin@python-works.com>2013-02-25 21:27:52 +0100
commit7bb8ad3aa20be84b03fd34f080783f76c96e1861 (patch)
tree9bbdc5b04e994d67b598687ade0bee204cf710a1 /rhodecode/model/user.py
parentdb2d4d85d3fc82bdb4d630efa992381530cf5961 (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.py55
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):
"""