diff options
author | Endi S. Dewata <edewata@redhat.com> | 2011-08-23 21:51:31 -0500 |
---|---|---|
committer | Endi S. Dewata <edewata@redhat.com> | 2011-08-26 15:19:12 +0000 |
commit | 79f5c5b2aefeb7f886a6e0f8a88d8fa8661188f7 (patch) | |
tree | 865ff8be3da650ecd3306cd0c5b6e0090f253775 /install/ui/host.js | |
parent | 586e2eaf6c02205ca6d335393bcebd8f29e345e7 (diff) | |
download | freeipa-79f5c5b2aefeb7f886a6e0f8a88d8fa8661188f7.tar.gz freeipa-79f5c5b2aefeb7f886a6e0f8a88d8fa8661188f7.tar.xz freeipa-79f5c5b2aefeb7f886a6e0f8a88d8fa8661188f7.zip |
Fixed host OTP status.
The host details page has been modified to show the status of the OTP.
Setting a new OTP is now done using a dialog box.
Ticket #1710
Diffstat (limited to 'install/ui/host.js')
-rw-r--r-- | install/ui/host.js | 255 |
1 files changed, 171 insertions, 84 deletions
diff --git a/install/ui/host.js b/install/ui/host.js index 5a786b016..52a0e8f92 100644 --- a/install/ui/host.js +++ b/install/ui/host.js @@ -56,9 +56,14 @@ IPA.entity_factories.host = function () { name:'enrollment', fields:[ { - factory: IPA.host_provisioning_status_widget, - 'name': 'provisioning_status', - label: IPA.messages.objects.host.status + factory: IPA.host_keytab_widget, + 'name': 'has_keytab', + label: IPA.messages.objects.host.keytab + }, + { + factory: IPA.host_password_widget, + 'name': 'has_password', + label: IPA.messages.objects.host.password } ] }, @@ -409,7 +414,7 @@ IPA.force_host_add_checkbox_widget = function(spec) { return IPA.checkbox_widget(spec); }; -IPA.host_provisioning_status_widget = function(spec) { +IPA.host_keytab_widget = function(spec) { spec = spec || {}; @@ -419,98 +424,44 @@ IPA.host_provisioning_status_widget = function(spec) { that.widget_create(container); - var div = $('<div/>', { - name: 'kerberos-key-valid', + that.missing_span = $('<span/>', { + name: 'missing', style: 'display: none;' }).appendTo(container); $('<img/>', { - src: 'check.png', - style: 'float: left;', + src: 'caution.png', 'class': 'status-icon' - }).appendTo(div); - - var content_div = $('<div/>', { - style: 'float: left;' - }).appendTo(div); - - content_div.append('<b>'+IPA.messages.objects.host.valid+':</b>'); + }).appendTo(that.missing_span); - content_div.append(' '); + that.missing_span.append(' '); - $('<input/>', { - 'type': 'button', - 'name': 'unprovision', - 'value': IPA.messages.objects.host.delete_key_unprovision - }).appendTo(content_div); + that.missing_span.append(IPA.messages.objects.host.keytab_missing); - div = $('<div/>', { - name: 'kerberos-key-missing', + that.present_span = $('<span/>', { + name: 'present', style: 'display: none;' }).appendTo(container); $('<img/>', { - src: 'caution.png', - style: 'float: left;', + src: 'check.png', 'class': 'status-icon' - }).appendTo(div); - - content_div = $('<div/>', { - style: 'float: left;' - }).appendTo(div); - - content_div.append('<b>'+IPA.messages.objects.host.missing+'</b>'); - - content_div.append('<br/>'); - - content_div.append(IPA.messages.objects.host.enroll_otp+':'); + }).appendTo(that.present_span); - content_div.append('<br/>'); - content_div.append('<br/>'); + that.present_span.append(' '); - $('<input/>', { - 'type': 'text', - 'name': 'otp', - 'class': 'otp' - }).appendTo(content_div); + that.present_span.append(IPA.messages.objects.host.keytab_present); - content_div.append(' '); + that.present_span.append(': '); - $('<input/>', { - 'type': 'button', - 'name': 'enroll', - 'value': IPA.messages.objects.host.set_otp - }).appendTo(content_div); - - that.status_valid = $('div[name=kerberos-key-valid]', that.container); - that.status_missing = $('div[name=kerberos-key-missing]', - that.container); - - var button = $('input[name=unprovision]', that.container); - that.unprovision_button = IPA.button({ + IPA.button({ name: 'unprovision', label: IPA.messages.objects.host.delete_key_unprovision, click: function() { that.show_unprovision_dialog(); return false; } - }); - button.replaceWith(that.unprovision_button); - - that.otp_input = $('input[name=otp]', that.container); - - that.enroll_button = $('input[name=enroll]', that.container); - button = IPA.button({ - name: 'enroll', - label: IPA.messages.objects.host.set_otp, - click: function() { - that.set_otp(); - return false; - } - }); - - that.enroll_button.replaceWith(button); - that.enroll_button = button; + }).appendTo(that.present_span); }; that.show_unprovision_dialog = function() { @@ -559,11 +510,136 @@ IPA.host_provisioning_status_widget = function(spec) { command.execute(); }; - that.set_otp = function() { + that.load = function(result) { + that.result = result; + var value = result[that.name]; + set_status(value ? 'present' : 'missing'); + }; + + function set_status(status) { + that.present_span.css('display', status == 'present' ? 'inline' : 'none'); + that.missing_span.css('display', status == 'missing' ? 'inline' : 'none'); + } + + return that; +}; + +IPA.host_password_widget = function(spec) { + + spec = spec || {}; + + var that = IPA.widget(spec); + + that.create = function(container) { + + that.widget_create(container); + + that.missing_span = $('<span/>', { + name: 'missing' + }).appendTo(container); + + $('<img/>', { + src: 'caution.png', + 'class': 'status-icon' + }).appendTo(that.missing_span); + + that.missing_span.append(' '); + + that.missing_span.append(IPA.messages.objects.host.password_missing); + + that.present_span = $('<span/>', { + name: 'present', + style: 'display: none;' + }).appendTo(container); + + $('<img/>', { + src: 'check.png', + 'class': 'status-icon' + }).appendTo(that.present_span); + + that.present_span.append(' '); + + that.present_span.append(IPA.messages.objects.host.password_present); + + container.append(': '); + + that.set_password_button = IPA.button({ + name: 'set_password', + label: IPA.messages.objects.host.password_set_button, + click: function() { + that.show_password_dialog(); + return false; + } + }).appendTo(container); + }; + + that.show_password_dialog = function() { + + var title; + var label; + + if (that.status == 'missing') { + title = IPA.messages.objects.host.password_set_title; + label = IPA.messages.objects.host.password_set_button; + } else { + title = IPA.messages.objects.host.password_reset_title; + label = IPA.messages.objects.host.password_reset_button; + } + + var dialog = IPA.dialog({ + title: title, + width: 400 + }); + + var password1 = dialog.add_field(IPA.text_widget({ + name: 'password1', + label: IPA.messages.password.new_password, + type: 'password', + undo: false + })); + + var password2 = dialog.add_field(IPA.text_widget({ + name: 'password2', + label: IPA.messages.password.verify_password, + type: 'password', + undo: false + })); + + dialog.add_button(label, function() { + + var record = {}; + dialog.save(record); + var new_password = record.password1; + var repeat_password = record.password2; + + if (new_password != repeat_password) { + alert(IPA.messages.password.password_must_match); + return; + } + + that.set_password( + new_password, + function(data, text_status, xhr) { + set_status('present'); + dialog.close(); + }, + function(xhr, text_status, error_thrown) { + dialog.close(); + } + ); + dialog.close(); + }); + + dialog.add_button(IPA.messages.buttons.cancel, function() { + dialog.close(); + }); + + dialog.open(that.container); + }; + + that.set_password = function(password, on_success, on_error) { var pkey = that.entity.get_primary_key(); - var otp = that.otp_input.val(); - that.otp_input.val(''); var command = IPA.command({ entity: that.entity.name, @@ -572,11 +648,10 @@ IPA.host_provisioning_status_widget = function(spec) { options: { all: true, rights: true, - userpassword: otp + userpassword: password }, - on_success: function(data, text_status, xhr) { - alert(IPA.messages.objects.host.otp_confirmation); - } + on_success: on_success, + on_error: on_error }); command.execute(); @@ -584,13 +659,25 @@ IPA.host_provisioning_status_widget = function(spec) { that.load = function(result) { that.result = result; - var krblastpwdchange = result['krblastpwdchange']; - set_status(krblastpwdchange ? 'valid' : 'missing'); + var value = result[that.name]; + set_status(value ? 'present' : 'missing'); }; function set_status(status) { - that.status_valid.css('display', status == 'valid' ? 'inline' : 'none'); - that.status_missing.css('display', status == 'missing' ? 'inline' : 'none'); + + that.status = status; + var password_label = $('.button-label', that.set_password_button); + + if (status == 'missing') { + that.missing_span.css('display', 'inline'); + that.present_span.css('display', 'none'); + password_label.text(IPA.messages.objects.host.password_set_button); + + } else { + that.missing_span.css('display', 'none'); + that.present_span.css('display', 'inline'); + password_label.text(IPA.messages.objects.host.password_reset_button); + } } return that; |