Commit 1ab15f6f authored by Jérome Perrin's avatar Jérome Perrin

authentication_policy: py3

parent b8dd6c47
...@@ -29,9 +29,9 @@ ...@@ -29,9 +29,9 @@
############################################################################## ##############################################################################
from functools import partial from functools import partial
import io
import unittest import unittest
import six.moves.urllib.parse import six.moves.urllib.parse
from six.moves import cStringIO as StringIO
import time import time
import six.moves.http_client import six.moves.http_client
import mock import mock
...@@ -237,13 +237,13 @@ class TestAuthenticationPolicy(ERP5TypeTestCase): ...@@ -237,13 +237,13 @@ class TestAuthenticationPolicy(ERP5TypeTestCase):
self.tic() self.tic()
# password change date should be saved as well hashed old password value # password change date should be saved as well hashed old password value
old_password = login.getPassword() old_password = login.getPassword().decode()
self.assertSameSet([old_password], [x.getPassword() for x in self._getPasswordEventList(login)]) self.assertSameSet([old_password], [x.getPassword() for x in self._getPasswordEventList(login)])
# .. test one more time to check history of password is saved in a list # .. test one more time to check history of password is saved in a list
login.setPassword('123456789') login.setPassword('123456789')
self.tic() self.tic()
old_password1 = login.getPassword() old_password1 = login.getPassword().decode()
# password change date should be saved as well hashed old password value # password change date should be saved as well hashed old password value
self.assertSameSet([old_password1, old_password], [x.getPassword() for x in self._getPasswordEventList(login)]) self.assertSameSet([old_password1, old_password], [x.getPassword() for x in self._getPasswordEventList(login)])
...@@ -251,29 +251,29 @@ class TestAuthenticationPolicy(ERP5TypeTestCase): ...@@ -251,29 +251,29 @@ class TestAuthenticationPolicy(ERP5TypeTestCase):
# other methods (_setPassword)... # other methods (_setPassword)...
login._setPassword('123456789-1') login._setPassword('123456789-1')
self.tic() self.tic()
old_password2 = login.getPassword() old_password2 = login.getPassword().decode()
self.assertSameSet([old_password2, old_password1, old_password], \ self.assertSameSet([old_password2, old_password1, old_password], \
[x.getPassword() for x in self._getPasswordEventList(login)]) [x.getPassword() for x in self._getPasswordEventList(login)])
# other methods (_forceSetPassword)... # other methods (_forceSetPassword)...
login._forceSetPassword('123456789-2') login._forceSetPassword('123456789-2')
self.tic() self.tic()
old_password3 = login.getPassword() old_password3 = login.getPassword().decode()
self.assertSameSet([old_password3, old_password2, old_password1, old_password], \ self.assertSameSet([old_password3, old_password2, old_password1, old_password], \
[x.getPassword() for x in self._getPasswordEventList(login)]) [x.getPassword() for x in self._getPasswordEventList(login)])
# other methods (setEncodedPassword)... # other methods (setEncodedPassword)...
login.setEncodedPassword('123456789-3') login.setEncodedPassword(b'123456789-3')
self.tic() self.tic()
old_password4 = login.getPassword() old_password4 = login.getPassword().decode()
self.assertSameSet([old_password4, old_password3, old_password2, old_password1, old_password], \ self.assertSameSet([old_password4, old_password3, old_password2, old_password1, old_password], \
[x.getPassword() for x in self._getPasswordEventList(login)]) [x.getPassword() for x in self._getPasswordEventList(login)])
# other methods (edit)... # other methods (edit)...
login.edit(password = '123456789-4') login.edit(password = '123456789-4')
self.tic() self.tic()
old_password5 = login.getPassword() old_password5 = login.getPassword().decode()
self.assertSameSet([old_password5, old_password4, old_password3, old_password2, old_password1, old_password], \ self.assertSameSet([old_password5, old_password4, old_password3, old_password2, old_password1, old_password], \
[x.getPassword() for x in self._getPasswordEventList(login)]) [x.getPassword() for x in self._getPasswordEventList(login)])
...@@ -653,7 +653,7 @@ class TestAuthenticationPolicy(ERP5TypeTestCase): ...@@ -653,7 +653,7 @@ class TestAuthenticationPolicy(ERP5TypeTestCase):
self.tic() self.tic()
_, (to,), message = self.portal.MailHost._last_message _, (to,), message = self.portal.MailHost._last_message
self.assertEqual(to, 'user@example.com') self.assertEqual(to, 'user@example.com')
self.assertIn('Password Recovery', message) self.assertIn(b'Password Recovery', message)
def test_HttpRequest(self): def test_HttpRequest(self):
""" """
...@@ -678,7 +678,7 @@ class TestAuthenticationPolicy(ERP5TypeTestCase): ...@@ -678,7 +678,7 @@ class TestAuthenticationPolicy(ERP5TypeTestCase):
portal.absolute_url_path() + '/view', portal.absolute_url_path() + '/view',
basic='test-05:used_ALREADY_1234', basic='test-05:used_ALREADY_1234',
) )
self.assertIn('Welcome to ERP5', response.getBody()) self.assertIn(b'Welcome to ERP5', response.getBody())
self.assertFalse(login.isLoginBlocked()) self.assertFalse(login.isLoginBlocked())
publish = partial( publish = partial(
...@@ -749,13 +749,13 @@ class TestAuthenticationPolicy(ERP5TypeTestCase): ...@@ -749,13 +749,13 @@ class TestAuthenticationPolicy(ERP5TypeTestCase):
portal.absolute_url_path() + '/view', portal.absolute_url_path() + '/view',
basic='test-05:used_ALREADY_1234', basic='test-05:used_ALREADY_1234',
) )
self.assertIn('Welcome to ERP5', response.getBody()) self.assertIn(b'Welcome to ERP5', response.getBody())
# test external redirection prevention # test external redirection prevention
response = self.publish( response = self.publish(
portal.absolute_url_path() + '/logged_in', portal.absolute_url_path() + '/logged_in',
basic='test-05:used_ALREADY_1234', basic='test-05:used_ALREADY_1234',
stdin=StringIO(six.moves.urllib.parse.urlencode({'came_from': 'https://www.erp5.com'})), stdin=io.BytesIO(six.moves.urllib.parse.urlencode({'came_from': 'https://www.erp5.com'}).encode()),
request_method='POST', request_method='POST',
) )
redirect_url = six.moves.urllib.parse.urlparse(response.getHeader("Location")) redirect_url = six.moves.urllib.parse.urlparse(response.getHeader("Location"))
...@@ -818,7 +818,7 @@ class TestAuthenticationPolicy(ERP5TypeTestCase): ...@@ -818,7 +818,7 @@ class TestAuthenticationPolicy(ERP5TypeTestCase):
def submit_reset_password_dialog(new_password): def submit_reset_password_dialog(new_password):
return self.publish( return self.publish(
'%s/portal_password' % self.portal.getPath(), '%s/portal_password' % self.portal.getPath(),
stdin=StringIO(six.moves.urllib.parse.urlencode({ stdin=io.BytesIO(six.moves.urllib.parse.urlencode({
'Base_callDialogMethod:method': '', 'Base_callDialogMethod:method': '',
'dialog_id': 'PasswordTool_viewResetPassword', 'dialog_id': 'PasswordTool_viewResetPassword',
'dialog_method': 'PasswordTool_changeUserPassword', 'dialog_method': 'PasswordTool_changeUserPassword',
...@@ -826,15 +826,15 @@ class TestAuthenticationPolicy(ERP5TypeTestCase): ...@@ -826,15 +826,15 @@ class TestAuthenticationPolicy(ERP5TypeTestCase):
'field_your_password': new_password, 'field_your_password': new_password,
'field_password_confirm': new_password, 'field_password_confirm': new_password,
'field_your_password_key': reset_key, 'field_your_password_key': reset_key,
})), }).encode()),
request_method="POST", request_method="POST",
handle_errors=False) handle_errors=False)
ret = submit_reset_password_dialog('alice') ret = submit_reset_password_dialog('alice')
self.assertEqual(six.moves.http_client.OK, ret.getStatus()) self.assertEqual(six.moves.http_client.OK, ret.getStatus())
self.assertIn( self.assertIn(
'<span class="error">You can not use any parts of your ' b'<span class="error">You can not use any parts of your '
'first and last name in password.</span>', b'first and last name in password.</span>',
ret.getBody()) ret.getBody())
# the messages are translated # the messages are translated
...@@ -849,21 +849,21 @@ class TestAuthenticationPolicy(ERP5TypeTestCase): ...@@ -849,21 +849,21 @@ class TestAuthenticationPolicy(ERP5TypeTestCase):
ret = submit_reset_password_dialog('alice') ret = submit_reset_password_dialog('alice')
self.assertEqual(six.moves.http_client.OK, ret.getStatus()) self.assertEqual(six.moves.http_client.OK, ret.getStatus())
self.assertIn( self.assertIn(
'<span class="error">Yöü can not ... translated</span>', '<span class="error">Yöü can not ... translated</span>'.encode('utf-8'),
ret.getBody()) ret.getBody())
# now with a password complying to the policy # now with a password complying to the policy
ret = submit_reset_password_dialog('ok') ret = submit_reset_password_dialog('ok')
self.assertEqual(six.moves.http_client.FOUND, ret.getStatus()) self.assertEqual(six.moves.http_client.FOUND, ret.getStatus())
redirect_url = urlparse.urlparse(ret.getHeader("Location")) redirect_url = six.moves.urllib.parse.urlparse(ret.getHeader("Location"))
self.assertEqual(redirect_url.path, '{}/login_form'.format(self.portal.absolute_url_path())) self.assertEqual(redirect_url.path, '{}/login_form'.format(self.portal.absolute_url_path()))
redirect_url_params = urlparse.parse_qsl(redirect_url.query) redirect_url_params = six.moves.urllib.parse.parse_qsl(redirect_url.query)
self.assertIn(('portal_status_message', 'Password changed.'), redirect_url_params) self.assertIn(('portal_status_message', 'Password changed.'), redirect_url_params)
self.assertIn(('portal_status_level', 'success'), redirect_url_params) self.assertIn(('portal_status_level', 'success'), redirect_url_params)
def test_PreferenceTool_changePassword_checks_policy(self): def test_PreferenceTool_changePassword_checks_policy(self):
person = self.createUser(self.id(), password='current') person = self.createUser(self.id(), password='current')
person.newContent(portal_type = 'Assignment').open() person.newContent(portal_type='Assignment').open()
login = person.objectValues(portal_type='ERP5 Login')[0] login = person.objectValues(portal_type='ERP5 Login')[0]
preference = self.portal.portal_catalog.getResultValue( preference = self.portal.portal_catalog.getResultValue(
portal_type='System Preference', portal_type='System Preference',
...@@ -876,14 +876,14 @@ class TestAuthenticationPolicy(ERP5TypeTestCase): ...@@ -876,14 +876,14 @@ class TestAuthenticationPolicy(ERP5TypeTestCase):
return self.publish( return self.publish(
'%s/portal_preferences' % self.portal.getPath(), '%s/portal_preferences' % self.portal.getPath(),
basic='%s:current' % self.id(), basic='%s:current' % self.id(),
stdin=StringIO(six.moves.urllib.parse.urlencode({ stdin=io.BytesIO(six.moves.urllib.parse.urlencode({
'Base_callDialogMethod:method': '', 'Base_callDialogMethod:method': '',
'dialog_id': 'PreferenceTool_viewChangePasswordDialog', 'dialog_id': 'PreferenceTool_viewChangePasswordDialog',
'dialog_method': 'PreferenceTool_setNewPassword', 'dialog_method': 'PreferenceTool_setNewPassword',
'field_your_current_password': 'current', 'field_your_current_password': 'current',
'field_your_new_password': new_password, 'field_your_new_password': new_password,
'field_password_confirm': new_password, 'field_password_confirm': new_password,
})), }).encode()),
request_method="POST", request_method="POST",
handle_errors=False) handle_errors=False)
...@@ -891,7 +891,7 @@ class TestAuthenticationPolicy(ERP5TypeTestCase): ...@@ -891,7 +891,7 @@ class TestAuthenticationPolicy(ERP5TypeTestCase):
ret = submit_change_password_dialog('short') ret = submit_change_password_dialog('short')
self.assertEqual(six.moves.http_client.OK, ret.getStatus()) self.assertEqual(six.moves.http_client.OK, ret.getStatus())
self.assertIn( self.assertIn(
'<span class="error">Too short.</span>', b'<span class="error">Too short.</span>',
ret.getBody()) ret.getBody())
# the messages are translated # the messages are translated
...@@ -906,7 +906,7 @@ class TestAuthenticationPolicy(ERP5TypeTestCase): ...@@ -906,7 +906,7 @@ class TestAuthenticationPolicy(ERP5TypeTestCase):
ret = submit_change_password_dialog('short') ret = submit_change_password_dialog('short')
self.assertEqual(six.moves.http_client.OK, ret.getStatus()) self.assertEqual(six.moves.http_client.OK, ret.getStatus())
self.assertIn( self.assertIn(
'<span class="error">Töü short ... translated</span>', '<span class="error">Töü short ... translated</span>'.encode('utf-8'),
ret.getBody()) ret.getBody())
# if for some reason, PreferenceTool_setNewPassword is called directly, # if for some reason, PreferenceTool_setNewPassword is called directly,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment