diff options
Diffstat (limited to 'install/static/host.js')
-rw-r--r-- | install/static/host.js | 367 |
1 files changed, 316 insertions, 51 deletions
diff --git a/install/static/host.js b/install/static/host.js index bd9deda38..a721dd212 100644 --- a/install/static/host.js +++ b/install/static/host.js @@ -20,67 +20,332 @@ /* REQUIRES: ipa.js, details.js, search.js, add.js, entity.js */ -ipa_entity_set_search_definition('host', [ - ['fqdn', 'Name', null], - ['description', 'Description', null], - ['enrolled', 'Enrolled?', null], - ['manages', 'Manages?', null] -]); - -ipa_entity_set_add_definition('host', [ - 'dialog-add-host', 'Add New Host', [ - ['fqdn', 'Name', null] - ] -]); - -ipa_entity_set_details_definition('host', [ - ipa_stanza({name:'details', label:'Host Details'}). - input({name:'fqdn', label:'Fully Qualified Domain Name'}). - input({name:'krbprincipalname', label:'Kerberos Principal'}). - input({name:'serverhostname', label:'Server Host Name'}), - ipa_stanza({name:'enrollment', label:'Enrollment'}). - input({name:'enrollment_status', label:'Status', - load:host_enrollment_status_load}), - ipa_stanza({name:'certificate', label:'Host Certificate'}). - input({name:'certificate_status', label:'Status', - load:host_usercertificate_load}) -]); - -ipa_entity_set_association_definition('host', { - 'hostgroup': { associator: 'serial' }, - 'rolegroup': { associator: 'serial' } -}); - -function host_enrollment_status_load(container, result) { - // skip enrollment_status +function ipa_host() { + + var that = ipa_entity({ + 'name': 'host' + }); + + that.init = function() { + + that.create_association({ + 'name': 'hostgroup', + 'associator': 'serial' + }); + + that.create_association({ + 'name': 'rolegroup', + 'associator': 'serial' + }); + + var dialog = ipa_host_add_dialog({ + 'name': 'add', + 'title': 'Add New Host' + }); + that.add_dialog(dialog); + dialog.init(); + + var facet = ipa_host_search_facet({ + 'name': 'search', + 'label': 'Search' + }); + that.add_facet(facet); + + facet = ipa_host_details_facet({ + 'name': 'details', + 'label': 'Details' + }); + that.add_facet(facet); + + facet = ipa_association_facet({ + 'name': 'associate' + }); + that.add_facet(facet); + + that.entity_init(); + }; + + return that; +} + +IPA.add_entity(ipa_host()); + +function ipa_host_add_dialog(spec) { + + spec = spec || {}; + + var that = ipa_add_dialog(spec); + + that.init = function() { + + that.add_dialog_init(); + + that.add_field(ipa_text_widget({ + 'name': 'fqdn', + 'label': 'Name', + 'size': 40, + 'undo': false + })); + }; + + return that; +} + +function ipa_host_search_facet(spec) { + + spec = spec || {}; + + var that = ipa_search_facet(spec); + + that.init = function() { + + this.create_column({name:'fqdn', label:'Name'}); + this.create_column({name:'description', label:'Description'}); + this.create_column({name:'enrolled', label:'Enrolled?'}); + this.create_column({name:'manages', label:'Manages?'}); + + that.search_facet_init(); + }; + + return that; +} + +function ipa_host_details_facet(spec) { + + spec = spec || {}; + + var that = ipa_details_facet(spec); + + that.init = function() { + + var section = ipa_details_list_section({ + name: 'details', + label: 'Host Details' + }); + that.add_section(section); + + section.create_field({ + name: 'fqdn', + label: 'Fully Qualified Domain Name' + }); + + section.create_field({ + name: 'krbprincipalname', + label: 'Kerberos Principal' + }); + + section.create_field({ + name: 'serverhostname', + label: 'Server Host Name' + }); + + section = ipa_details_list_section({ + name: 'enrollment', + label: 'Enrollment' + }); + that.add_section(section); + + section.add_field(host_provisioning_status_widget({ + name: 'provisioning_status', + label: 'Status' + })); + + section = ipa_details_list_section({ + name:'certificate', + label:'Host Certificate' + }); + that.add_section(section); + + section.add_field(host_certificate_status_widget({ + name: 'certificate_status', + label: 'Status' + })); + + that.details_facet_init(); + }; + + return that; +} + +function host_provisioning_status_widget(spec) { + + spec = spec || {}; + + var that = ipa_widget(spec); + + that.create = function(container) { + + that.widget_create(container); + + var table = $('<table/>').appendTo(container); + + var tr = $('<tr/>').appendTo(table); + + var td = $('<td/>').appendTo(tr); + var li = $('<li/>', { + 'class': 'key-status-valid' + }).appendTo(td); + + td = $('<td/>').appendTo(tr); + td.append('Kerberos Key Present, Host Provisioned:'); + + td = $('<td/>').appendTo(tr); + + $('<input/>', { + 'type': 'button', + 'name': 'unprovision', + 'value': 'Delete Key, Unprovision' + }).appendTo(td); + + tr = $('<tr/>').appendTo(table); + + td = $('<td/>').appendTo(tr); + li = $('<li/>', { + 'class': 'key-status-missing' + }).appendTo(td); + + td = $('<td/>').appendTo(tr); + td.append('Kerberos Key Not Present'); + + td = $('<td/>').appendTo(tr); + + tr = $('<tr/>').appendTo(table); + + td = $('<td/>').appendTo(tr); + + td = $('<td/>').appendTo(tr); + td.append('Enroll via One-Time-Password:'); + + td = $('<td/>').appendTo(tr); + + $('<input/>', { + 'type': 'text', + 'name': 'otp', + 'size': 10 + }).appendTo(td); + + $('<input/>', { + 'type': 'button', + 'name': 'enroll', + 'value': 'Set OTP' + }).appendTo(td); + }; + + that.setup = function(container) { + + that.container = container; + + that.valid = $('li.key-status-valid', that.container); + that.missing = $('li.key-status-missing', that.container); + + var button = $('input[name=unprovision]', that.container); + that.unprovision_button = ipa_button({ + 'label': 'Delete Key, Unprovision', + 'click': that.unprovision + }); + button.replaceWith(that.unprovision_button); + + that.otp_input = $('input[name=otp]', that.container); + + that.enroll_button = $('input[name=enroll]', that.container); + button = ipa_button({ + 'label': 'Set OTP', + 'click': that.set_otp + }); + + that.enroll_button.replaceWith(button); + that.enroll_button = button; + }; + + that.unprovision = function() { + + var label = IPA.metadata[that.entity_name].label; + var dialog = ipa_dialog({ + 'title': 'Unprovisioning '+label + }); + + dialog.create = function() { + dialog.container.append( + 'To confirm your intention to unprovision this host, '+ + 'click the "Unprovision" button.'); + }; + + dialog.add_button('Unprovision', function() { + var pkey = that.result['fqdn'][0]; + ipa_cmd(that.entity_name+'_disable', [pkey], {}, + function(data, text_status, xhr) { + set_status('missing'); + dialog.close(); + }, + function(xhr, text_status, error_thrown) { + dialog.close(); + } + ); + }); + + dialog.add_button('Cancel', function() { + dialog.close(); + }); + + dialog.init(); + + dialog.open(that.container); + + return false; + }; + + that.set_otp = function() { + // TODO: enroll via OTP + alert(that.otp.val()); + }; + + that.load = function(container, result) { + that.result = result; + var krblastpwdchange = result['krblastpwdchange']; + set_status(krblastpwdchange ? 'valid' : 'missing'); + }; + + function set_status(status) { + that.valid.toggleClass('key-status-active', status == 'valid'); + that.missing.toggleClass('key-status-active', status == 'missing'); + + that.unprovision_button.css('visibility', status == 'valid' ? 'visible' : 'hidden'); + that.otp_input.css('visibility', status == 'missing' ? 'visible' : 'hidden'); + that.enroll_button.css('visibility', status == 'missing' ? 'visible' : 'hidden'); + } + + return that; } -function host_usercertificate_load(container, result) { +function host_certificate_status_widget(spec) { + + spec = spec || {}; + + var that = certificate_status_widget(spec); - var dt = $('dt[title='+this.name+']', container); - if (!dt.length) return; + that.init = function() { - var panel = certificate_status_panel({ - 'entity_type': 'host', - 'entity_label': 'Host', - 'result': result, - 'get_entity_pkey': function(result) { + that.entity_label = IPA.metadata[that.entity_name].label; + + that.get_entity_pkey = function(result) { var values = result['fqdn']; return values ? values[0] : null; - }, - 'get_entity_name': function(result) { - return this.get_entity_pkey(result); - }, - 'get_entity_principal': function(result) { + }; + + that.get_entity_name = function(result) { + return that.get_entity_pkey(result); + }; + + that.get_entity_principal = function(result) { var values = result['krbprincipalname']; return values ? values[0] : null; - }, - 'get_entity_certificate': function(result) { + }; + + that.get_entity_certificate = function(result) { var values = result['usercertificate']; return values ? values[0].__base64__ : null; } - }); + }; - var dd = ipa_create_first_dd(this.name, panel); - dt.after(dd); + return that; } |