Skip to content

Commit

Permalink
[#2379] Add reset for reset_key on successful password change
Browse files Browse the repository at this point in the history
Test adapted for older CKAN versions
  • Loading branch information
amercader committed May 11, 2015
1 parent c844fb9 commit ded3400
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 2 deletions.
3 changes: 1 addition & 2 deletions ckan/controllers/user.py
Expand Up @@ -399,8 +399,6 @@ def request_reset(self):

def perform_reset(self, id):
# FIXME 403 error for invalid key is a non helpful page
# FIXME We should reset the reset key when it is used to prevent
# reuse of the url
context = {'model': model, 'session': model.Session,
'user': c.user,
'keep_sensitive_data': True}
Expand Down Expand Up @@ -430,6 +428,7 @@ def perform_reset(self, id):
user_dict['password'] = new_password
user_dict['reset_key'] = c.reset_key
user = get_action('user_update')(context, user_dict)
mailer.create_reset_key(user_obj)

h.flash_success(_("Your password has been reset."))
h.redirect_to('/')
Expand Down
20 changes: 20 additions & 0 deletions ckan/tests/functional/test_user.py
Expand Up @@ -935,3 +935,23 @@ def test_perform_reset_user_password_link_user_incorrect(self):
id='randomness', # i.e. incorrect
key='randomness')
res = self.app.get(offset, status=404)

def test_perform_reset_for_key_change(self):
from ckan.lib.mailer import create_reset_key

CreateTestData.create_user('jack', email='a@a.com')
user = model.User.by_name(u'jack')
create_reset_key(user)
key = user.reset_key
password = 'password'
params = {'password1': password, 'password2': password}

offset = url_for(controller='user',
action='perform_reset',
id=user.id,
key=user.reset_key)

res = self.app.post(offset, params=params, extra_environ={'REMOTE_USER': str(user.name)})

user = model.User.by_name(u'jack')
assert key != user.reset_key

0 comments on commit ded3400

Please sign in to comment.