diff --git a/pagure/lib/login.py b/pagure/lib/login.py index 937e332..0e8bbae 100644 --- a/pagure/lib/login.py +++ b/pagure/lib/login.py @@ -11,9 +11,9 @@ import random import string +import hashlib import bcrypt -import hashlib import pagure from pagure.lib import model from kitchen.text.converters import to_unicode, to_bytes @@ -51,7 +51,7 @@ def get_session_by_visitkey(session, sessionid): def generate_hashed_value(password): """ Generate hash value for password """ - return '$2$' + bcrypt.hashpw(to_unicode(password).encode('UTF_8'), + return '$2$' + bcrypt.hashpw(password.encode('UTF_8'), bcrypt.gensalt()) @@ -66,7 +66,7 @@ def check_password(entered_password, user_password, seed=None): _, version, user_password = user_password.split('$', 2) if version == '2': - password = bcrypt.hashpw(to_unicode(entered_password).encode('UTF_8'), + password = bcrypt.hashpw(entered_password.encode('UTF_8'), user_password) elif version == '1': diff --git a/tests/test_pagure_flask_ui_login.py b/tests/test_pagure_flask_ui_login.py index 940b258..a231499 100644 --- a/tests/test_pagure_flask_ui_login.py +++ b/tests/test_pagure_flask_ui_login.py @@ -86,6 +86,15 @@ class PagureFlaskLogintests(tests.SimplePagureTest): 'confirm_password': 'barpass', } + # This has all the data needed + data_non_ascii = { + 'user': 'foo_bar', + 'fullname': 'user foo', + 'email_address': 'bar@foo.com', + 'password': 'ö', + 'confirm_password': 'ö', + } + # Submit this form - Doesn't work since there is no csrf token output = self.app.post('/user/new', data=data) self.assertEqual(output.status_code, 200) @@ -121,9 +130,18 @@ class PagureFlaskLogintests(tests.SimplePagureTest): 'User created, please check your email to activate the account', output.data) + # Submit the form with proper data with password being non-ascii + data_non_ascii['csrf_token'] = csrf_token + output = self.app.post('/user/new', data=data_non_ascii, follow_redirects=True) + self.assertEqual(output.status_code, 200) + self.assertIn('