From 1f3d8003f7ccb7793be6452942f62d10433e7f27 Mon Sep 17 00:00:00 2001 From: Petr Voborník Date: Thu, 19 Jan 2012 10:28:44 +0100 Subject: Modifying DNS UI to benefit from new DNS API DNS UI was modified to offer structured way of defining DNS records. https://fedorahosted.org/freeipa/ticket/2208 --- install/ui/dns.js | 1316 ++++++++-- install/ui/field.js | 4 +- install/ui/ipa.css | 12 + install/ui/ipa.js | 16 + install/ui/test/data/dnsrecord_add.json | 63 +- install/ui/test/data/dnsrecord_del.json | 66 +- install/ui/test/data/dnsrecord_show.json | 80 +- install/ui/test/data/ipa_init.json | 2 + install/ui/test/data/ipa_init_objects.json | 3941 +++++++++++++++++++++++++++- install/ui/widget.js | 59 +- 10 files changed, 5271 insertions(+), 288 deletions(-) (limited to 'install') diff --git a/install/ui/dns.js b/install/ui/dns.js index d23eca3a..d30cc312 100644 --- a/install/ui/dns.js +++ b/install/ui/dns.js @@ -4,6 +4,7 @@ /* Authors: * Adam Young + * Petr Vobornik * * Copyright (C) 2010 Red Hat * see file 'COPYING' for use and warranty information @@ -439,6 +440,16 @@ IPA.dnszone_name_widget = function(spec) { IPA.widget_factories['dnszone_name'] = IPA.dnszone_name_widget; +IPA.force_dnszone_add_checkbox_widget = function(spec) { + var metadata = IPA.get_command_option('dnszone_add', spec.name); + spec.label = metadata.label; + spec.tooltip = metadata.doc; + return IPA.checkbox_widget(spec); +}; + +IPA.widget_factories['force_dnszone_add_checkbox'] = IPA.force_dnszone_add_checkbox_widget; +IPA.field_factories['force_dnszone_add_checkbox'] = IPA.checkbox_field; + IPA.dnszone_adder_dialog = function(spec) { spec = spec || {}; @@ -536,6 +547,334 @@ IPA.dns.record_search_facet = function(spec) { return that; }; +IPA.dns.record_metadata = null; +IPA.dns.get_record_metadata = function() { + + if (IPA.dns.record_metadata === null) { + + IPA.dns.record_metadata = [ + { + name: 'arecord', + attributes: [ + { + name: 'a_part_ip_address', + validators: [IPA.ip_v4_address_validator()] + } + ], + columns: ['a_part_ip_address'] + }, + { + name: 'aaaarecord', + attributes: [ + { + name:'aaaa_part_ip_address', + validators: [IPA.ip_v6_address_validator()] + } + ], + columns: ['aaaa_part_ip_address'] + }, + { + name: 'a6record', + attributes: [ + 'a6record' + ], + columns: ['a6record'] + }, + { + name: 'afsdbrecord', + attributes: [ + 'afsdb_part_subtype', + 'afsdb_part_hostname' + ], + columns: ['afsdb_part_subtype', 'afsdb_part_hostname'] + }, + { + name: 'certrecord', + attributes: [ + 'cert_part_type', + 'cert_part_key_tag', + 'cert_part_algorithm', + { + name: 'cert_part_certificate_or_crl', + type: 'textarea' + } + ], + columns: ['cert_part_type','cert_part_key_tag','cert_part_algorithm'] + }, + { + name: 'cnamerecord', + attributes: [ + 'cname_part_hostname' + ], + columns: ['cname_part_hostname'] + }, + { + name: 'dnamerecord', + attributes: [ + 'dname_part_target' + ], + columns: ['dname_part_target'] + }, + { + name: 'dsrecord', + attributes: [ + 'ds_part_key_tag', + 'ds_part_algorithm', + 'ds_part_digest_type', + { + name: 'ds_part_digest', + type: 'textarea' + } + ], + columns: ['ds_part_key_tag', 'ds_part_algorithm', + 'ds_part_digest_type'] + }, + { + name: 'keyrecord', + attributes: [ + 'key_part_flags', + 'key_part_protocol', + 'key_part_algorithm', + { + name: 'key_part_public_key', + type: 'textarea' + } + ], + columns: ['key_part_flags', 'key_part_protocol', + 'key_part_algorithm'] + }, + { + name: 'kxrecord', + attributes: [ + 'kx_part_preference', + 'kx_part_exchanger' + ], + columns: ['kx_part_preference', 'kx_part_exchanger'] + }, + { + name: 'locrecord', + attributes: [ + 'loc_part_lat_deg', + 'loc_part_lat_min', + 'loc_part_lat_sec', + { + name: 'loc_part_lat_dir', + options: IPA.create_options(['N','S']), + type: 'radio', + widget_opt: { + default_value: 'N' + } + }, + 'loc_part_lon_deg', + 'loc_part_lon_min', + 'loc_part_lon_sec', + { + name: 'loc_part_lon_dir', + options: IPA.create_options(['E','W']), + type: 'radio', + widget_opt: { + default_value: 'E' + } + }, + 'loc_part_altitude', + 'loc_part_size', + 'loc_part_h_precision', + 'loc_part_v_precision' + ], + columns: ['dnsdata'] + }, + { + name: 'mxrecord', + attributes: [ + 'mx_part_preference', + 'mx_part_exchanger' + ], + columns: ['mx_part_preference', 'mx_part_exchanger'] + }, + { + name: 'naptrrecord', + attributes: [ + 'naptr_part_order', + 'naptr_part_preference', + { + name: 'naptr_part_flags', + type: 'select', + options: IPA.create_options(['S', 'A', 'U', 'P']) + }, + 'naptr_part_service', + 'naptr_part_regexp', + 'naptr_part_replacement' + ], + adder_attributes: [], + columns: ['dnsdata'] + }, + { + name: 'nsrecord', + attributes: [ + 'ns_part_hostname' + ], + adder_attributes: [], + columns: ['ns_part_hostname'] + }, + { + name: 'nsecrecord', + attributes: [ + 'nsec_part_next', + 'nsec_part_types' +// TODO: nsec_part_types is multivalued attribute. New selector +// widget or at least new validator should be created. +// { +// name: 'nsec_part_types', +// options: IPA.create_options(['SOA', 'A', 'AAAA', 'A6', 'AFSDB', +// 'APL', 'CERT', 'CNAME', 'DHCID', 'DLV', 'DNAME', 'DNSKEY', +// 'DS', 'HIP', 'IPSECKEY', 'KEY', 'KX', 'LOC', 'MX', 'NAPTR', +// 'NS', 'NSEC','NSEC3', 'NSEC3PARAM', 'PTR', 'RRSIG', 'RP', +// 'SIG', 'SPF', 'SRV', 'SSHFP', 'TA', 'TKEY', 'TSIG', 'TXT']), +// type: 'select' +// } + ], + adder_attributes: [], + columns: [ 'nsec_part_next', 'nsec_part_types'] + }, + { + name: 'ptrrecord', + attributes: [ + 'ptr_part_hostname' + ], + adder_attributes: [], + columns: [ 'ptr_part_hostname'] + }, + { + name: 'rrsigrecord', + attributes: [ + { + name: 'rrsig_part_type_covered', + type: 'select', + options: IPA.create_options(['SOA', 'A', 'AAAA', 'A6', 'AFSDB', + 'APL', 'CERT', 'CNAME', 'DHCID', 'DLV', 'DNAME', + 'DNSKEY', 'DS', 'HIP', 'IPSECKEY', 'KEY', 'KX', + 'LOC', 'MX', 'NAPTR', 'NS', 'NSEC', 'NSEC3', + 'NSEC3PARAM', 'PTR', 'RRSIG', 'RP', 'SPF', 'SRV', + 'SSHFP', 'TA', 'TKEY', 'TSIG', 'TXT']) + }, + 'rrsig_part_algorithm', + 'rrsig_part_labels', + 'rrsig_part_original_ttl', + 'rrsig_part_signature_expiration', + 'rrsig_part_signature_inception', + 'rrsig_part_key_tag', + 'rrsig_part_signers_name', + { + name: 'rrsig_part_signature', + type: 'textarea' + } + ], + adder_attributes: [], + columns: ['dnsdata'] + }, + { + name: 'sigrecord', + attributes: [ + { + name: 'sig_part_type_covered', + type: 'select', + options: IPA.create_options(['SOA', 'A', 'AAAA', 'A6', 'AFSDB', + 'APL', 'CERT', 'CNAME', 'DHCID', 'DLV', 'DNAME', + 'DNSKEY', 'DS', 'HIP', 'IPSECKEY', 'KEY', 'KX', + 'LOC', 'MX', 'NAPTR', 'NS', 'NSEC', 'NSEC3', + 'NSEC3PARAM', 'PTR', 'RRSIG', 'RP', 'SPF', 'SRV', + 'SSHFP', 'TA', 'TKEY', 'TSIG', 'TXT']) + }, + 'sig_part_algorithm', + 'sig_part_labels', + 'sig_part_original_ttl', + 'sig_part_signature_expiration', + 'sig_part_signature_inception', + 'sig_part_key_tag', + 'sig_part_signers_name', + { + name: 'sig_part_signature', + type: 'textarea' + } + ], + adder_attributes: [], + columns: ['dnsdata'] + }, + { + name: 'srvrecord', + attributes: [ + 'srv_part_priority', + 'srv_part_weight', + 'srv_part_port', + 'srv_part_target' + ], + adder_attributes: [], + columns: ['srv_part_priority', 'srv_part_weight', 'srv_part_port', + 'srv_part_target'] + }, + { + name: 'sshfprecord', + attributes: [ + 'sshfp_part_algorithm', + 'sshfp_part_fp_type', + { + name: 'sshfp_part_fingerprint', + type: 'textarea' + } + ], + adder_attributes: [], + columns: ['sshfp_part_algorithm', 'sshfp_part_fp_type'] + }, + { + name: 'txtrecord', + attributes: [ + 'txt_part_data' + ], + adder_attributes: [], + columns: ['txt_part_data'] + } + ]; + + //set required flags for attributes based on 'dnsrecord_optional' flag + //in param metadata + + for (var i=0; i -1) { + IPA.dns.record_prepare_details_for_type(type, fields, standard_record_section); + } else { + IPA.dns.record_prepare_details_for_type(type, fields, other_record_section); + } + } + + IPA.dns.extend_spec(spec, fields, widgets); +}; + +IPA.dns.record_prepare_details_for_type = function(type, fields, container) { + + var index = type.name.search('record$'); + var dnstype = type.name.substring(0, index).toUpperCase(); + + var type_widget = { + name: type.name, + type: 'dnsrecord_type_table', + record_type: type.name, + value_attribute: 'dnsdata', + dnstype: dnstype, + columns: type.columns + }; + + container.widgets.push(type_widget); + + var field = { + name: type.name, + type: 'dnsrecord_type_table', + dnstype: dnstype, + label: dnstype, + widget: container.name+'.'+type.name + }; + + fields.push(field); +}; + +/* + * Widgets and policies + */ + + IPA.dnsrecord_host_link_field = function(spec) { var that = IPA.link_field(spec); that.other_pkeys = function() { @@ -829,22 +1200,75 @@ IPA.field_factories['dnsrecord_host_link'] = IPA.dnsrecord_host_link_field; IPA.widget_factories['dnsrecord_host_link'] = IPA.link_widget; IPA.dns_record_types = function() { - var attrs = IPA.metadata.objects.dnsrecord.default_attributes; + + //only supported + var attrs = ['A', 'AAAA', 'A6', 'AFSDB', 'CERT', 'CNAME', 'DNAME', + 'DS','KEY', 'KX', 'LOC', 'MX', 'NAPTR', 'NS', 'NSEC', + 'PTR', 'RRSIG', 'SRV', 'SIG', 'SSHFP', 'TXT']; var record_types = []; for (var i=0; i -1) { - var rec_type = { - label: attr.substring(0, index).toUpperCase(), - value: attr - }; - record_types.push(rec_type); - } + + var rec_type = { + label: attr, + value: attr.toLowerCase()+'record' + }; + record_types.push(rec_type); } return record_types; }; +IPA.dns.record_get_attr_label = function(part_name) { + + var metadata = IPA.get_entity_param('dnsrecord', part_name); + + if (!metadata) return null; + + var label = metadata.label; + + if (part_name.indexOf('_part_') > -1) { + + label = label.substring(label.indexOf(' ')); + } + + return label; +}; + + +IPA.dnsrecord_type_field = function(spec) { + + spec = spec || {}; + var that = IPA.field(spec); + + that.type_changed = IPA.observer(); + + that.get_type = function() { + + return that.widget.save()[0]; + }; + + that.on_type_change = function() { + + that.type_changed.notify([], that); + }; + + that.widgets_created = function() { + + that.field_widgets_created(); + that.widget.value_changed.attach(that.on_type_change); + }; + + that.reset = function() { + that.field_reset(); + that.on_type_change(); + }; + + return that; +}; + +IPA.field_factories['dnsrecord_type'] = IPA.dnsrecord_type_field; + + IPA.dnsrecord_type_widget = function(spec) { spec.options = IPA.dns_record_types(); @@ -854,62 +1278,539 @@ IPA.dnsrecord_type_widget = function(spec) { IPA.widget_factories['dnsrecord_type'] = IPA.dnsrecord_type_widget; -IPA.dnsrecord_field = function(spec) { + +IPA.dnsrecord_adder_dialog_type_policy = function(spec) { spec = spec || {}; - var that = IPA.field(spec); - that.type_widget_name = spec.type_widget || ''; + var that = IPA.facet_policy(spec); - that.normal_validators = []; - that.a_record_validators = [ - IPA.ip_v4_address_validator() - ]; - that.aaaa_record_validators = [ - IPA.ip_v6_address_validator() - ]; + that.type_field_name = spec.type_field; + + that.post_create = function() { + that.type_field = that.container.fields.get_field(that.type_field_name); + that.type_field.type_changed.attach(that.on_type_change); + that.on_type_change(); + }; that.on_type_change = function() { - var type = that.type_widget.save()[0]; + var type = that.type_field.get_type(); + + that.allow_fields_for_type(type); + that.show_widgets_for_type(type); + }; + + that.allow_fields_for_type = function(type) { + + type = type.substring(0, type.indexOf('record')); + + var fields = that.container.fields.get_fields(); + + for (var i=0; i -1) { + fieldtype = field.name.substring(0, index); + } else { + fieldtype = field.name.substring(0, field.name.indexOf('record')); + } + + + field.enabled = (field.name === 'idnsname' || + field.name === that.type_field_name || + fieldtype === type); + } + }; + + that.show_widgets_for_type = function(type) { + + var widgets = that.container.widgets.get_widgets(); + + for (var i=0; i', { + href: '#'+that.text, + text: that.text, + style: 'float: right;', + click: function() { + return that.link_handler(value); + } + }).appendTo(container); + }; + + return that; +}; IPA.ip_address_validator = function(spec) { @@ -963,5 +1864,6 @@ IPA.ip_v6_address_validator = function(spec) { return IPA.ip_address_validator(spec); }; + IPA.register('dnszone', IPA.dns.zone_entity); IPA.register('dnsrecord', IPA.dns.record_entity); diff --git a/install/ui/field.js b/install/ui/field.js index 1caab161..c448c41c 100644 --- a/install/ui/field.js +++ b/install/ui/field.js @@ -101,7 +101,7 @@ IPA.field = function(spec) { that.validate_required = function() { var values = that.save(); - if (that.is_empty(values) && that.is_required()) { + if (that.is_empty(values) && that.is_required() && that.enabled) { that.valid = false; that.show_error(IPA.messages.widget.validation.required); return false; @@ -118,6 +118,8 @@ IPA.field = function(spec) { that.hide_error(); that.valid = true; + if (!that.enabled) return that.valid; + var values = that.save(); if (that.is_empty(values)) { diff --git a/install/ui/ipa.css b/install/ui/ipa.css index 10fed5de..3ebfc341 100644 --- a/install/ui/ipa.css +++ b/install/ui/ipa.css @@ -1455,4 +1455,16 @@ div.entity[name=hbactest] div.facet[name=run_test] .hbac-test-content { .hbac-test-navigation-buttons { float: right; +} + + +/* ---- DNS ---- */ + +.dnstype-table div[name=position] { + + padding-right: 9px; +} + +.dnstype-table td { + font-weight: normal; } \ No newline at end of file diff --git a/install/ui/ipa.js b/install/ui/ipa.js index 04366a8c..f905b417 100644 --- a/install/ui/ipa.js +++ b/install/ui/ipa.js @@ -1130,6 +1130,22 @@ IPA.limit_text = function(value, max_length) { return limited_text; }; +IPA.create_options = function(labels, values) { + + if(!values) values = labels; + + var options = []; + + for (var i=0; i", "multivalue": false, "name": "random", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -4684,6 +8445,7 @@ "multivalue": false, "name": "randompassword", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -4714,6 +8476,7 @@ "minlength": null, "multivalue": false, "name": "usercertificate", + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -4749,6 +8512,7 @@ "multivalue": false, "name": "krbprincipalname", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -4877,6 +8641,7 @@ "multivalue": false, "name": "cn", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": true, @@ -4908,6 +8673,7 @@ "multivalue": false, "name": "description", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -4923,7 +8689,7 @@ "aciattrs": [], "attribute_members": {}, "bindable": false, - "container_dn": "cn=EXAMPLE.COM,cn=kerberos", + "container_dn": "cn=DEV.EXAMPLE.COM,cn=kerberos", "default_attributes": [ "krbmaxticketlife", "krbmaxrenewableage" @@ -4993,6 +8759,7 @@ "multivalue": false, "name": "uid", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": true, @@ -5022,6 +8789,7 @@ "minvalue": 1, "multivalue": false, "name": "krbmaxticketlife", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -5049,6 +8817,7 @@ "minvalue": 1, "multivalue": false, "name": "krbmaxrenewableage", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -5185,6 +8954,7 @@ "multivalue": false, "name": "cn", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": true, @@ -5216,6 +8986,7 @@ "multivalue": false, "name": "description", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -5247,6 +9018,7 @@ "multivalue": false, "name": "nisdomainname", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -5281,6 +9053,7 @@ "multivalue": false, "name": "ipauniqueid", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -5308,6 +9081,7 @@ "label": "User category", "multivalue": false, "name": "usercategory", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -5336,6 +9110,7 @@ "label": "Host category", "multivalue": false, "name": "hostcategory", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -5447,6 +9222,7 @@ "multivalue": false, "name": "cn", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": true, @@ -5478,6 +9254,7 @@ "multivalue": true, "name": "permissions", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -5512,6 +9289,7 @@ "multivalue": true, "name": "attrs", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -5542,6 +9320,7 @@ "label": "Type", "multivalue": false, "name": "type", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -5583,6 +9362,7 @@ "multivalue": false, "name": "memberof", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -5617,6 +9397,7 @@ "multivalue": false, "name": "filter", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -5651,6 +9432,7 @@ "multivalue": false, "name": "subtree", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -5685,6 +9467,7 @@ "multivalue": false, "name": "targetgroup", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -5807,6 +9590,7 @@ "multivalue": false, "name": "cn", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": true, @@ -5838,6 +9622,7 @@ "multivalue": false, "name": "description", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -5864,7 +9649,7 @@ ], "attribute_members": {}, "bindable": false, - "container_dn": "cn=EXAMPLE.COM,cn=kerberos", + "container_dn": "cn=DEV.EXAMPLE.COM,cn=kerberos", "default_attributes": [ "cn", "cospriority", @@ -5948,6 +9733,7 @@ "multivalue": false, "name": "cn", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": true, @@ -5977,6 +9763,7 @@ "minvalue": 0, "multivalue": false, "name": "krbmaxpwdlife", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -6004,6 +9791,7 @@ "minvalue": 0, "multivalue": false, "name": "krbminpwdlife", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -6031,6 +9819,7 @@ "minvalue": 0, "multivalue": false, "name": "krbpwdhistorylength", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -6058,6 +9847,7 @@ "minvalue": 0, "multivalue": false, "name": "krbpwdmindiffchars", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -6085,6 +9875,7 @@ "minvalue": 0, "multivalue": false, "name": "krbpwdminlength", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -6114,6 +9905,7 @@ "minvalue": 0, "multivalue": false, "name": "cospriority", + "option_group": null, "primary_key": false, "query": false, "required": true, @@ -6141,6 +9933,7 @@ "minvalue": 0, "multivalue": false, "name": "krbpwdmaxfailure", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -6168,6 +9961,7 @@ "minvalue": 0, "multivalue": false, "name": "krbpwdfailurecountinterval", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -6195,6 +9989,7 @@ "minvalue": 0, "multivalue": false, "name": "krbpwdlockoutduration", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -6312,6 +10107,7 @@ "multivalue": false, "name": "cn", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": true, @@ -6343,6 +10139,7 @@ "multivalue": false, "name": "description", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -6393,6 +10190,7 @@ "multivalue": false, "name": "aciname", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": true, @@ -6424,6 +10222,7 @@ "multivalue": true, "name": "permissions", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -6455,6 +10254,7 @@ "multivalue": true, "name": "attrs", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -6580,6 +10380,7 @@ "multivalue": false, "name": "cn", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": true, @@ -6611,6 +10412,7 @@ "multivalue": false, "name": "ipaselinuxuser", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -6642,6 +10444,7 @@ "multivalue": false, "name": "seealso", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -6669,6 +10472,7 @@ "label": "User category", "multivalue": false, "name": "usercategory", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -6697,6 +10501,7 @@ "label": "Host category", "multivalue": false, "name": "hostcategory", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -6729,6 +10534,7 @@ "multivalue": false, "name": "description", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -6766,6 +10572,7 @@ "label": "Enabled", "multivalue": false, "name": "ipaenabledflag", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -6805,6 +10612,7 @@ "multivalue": false, "name": "memberuser_user", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -6840,6 +10648,7 @@ "multivalue": false, "name": "memberuser_group", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -6875,6 +10684,7 @@ "multivalue": false, "name": "memberhost_host", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -6910,6 +10720,7 @@ "multivalue": false, "name": "memberhost_hostgroup", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -7024,6 +10835,7 @@ "multivalue": false, "name": "krbprincipalname", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": true, @@ -7056,6 +10868,7 @@ "minlength": null, "multivalue": false, "name": "usercertificate", + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -7157,6 +10970,7 @@ "multivalue": false, "name": "sudocmd", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": true, @@ -7188,6 +11002,7 @@ "multivalue": false, "name": "description", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -7296,6 +11111,7 @@ "multivalue": false, "name": "cn", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": true, @@ -7327,6 +11143,7 @@ "multivalue": false, "name": "description", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -7362,6 +11179,7 @@ "multivalue": false, "name": "membercmd_sudocmd", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -7397,6 +11215,7 @@ "multivalue": false, "name": "membercmd_sudocmdgroup", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -7470,7 +11289,11 @@ "memberhost", "memberallowcmd", "memberdenycmd", - "ipasudoopt" + "ipasudoopt", + "ipasudorunas", + "ipasudorunasgroup", + "ipasudorunasusercategory", + "ipasudorunasgroupcategory" ], "hidden_attributes": [ "objectclass", @@ -7558,6 +11381,7 @@ "multivalue": false, "name": "cn", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": true, @@ -7589,6 +11413,7 @@ "multivalue": false, "name": "description", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -7626,6 +11451,7 @@ "label": "Enabled", "multivalue": false, "name": "ipaenabledflag", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -7657,6 +11483,7 @@ "label": "User category", "multivalue": false, "name": "usercategory", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -7685,6 +11512,7 @@ "label": "Host category", "multivalue": false, "name": "hostcategory", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -7713,6 +11541,7 @@ "label": "Command category", "multivalue": false, "name": "cmdcategory", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -7741,6 +11570,7 @@ "label": "RunAs User category", "multivalue": false, "name": "ipasudorunasusercategory", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -7769,6 +11599,7 @@ "label": "RunAs Group category", "multivalue": false, "name": "ipasudorunasgroupcategory", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -7805,6 +11636,7 @@ "multivalue": false, "name": "memberuser_user", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -7840,6 +11672,7 @@ "multivalue": false, "name": "memberuser_group", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -7875,6 +11708,7 @@ "multivalue": false, "name": "memberhost_host", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -7910,6 +11744,7 @@ "multivalue": false, "name": "memberhost_hostgroup", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -7945,6 +11780,7 @@ "multivalue": false, "name": "memberallowcmd_sudocmd", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -7980,6 +11816,7 @@ "multivalue": false, "name": "memberdenycmd_sudocmd", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8015,6 +11852,7 @@ "multivalue": false, "name": "memberallowcmd_sudocmdgroup", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8050,6 +11888,7 @@ "multivalue": false, "name": "memberdenycmd_sudocmdgroup", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8085,6 +11924,7 @@ "multivalue": false, "name": "ipasudorunas_user", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8120,6 +11960,7 @@ "multivalue": false, "name": "ipasudorunas_group", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8151,6 +11992,7 @@ "multivalue": false, "name": "externaluser", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8182,6 +12024,7 @@ "multivalue": false, "name": "ipasudorunasextuser", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8213,6 +12056,7 @@ "multivalue": false, "name": "ipasudorunasextgroup", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8248,6 +12092,7 @@ "multivalue": false, "name": "ipasudoopt", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8283,6 +12128,7 @@ "multivalue": false, "name": "ipasudorunasgroup_group", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8484,6 +12330,7 @@ "multivalue": false, "name": "uid", "noextrawhitespace": true, + "option_group": null, "pattern": "^[a-zA-Z0-9_.][a-zA-Z0-9_.-]{0,252}[a-zA-Z0-9_.$-]?$", "pattern_errmsg": "may only include letters, numbers, _, -, . and $", "primary_key": true, @@ -8515,6 +12362,7 @@ "multivalue": false, "name": "givenname", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8546,6 +12394,7 @@ "multivalue": false, "name": "sn", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8577,6 +12426,7 @@ "multivalue": false, "name": "cn", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8608,6 +12458,7 @@ "multivalue": false, "name": "displayname", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8639,6 +12490,7 @@ "multivalue": false, "name": "initials", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8670,6 +12522,7 @@ "multivalue": false, "name": "homedirectory", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8701,6 +12554,7 @@ "multivalue": false, "name": "gecos", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8732,6 +12586,7 @@ "multivalue": false, "name": "loginshell", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8765,6 +12620,7 @@ "multivalue": false, "name": "krbprincipalname", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8796,6 +12652,7 @@ "multivalue": true, "name": "mail", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8830,6 +12687,7 @@ "multivalue": false, "name": "userpassword", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8866,6 +12724,7 @@ "label": "", "multivalue": false, "name": "random", + "option_group": null, "primary_key": false, "query": false, "required": false, @@ -8906,6 +12765,7 @@ "multivalue": false, "name": "randompassword", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -8935,6 +12795,7 @@ "minvalue": 1, "multivalue": false, "name": "uidnumber", + "option_group": null, "primary_key": false, "query": false, "required": true, @@ -8962,6 +12823,7 @@ "minvalue": -2147483648, "multivalue": false, "name": "gidnumber", + "option_group": null, "primary_key": false, "query": false, "required": true, @@ -8991,6 +12853,7 @@ "multivalue": false, "name": "street", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -9022,6 +12885,7 @@ "multivalue": false, "name": "l", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -9053,6 +12917,7 @@ "multivalue": false, "name": "st", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -9084,6 +12949,7 @@ "multivalue": false, "name": "postalcode", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -9115,6 +12981,7 @@ "multivalue": true, "name": "telephonenumber", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -9146,6 +13013,7 @@ "multivalue": true, "name": "mobile", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -9177,6 +13045,7 @@ "multivalue": true, "name": "pager", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -9208,6 +13077,7 @@ "multivalue": true, "name": "facsimiletelephonenumber", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -9239,6 +13109,7 @@ "multivalue": false, "name": "ou", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -9270,6 +13141,7 @@ "multivalue": false, "name": "title", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -9301,6 +13173,7 @@ "multivalue": false, "name": "manager", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -9332,6 +13205,7 @@ "multivalue": false, "name": "carlicense", "noextrawhitespace": true, + "option_group": null, "pattern": null, "pattern_errmsg": null, "primary_key": false, @@ -9369,6 +13243,7 @@ "label": "Account disabled", "multivalue": false, "name": "nsaccountlock", + "option_group": null, "primary_key": false, "query": false, "required": false, diff --git a/install/ui/widget.js b/install/ui/widget.js index a7dd81e6..21259ff8 100644 --- a/install/ui/widget.js +++ b/install/ui/widget.js @@ -744,6 +744,7 @@ IPA.radio_widget = function(spec) { var that = IPA.input_widget(spec); + that.default_value = spec.default_value; that.options = spec.options; that.create = function(container) { @@ -802,6 +803,9 @@ IPA.radio_widget = function(spec) { var input = $(that.selector+'[value="'+value+'"]', that.container); if (input.length) { input.attr('checked', true); + } else if (that.default_value) { + input = $(that.selector+'[value="'+that.default_value+'"]', that.container); + input.attr('checked', true); } that.value_changed.notify([that.save()], that); @@ -809,6 +813,11 @@ IPA.radio_widget = function(spec) { that.clear = function() { $(that.selector, that.container).attr('checked', false); + + if (that.default_value) { + var input = $(that.selector+'[value="'+that.default_value+'"]', that.container); + input.attr('checked', true); + } }; // methods that should be invoked by subclasses @@ -1118,6 +1127,7 @@ IPA.table_widget = function (spec) { that.multivalued = spec.multivalued === undefined ? true : spec.multivalued; that.columns = $.ordered_map(); + that.value_attr_name = spec.value_attribute || that.name; that.get_columns = function() { return that.columns.values; @@ -1430,13 +1440,27 @@ IPA.table_widget = function (spec) { that.empty(); - that.values = result[that.name] || []; + that.values = result[that.value_attr_name] || []; for (var i=0; i