From e027878791e6fdb33e42a25e5d3f368efbbb732a Mon Sep 17 00:00:00 2001 From: Zhenguo Niu Date: Wed, 4 Dec 2013 16:03:56 +0800 Subject: [PATCH] Enable settings/change password on keystone v3 There is a new API in v3 for users to update their own password. Change-Id: I30e1f4682dab6e29968f38f04fa71e0e3720d5e1 Closes-Bug: #1239757 --- openstack_dashboard/api/keystone.py | 4 ++-- .../dashboards/settings/password/panel.py | 7 ++----- .../dashboards/settings/password/tests.py | 19 ++----------------- openstack_dashboard/test/settings.py | 3 +++ 4 files changed, 9 insertions(+), 24 deletions(-) diff --git a/openstack_dashboard/api/keystone.py b/openstack_dashboard/api/keystone.py index d38d2632f3..636e4cb660 100644 --- a/openstack_dashboard/api/keystone.py +++ b/openstack_dashboard/api/keystone.py @@ -396,11 +396,11 @@ def user_update_password(request, user, password, admin=True): def user_update_own_password(request, origpassword, password): client = keystoneclient(request, admin=False) + client.user_id = request.user.id if VERSIONS.active < 3: - client.user_id = request.user.id return client.users.update_own_password(origpassword, password) else: - return client.users.update(request.user.id, password=password) + return client.users.update_password(origpassword, password) def user_update_tenant(request, user, project, admin=True): diff --git a/openstack_dashboard/dashboards/settings/password/panel.py b/openstack_dashboard/dashboards/settings/password/panel.py index 863393e126..c9aba34512 100644 --- a/openstack_dashboard/dashboards/settings/password/panel.py +++ b/openstack_dashboard/dashboards/settings/password/panel.py @@ -18,7 +18,6 @@ from django.utils.translation import ugettext_lazy as _ import horizon -from openstack_dashboard.api import keystone from openstack_dashboard.dashboards.settings import dashboard @@ -26,7 +25,5 @@ class PasswordPanel(horizon.Panel): name = _("Change Password") slug = 'password' -# TODO(mrunge): remove restriction, when keystone v3 has a update own user -# function and checks passwords properly. -if keystone.VERSIONS.active == 2: - dashboard.Settings.register(PasswordPanel) + +dashboard.Settings.register(PasswordPanel) diff --git a/openstack_dashboard/dashboards/settings/password/tests.py b/openstack_dashboard/dashboards/settings/password/tests.py index f69005f592..6ed948d7ae 100644 --- a/openstack_dashboard/dashboards/settings/password/tests.py +++ b/openstack_dashboard/dashboards/settings/password/tests.py @@ -23,19 +23,14 @@ from mox import IsA # noqa from openstack_dashboard import api from openstack_dashboard.test import helpers as test -# TODO(mrunge): remove, when keystone v3 supports -# change_own_password, incl. password validation -kver = api.keystone.VERSIONS.active -if kver == 2: - INDEX_URL = reverse('horizon:settings:password:index') + +INDEX_URL = reverse('horizon:settings:password:index') class ChangePasswordTests(test.TestCase): @test.create_stubs({api.keystone: ('user_update_own_password', )}) def test_change_password(self): - if kver == 3: - self.skipTest('Password change in keystone v3 unsupported') api.keystone.user_update_own_password(IsA(http.HttpRequest), 'oldpwd', 'normalpwd',).AndReturn(None) @@ -50,8 +45,6 @@ class ChangePasswordTests(test.TestCase): self.assertNoFormErrors(res) def test_change_validation_passwords_not_matching(self): - if kver == 3: - self.skipTest('Password change in keystone v3 unsupported') formData = {'method': 'PasswordForm', 'current_password': 'currpasswd', 'new_password': 'testpassword', @@ -62,8 +55,6 @@ class ChangePasswordTests(test.TestCase): @test.create_stubs({api.keystone: ('user_update_own_password', )}) def test_change_password_shows_message_on_login_page(self): - if kver == 3: - self.skipTest('Password change in keystone v3 unsupported') api.keystone.user_update_own_password(IsA(http.HttpRequest), 'oldpwd', 'normalpwd').AndReturn(None) @@ -77,9 +68,3 @@ class ChangePasswordTests(test.TestCase): info_msg = "Password changed. Please log in again to continue." self.assertContains(res, info_msg) - - def test_on_keystone_v3_disabled(self): - try: - reverse('horizon:settings:password:index') - except NoReverseMatch: - pass diff --git a/openstack_dashboard/test/settings.py b/openstack_dashboard/test/settings.py index e2f5972f85..6e1f59f05f 100644 --- a/openstack_dashboard/test/settings.py +++ b/openstack_dashboard/test/settings.py @@ -211,3 +211,6 @@ FLAVOR_EXTRA_KEYS = { ('quota:outbound_average', 'Quota: Outbound average'), ] } + +# The openstack_auth.user.Token object isn't JSON-serializable ATM +SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'