diff options
author | Petr Vobornik <pvoborni@redhat.com> | 2012-05-03 10:48:23 +0200 |
---|---|---|
committer | Petr Vobornik <pvoborni@redhat.com> | 2012-06-04 10:45:07 +0200 |
commit | ea5ae4b1cf1aa912ca4b88a7f2dbb59594b28cdb (patch) | |
tree | 939e7599207e72a59f531c0a8cb4304f341b73cb | |
parent | 890151dca823cd06b2d6980e2b255c218a16e6a1 (diff) | |
download | freeipa-ea5ae4b1cf1aa912ca4b88a7f2dbb59594b28cdb.tar.gz freeipa-ea5ae4b1cf1aa912ca4b88a7f2dbb59594b28cdb.tar.xz freeipa-ea5ae4b1cf1aa912ca4b88a7f2dbb59594b28cdb.zip |
User password widget modified.
Currently the user password is shown as follows in the details page:
Password: Reset Password
This is inconsistent with the rest of the page because the 'Reset Password' is an action, not the value of the password.
Now password is shown as follows:
Password: ******* (if set)
Password: (if not set)
Reset password link was removed as well the dialog for reset password was removed from password widget. The dialog was moved to its own object and can be now showed independently. An action for showing this dialog should be created.
https://fedorahosted.org/freeipa/ticket/2248
-rw-r--r-- | install/ui/test/data/ipa_init.json | 1 | ||||
-rw-r--r-- | install/ui/user.js | 185 | ||||
-rw-r--r-- | ipalib/plugins/internal.py | 1 |
3 files changed, 114 insertions, 73 deletions
diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json index 7ceda5703..01201f69e 100644 --- a/install/ui/test/data/ipa_init.json +++ b/install/ui/test/data/ipa_init.json @@ -425,6 +425,7 @@ "current_password": "Current Password", "current_password_required": "Current password is required", "new_password": "New Password", + "new_password_required": "New password is required", "password_change_complete": "Password change complete", "password_must_match": "Passwords must match", "reset_password": "Reset Password", diff --git a/install/ui/user.js b/install/ui/user.js index 65d3de726..61db5315e 100644 --- a/install/ui/user.js +++ b/install/ui/user.js @@ -107,7 +107,8 @@ IPA.user.entity = function(spec) { 'uid', { factory: IPA.user_password_widget, - name: 'userpassword' + name: 'has_password', + metadata: IPA.get_entity_param('user', 'userpassword') }, { name: 'krbpasswordexpiration', @@ -430,118 +431,154 @@ IPA.user_adder_dialog = function(spec) { IPA.user_password_widget = function(spec) { spec = spec || {}; + spec.read_only = true; var that = IPA.input_widget(spec); + that.set_value = spec.set_value || '******'; + that.unset_value = spec.unset_value || ''; that.create = function(container) { that.widget_create(container); - $('<a/>', { - href: 'jslink', - title: 'userpassword', - text: IPA.messages.password.reset_password, - click: function() { - that.show_dialog(); - return false; - } + that.display_control = $('<label/>', { + name: that.name }).appendTo(container); }; - that.show_dialog = function() { - - var pkey = IPA.nav.get_state('user-pkey'); - var self_service = pkey === IPA.whoami.uid[0]; + that.update = function(values) { - var sections = []; - if (self_service) { - sections.push({ - fields: [ - { - name: 'current_password', - label: IPA.messages.password.current_password, - type: 'password' - } - ] - }); + if (values && values[0]) { + that.display_control.text(that.set_value); + } else { + that.display_control.text(that.unset_value); } + }; + + that.clear = function() { + that.display_control.text(''); + }; + + return that; +}; - sections.push({ +IPA.user_password_dialog = function(spec) { + + spec = spec || {}; + + spec.width = spec.width || 400; + spec.title = spec.title || IPA.messages.password.reset_password; + spec.sections = spec.sections || []; + + spec.sections.push( + { + name: 'input', fields: [ { + name: 'current_password', + label: IPA.messages.password.current_password, + type: 'password', + required: true + }, + { name: 'password1', label: IPA.messages.password.new_password, - type: 'password' + type: 'password', + required: true }, { name: 'password2', label: IPA.messages.password.verify_password, - type: 'password' + type: 'password', + required: true } ] }); - var dialog = IPA.dialog({ - entity: that.entity, - title: IPA.messages.password.reset_password, - width: 400, - sections: sections - }); + var that = IPA.dialog(spec); + that.get_pkey = function() { + return IPA.nav.get_state('user-pkey'); + }; - dialog.create_button({ - name: 'reset_password', - label: IPA.messages.password.reset_password, - click: function() { - - var record = {}; - dialog.save(record); + that.is_self_service = function() { + var pkey = that.get_pkey(); + var self_service = pkey === IPA.whoami.uid[0]; + return self_service; + }; - var current_password; + that.open = function() { - if (self_service) { - current_password = record.current_password[0]; - if (!current_password) { - alert(IPA.messages.password.current_password_required); - return; - } - } + var self_service = that.is_self_service(); + var section = that.widgets.get_widget('input'); - var new_password = record.password1[0]; - var repeat_password = record.password2[0]; + that.dialog_open(); + section.set_row_visible('current_password', self_service); + }; - if (new_password != repeat_password) { - alert(IPA.messages.password.password_must_match); - return; - } + that.create_buttons = function() { - that.set_password( - pkey, - current_password, - new_password, - function(data, text_status, xhr) { - alert(IPA.messages.password.password_change_complete); - dialog.close(); - // refresh password expiration field - var facet = IPA.current_entity.get_facet(); - facet.refresh(); - }, - function(xhr, text_status, error_thrown) { - dialog.close(); - } - ); - } + that.create_button({ + name: 'reset_password', + label: IPA.messages.password.reset_password, + click: that.on_reset_click }); - dialog.create_button({ + that.create_button({ name: 'cancel', label: IPA.messages.buttons.cancel, click: function() { - dialog.close(); + that.close(); } }); + }; + + that.on_reset_click = function() { + + var pkey = that.get_pkey(); + var self_service = that.is_self_service(); + + var record = {}; + that.save(record); - dialog.open(that.container); + var current_password; + + if (self_service) { + current_password = record.current_password[0]; + if (!current_password) { + alert(IPA.messages.password.current_password_required); + return; + } + } + + var new_password = record.password1[0]; + var repeat_password = record.password2[0]; + + if (IPA.is_empty(new_password)) { + alert(IPA.messages.password.new_password_required); + return; + } + + if (new_password != repeat_password) { + alert(IPA.messages.password.password_must_match); + return; + } + + that.set_password( + pkey, + current_password, + new_password, + function(data, text_status, xhr) { + alert(IPA.messages.password.password_change_complete); + that.close(); + // refresh password expiration field + var facet = IPA.current_entity.get_facet(); + facet.refresh(); + }, + function(xhr, text_status, error_thrown) { + that.close(); + } + ); }; that.set_password = function(pkey, current_password, password, on_success, on_error) { @@ -560,6 +597,8 @@ IPA.user_password_widget = function(spec) { command.execute(); }; + that.create_buttons(); + return that; }; diff --git a/ipalib/plugins/internal.py b/ipalib/plugins/internal.py index 30ab91640..2ed57f69a 100644 --- a/ipalib/plugins/internal.py +++ b/ipalib/plugins/internal.py @@ -564,6 +564,7 @@ class i18n_messages(Command): "current_password": _("Current Password"), "current_password_required": _("Current password is required"), "new_password": _("New Password"), + "new_password_required": _("New password is required"), "password_change_complete": _("Password change complete"), "password_must_match": _("Passwords must match"), "reset_password": _("Reset Password"), |