summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEndi Sukma Dewata <edewata@redhat.com>2012-01-31 13:41:28 -0600
committerPetr Voborník <pvoborni@redhat.com>2012-02-01 15:53:38 +0100
commitafa1ab99cdb4313266aa8791fe8c543694a64790 (patch)
treefe49de5533bb58121731b5c7c0d8bcd595b3ede4
parentd56c8d98cc3d287271e53070c26f52888ff1f102 (diff)
downloadfreeipa.git-afa1ab99cdb4313266aa8791fe8c543694a64790.tar.gz
freeipa.git-afa1ab99cdb4313266aa8791fe8c543694a64790.tar.xz
freeipa.git-afa1ab99cdb4313266aa8791fe8c543694a64790.zip
Show password expiration date.
The user details page was modified to show the password expiration date next to the existing password field. Fixed problem resetting password in self-service mode. The JSON interface for the passwd command requires the username to be specified although the equivalent CLI command doesn't require it. Ticket #2064
-rw-r--r--install/ui/field.js21
-rw-r--r--install/ui/host.js40
-rwxr-xr-xinstall/ui/test/bin/update_ipa_init.sh1
-rw-r--r--install/ui/test/data/ipa_init.json1
-rw-r--r--install/ui/user.js29
-rw-r--r--install/ui/widget.js39
-rw-r--r--ipalib/plugins/internal.py1
7 files changed, 78 insertions, 54 deletions
diff --git a/install/ui/field.js b/install/ui/field.js
index c448c41c..38d71b47 100644
--- a/install/ui/field.js
+++ b/install/ui/field.js
@@ -34,6 +34,7 @@ IPA.field = function(spec) {
that.name = spec.name;
that.label = spec.label;
that.tooltip = spec.tooltip;
+ that.formatter = spec.formatter;
that.widget = null;
that.widget_name = spec.widget;
@@ -194,7 +195,25 @@ IPA.field = function(spec) {
};
that.update = function() {
- if(that.widget && that.widget.update) that.widget.update(that.values);
+
+ if (!that.widget || !that.widget.update) return;
+
+ var formatted_values;
+
+ // The formatter is currently only used on read-only fields only
+ // because it cannot parse formatted values back to internal values.
+ if (that.formatter && that.read_only) {
+ formatted_values = [];
+ for (var i=0; that.values && i<that.values.length; i++) {
+ var value = that.values[i];
+ var formatted_value = that.formatter.format(value);
+ formatted_values.push(formatted_value);
+ }
+ } else {
+ formatted_values = that.values;
+ }
+
+ that.widget.update(formatted_values);
};
that.get_update_info = function() {
diff --git a/install/ui/host.js b/install/ui/host.js
index 12748f67..299d147a 100644
--- a/install/ui/host.js
+++ b/install/ui/host.js
@@ -466,46 +466,6 @@ IPA.host_dnsrecord_entity_link_field = function(spec){
IPA.field_factories['host_dnsrecord_entity_link'] = IPA.host_dnsrecord_entity_link_field;
IPA.widget_factories['host_dnsrecord_entity_link'] = IPA.link_widget;
-/* Take an LDAP format date in UTC and format it */
-IPA.utc_date_column_formatter = function(spec) {
-
- spec = spec || {};
-
- var that = IPA.formatter(spec);
-
- that.format = function(value) {
-
- if (!value) return '';
-
- // verify length
- if (value.length != '20101119025910Z'.length) {
- return value;
- }
-
- /* We only handle GMT */
- if (value.charAt(value.length -1) !== 'Z') {
- return value;
- }
-
- var date = new Date();
-
- date.setUTCFullYear(
- value.substring(0, 4), // YYYY
- value.substring(4, 6)-1, // MM (0-11)
- value.substring(6, 8)); // DD (1-31)
-
- date.setUTCHours(
- value.substring(8, 10), // HH (0-23)
- value.substring(10, 12), // MM (0-59)
- value.substring(12, 14)); // SS (0-59)
-
- return date.toString();
- };
-
- return that;
-};
-
-
IPA.force_host_add_checkbox_widget = function(spec) {
var metadata = IPA.get_command_option('host_add', spec.name);
spec.label = metadata.label;
diff --git a/install/ui/test/bin/update_ipa_init.sh b/install/ui/test/bin/update_ipa_init.sh
index 26cbc967..11cd0374 100755
--- a/install/ui/test/bin/update_ipa_init.sh
+++ b/install/ui/test/bin/update_ipa_init.sh
@@ -43,6 +43,7 @@ json="{
curl -v\
-H "Content-Type: application/json"\
-H "Accept: applicaton/json"\
+ -H "Referer: https://`hostname`/ipa/xml"\
--negotiate\
--delegation always\
-u :\
diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json
index 0f6667fa..fc8ec06b 100644
--- a/install/ui/test/data/ipa_init.json
+++ b/install/ui/test/data/ipa_init.json
@@ -335,6 +335,7 @@
"contact": "Contact Settings",
"employee": "Employee Information",
"error_changing_status": "Error changing account status",
+ "krbpasswordexpiration": "Password expiration",
"mailing": "Mailing Address",
"misc": "Misc. Information",
"status_confirmation": "Are you sure you want to ${action} the user?<br/>The change will take effect immediately.",
diff --git a/install/ui/user.js b/install/ui/user.js
index a0cecc7b..b1dd8a61 100644
--- a/install/ui/user.js
+++ b/install/ui/user.js
@@ -82,6 +82,12 @@ IPA.user.entity = function(spec) {
factory: IPA.user_password_widget,
name: 'userpassword'
},
+ {
+ name: 'krbpasswordexpiration',
+ label: IPA.messages.objects.user.krbpasswordexpiration,
+ read_only: true,
+ formatter: IPA.utc_date_formatter()
+ },
'uidnumber',
'gidnumber',
'loginshell',
@@ -551,11 +557,11 @@ IPA.user_password_widget = function(spec) {
that.show_dialog = function() {
- that.pkey = IPA.nav.get_state('user-pkey');
- that.self_service = that.pkey === IPA.whoami.uid[0];
+ var pkey = IPA.nav.get_state('user-pkey');
+ var self_service = pkey === IPA.whoami.uid[0];
var sections = [];
- if(that.self_service) {
+ if (self_service) {
sections.push({
fields: [
{
@@ -600,7 +606,7 @@ IPA.user_password_widget = function(spec) {
var current_password;
- if (that.self_service) {
+ if (self_service) {
current_password = record.current_password[0];
if (!current_password) {
alert(IPA.messages.password.current_password_required);
@@ -617,11 +623,15 @@ IPA.user_password_widget = function(spec) {
}
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();
@@ -641,18 +651,11 @@ IPA.user_password_widget = function(spec) {
dialog.open(that.container);
};
- that.set_password = function(current_password, password, on_success, on_error) {
-
- var args;
- if (that.self_service) {
- args = [];
- } else {
- args = [that.pkey];
- }
+ that.set_password = function(pkey, current_password, password, on_success, on_error) {
var command = IPA.command({
method: 'passwd',
- args: args,
+ args: [ pkey ],
options: {
current_password: current_password,
password: password
diff --git a/install/ui/widget.js b/install/ui/widget.js
index 5ab28cb6..04c35bb6 100644
--- a/install/ui/widget.js
+++ b/install/ui/widget.js
@@ -1054,6 +1054,45 @@ IPA.boolean_status_formatter = function(spec) {
return that;
};
+/* Take an LDAP format date in UTC and format it */
+IPA.utc_date_formatter = function(spec) {
+
+ spec = spec || {};
+
+ var that = IPA.formatter(spec);
+
+ that.format = function(value) {
+
+ if (!value) return '';
+
+ // verify length
+ if (value.length != 'YYYYmmddHHMMSSZ'.length) {
+ return value;
+ }
+
+ /* We only handle GMT */
+ if (value.charAt(value.length -1) !== 'Z') {
+ return value;
+ }
+
+ var date = new Date();
+
+ date.setUTCFullYear(
+ value.substring(0, 4), // YYYY
+ value.substring(4, 6)-1, // mm (0-11)
+ value.substring(6, 8)); // dd (1-31)
+
+ date.setUTCHours(
+ value.substring(8, 10), // HH (0-23)
+ value.substring(10, 12), // MM (0-59)
+ value.substring(12, 14)); // SS (0-59)
+
+ return date.toString();
+ };
+
+ return that;
+};
+
/*
The entity name must be set in the spec either directly or via entity.name
*/
diff --git a/ipalib/plugins/internal.py b/ipalib/plugins/internal.py
index a2d8e98c..aaa01b7d 100644
--- a/ipalib/plugins/internal.py
+++ b/ipalib/plugins/internal.py
@@ -474,6 +474,7 @@ class i18n_messages(Command):
"contact": _("Contact Settings"),
"employee": _("Employee Information"),
"error_changing_status": _("Error changing account status"),
+ "krbpasswordexpiration": _("Password expiration"),
"mailing": _("Mailing Address"),
"misc": _("Misc. Information"),
"status_confirmation": _("Are you sure you want to ${action} the user?<br/>The change will take effect immediately."),