From a309ce9e7ea55d9b475d6e4753b27b69505fe5c0 Mon Sep 17 00:00:00 2001 From: Endi Sukma Dewata Date: Wed, 16 Nov 2011 21:07:20 -0600 Subject: [PATCH] Fixed entity metadata resolution. The current code assumes that an entity will always have a corresponding LDAPObject on the server, so it looks for the metadata in a fixed location. This assumption doesn't work for HBAC Test since it is a Command, not an LDAPObject, so the metadata has to be obtained from a different location. A new method get_default_metadata() has been added to allow each entity to find the metadata from the correct location. Ticket #388 --- install/ui/aci.js | 25 +++++++++++++++---------- install/ui/automount.js | 15 +++++++++------ install/ui/dns.js | 34 ++++++++++++++++++---------------- install/ui/entitle.js | 5 +++-- install/ui/entity.js | 33 +++++++++++++++++++++------------ install/ui/group.js | 5 +++-- install/ui/hbac.js | 15 +++++++++------ install/ui/host.js | 5 +++-- install/ui/hostgroup.js | 5 +++-- install/ui/ipa.js | 10 ++++------ install/ui/netgroup.js | 5 +++-- install/ui/policy.js | 10 ++++++---- install/ui/serverconfig.js | 5 +++-- install/ui/service.js | 5 +++-- install/ui/sudo.js | 15 +++++++++------ install/ui/test/details_tests.js | 19 ++++++++++--------- install/ui/test/entity_tests.js | 10 +++++----- install/ui/test/navigation_tests.js | 22 +++++++++++++++------- install/ui/user.js | 13 +++++++------ 19 files changed, 149 insertions(+), 107 deletions(-) diff --git a/install/ui/aci.js b/install/ui/aci.js index b63660da3f7931765e1b6791cfb8c6d03c1d5870..bb10214192f22d7d96eef2607fa18f3d9256d096 100644 --- a/install/ui/aci.js +++ b/install/ui/aci.js @@ -29,9 +29,10 @@ IPA.aci.permission_entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.facet_groups([ 'privilege' , 'settings' ]). + that.builder.facet_groups([ 'privilege' , 'settings' ]). search_facet({ columns: [ 'cn' ] }). @@ -106,9 +107,10 @@ IPA.aci.privilege_entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.facet_groups([ 'role', 'settings', 'permission' ]). + that.builder.facet_groups([ 'role', 'settings', 'permission' ]). search_facet({ columns: [ 'cn', @@ -162,9 +164,10 @@ IPA.aci.role_entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.facet_groups([ 'member', 'settings', 'privilege' ]). + that.builder.facet_groups([ 'member', 'settings', 'privilege' ]). search_facet({ columns: [ 'cn', @@ -211,9 +214,10 @@ IPA.aci.selfservice_entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.search_facet({ + that.builder.search_facet({ pagination: false, columns: [ 'aciname' ] }). @@ -252,9 +256,10 @@ IPA.aci.delegation_entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.search_facet({ + that.builder.search_facet({ pagination: false, columns: [ 'aciname' ] }). diff --git a/install/ui/automount.js b/install/ui/automount.js index a3fc1549dba506a3bb77e28a5035af8362eda56d..c0e4b89f248f54e012c4c70d26f79a828a71750a 100644 --- a/install/ui/automount.js +++ b/install/ui/automount.js @@ -29,9 +29,10 @@ IPA.automount.location_entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.facet_groups([ 'automountmap', 'settings' ]). + that.builder.facet_groups([ 'automountmap', 'settings' ]). search_facet({ title: IPA.metadata.objects.automountlocation.label, columns:['cn'] @@ -64,9 +65,10 @@ IPA.automount.map_entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.containing_entity('automountlocation'). + that.builder.containing_entity('automountlocation'). facet_groups([ 'automountkey', 'settings' ]). nested_search_facet({ facet_group: 'automountkey', @@ -153,9 +155,10 @@ IPA.automount.key_entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.containing_entity('automountmap'). + that.builder.containing_entity('automountmap'). details_facet({ sections: [ { diff --git a/install/ui/dns.js b/install/ui/dns.js index 36781f974473e795515f1ffea9a6d14b12c1866c..9fc3c3c3edec85e6882fbcbe78d09471f08f2ffa 100644 --- a/install/ui/dns.js +++ b/install/ui/dns.js @@ -29,16 +29,17 @@ IPA.dns.zone_entity = function(spec) { var that = IPA.entity(spec); - if (!IPA.dns_enabled) { - var except = { - expected: true - }; - throw except; - } + that.init = function() { - that.init = function(params) { + if (!IPA.dns_enabled) { + throw { + expected: true + }; + } - params.builder.facet_groups([ 'dnsrecord', 'settings' ]). + that.entity_init(); + + that.builder.facet_groups([ 'dnsrecord', 'settings' ]). search_facet({ title: IPA.metadata.objects.dnszone.label, columns: [ 'idnsname' ] @@ -449,16 +450,17 @@ IPA.dns.record_entity = function(spec) { var that = IPA.entity(spec); - if (!IPA.dns_enabled) { - var except = { - expected: true - }; - throw except; - } + that.init = function() { - that.init = function(params) { + if (!IPA.dns_enabled) { + throw { + expected: true + }; + } - params.builder.containing_entity('dnszone'). + that.entity_init(); + + that.builder.containing_entity('dnszone'). details_facet({ post_update_hook:function(data){ var result = data.result.result; diff --git a/install/ui/entitle.js b/install/ui/entitle.js index bb06f154c8b08bebd822b28271541fede9ac238a..17dc9230f3580e685615e00f37c953fe907d243e 100644 --- a/install/ui/entitle.js +++ b/install/ui/entitle.js @@ -37,9 +37,10 @@ IPA.entitle.entity = function(spec) { that.status = IPA.entitle.unregistered; - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.facet_groups([ 'account', 'certificates' ]). + that.builder.facet_groups([ 'account', 'certificates' ]). details_facet({ factory: IPA.entitle.details_facet, label: IPA.messages.objects.entitle.account, diff --git a/install/ui/entity.js b/install/ui/entity.js index 4e5c724472a6c2eac1bd6c562f75e408d3d9828e..a701009a3fa9f19c80fdd602c099e676ca25e638 100644 --- a/install/ui/entity.js +++ b/install/ui/entity.js @@ -32,10 +32,12 @@ IPA.entity = function(spec) { spec = spec || {}; var that = {}; - that.metadata = spec.metadata; + that.name = spec.name; - that.label = spec.label || spec.metadata.label || spec.name; - that.title = spec.title || that.label; + that.label = spec.label; + + that.metadata = spec.metadata; + that.builder = spec.builder; that.dialogs = $.ordered_map(); that.dialog_specs = spec.dialogs || []; @@ -52,7 +54,21 @@ IPA.entity = function(spec) { that.redirect_facet = spec.redirect_facet; that.containing_entity = null; - that.init = function(params) { + that.init = function() { + if (!that.metadata) { + that.metadata = that.get_default_metadata(); + if (!that.metadata) { + throw { + expected: true, + message: "Entity " + that.name + " not supported by server." + }; + } + } + that.label = that.label || that.metadata.label || that.name; + }; + + that.get_default_metadata = function() { + return IPA.metadata.objects[that.name]; }; that.get_containing_entity = function() { @@ -210,6 +226,7 @@ IPA.entity = function(spec) { pkey.unshift(IPA.nav.get_state(current_entity.name+'-pkey')); return pkey; }; + /* most entites only require -pkey for their primary keys, but some are more specific. This call allows those entites a place to override the other parameters. */ @@ -305,14 +322,6 @@ IPA.entity_builder = function() { spec = { name: spec }; } - spec.metadata = spec.metadata || IPA.metadata.objects[spec.name]; - if (!spec.metadata) { - throw { - expected: true, - message: "Entity " + spec.name + "not supported by server." - }; - } - entity = factory(spec); that.facet_groups([ diff --git a/install/ui/group.js b/install/ui/group.js index 305fb400726dc4096945eec241a860a548627a10..dbeb07ba4913ce03f8bef2c84712e645d7f66d8a 100644 --- a/install/ui/group.js +++ b/install/ui/group.js @@ -30,9 +30,10 @@ IPA.group.entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.search_facet({ + that.builder.search_facet({ columns: [ 'cn', 'gidnumber', diff --git a/install/ui/hbac.js b/install/ui/hbac.js index 31f789a84071bdcfd6e29c318d13d6444812bafe..902d4f18667a525398a7488f4bda0447e9a5d55a 100644 --- a/install/ui/hbac.js +++ b/install/ui/hbac.js @@ -29,9 +29,10 @@ IPA.hbac.rule_entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.search_facet({ + that.builder.search_facet({ search_all: true, columns: [ 'cn', @@ -54,9 +55,10 @@ IPA.hbac.service_entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.search_facet({ + that.builder.search_facet({ columns: [ 'cn', 'description' @@ -119,9 +121,10 @@ IPA.hbac.service_group_entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.search_facet({ + that.builder.search_facet({ columns: [ 'cn', 'description' diff --git a/install/ui/host.js b/install/ui/host.js index 84f6204009492c27d35c4b2503828a0795ae93a0..5b6fd1255b61589002b61c848433fe019382b874 100644 --- a/install/ui/host.js +++ b/install/ui/host.js @@ -30,9 +30,10 @@ IPA.host.entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.search_facet({ + that.builder.search_facet({ columns: [ 'fqdn', 'description', diff --git a/install/ui/hostgroup.js b/install/ui/hostgroup.js index 58e25e3f1867b37153727f8b1f7b0cae5cab77f4..246cfacdb9545df13b8810020de4ffc877b903f9 100644 --- a/install/ui/hostgroup.js +++ b/install/ui/hostgroup.js @@ -28,9 +28,10 @@ IPA.hostgroup.entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.search_facet({ + that.builder.search_facet({ columns: [ 'cn', 'description' diff --git a/install/ui/ipa.js b/install/ui/ipa.js index 1dccbe665d00d94ac5dbbfe8c52f54d1c0d0f37e..0e2181dd767618a56c9fd467b613a79469c3ad4c 100644 --- a/install/ui/ipa.js +++ b/install/ui/ipa.js @@ -189,15 +189,13 @@ var IPA = function() { builder.entity({ factory: factory, - name: name - }); - - var entity = builder.build(); - - entity.init({ + name: name, builder: builder }); + var entity = builder.build(); + entity.init(); + return entity; } catch (e) { diff --git a/install/ui/netgroup.js b/install/ui/netgroup.js index dcec180feeb2ae67ad19e7ce12addc707ef165dd..01adfa05f8c56440651c26fa3e1920d66711021b 100644 --- a/install/ui/netgroup.js +++ b/install/ui/netgroup.js @@ -28,9 +28,10 @@ IPA.netgroup.entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.search_facet({ + that.builder.search_facet({ columns: [ 'cn', 'description' diff --git a/install/ui/policy.js b/install/ui/policy.js index 4726608c24376f5d0faedeb27d311accc24f9ba6..68610b18ffd50cdd4d8d41f1b7779335efd513fb 100644 --- a/install/ui/policy.js +++ b/install/ui/policy.js @@ -29,9 +29,10 @@ IPA.pwpolicy.entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.search_facet({ + that.builder.search_facet({ columns:['cn','cospriority']}). details_facet({ sections:[ @@ -79,9 +80,10 @@ IPA.krbtpolicy.entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.details_facet({ + that.builder.details_facet({ title: IPA.metadata.objects.krbtpolicy.label, sections: [ { diff --git a/install/ui/serverconfig.js b/install/ui/serverconfig.js index 9ecf190c492409080d3d2fd697ada972fadaa720..251d0290460de1dd78cc1cecd173f2101e4f43bb 100644 --- a/install/ui/serverconfig.js +++ b/install/ui/serverconfig.js @@ -29,9 +29,10 @@ IPA.config.entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.details_facet({ + that.builder.details_facet({ title: IPA.metadata.objects.config.label, sections: [ { diff --git a/install/ui/service.js b/install/ui/service.js index c425657a35cc4b81a834b78a14808b548ba7481c..a7a5e4ad7cf400693850e66475e3b88c38e74d2e 100644 --- a/install/ui/service.js +++ b/install/ui/service.js @@ -29,9 +29,10 @@ IPA.service.entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.search_facet({ + that.builder.search_facet({ columns: [ 'krbprincipalname' ] }). details_facet({ diff --git a/install/ui/sudo.js b/install/ui/sudo.js index ff680027fd8242122e1238de931f0df5795353b7..9ad8296b02cad7722bb30c81f292a5137eb0cd5f 100644 --- a/install/ui/sudo.js +++ b/install/ui/sudo.js @@ -28,9 +28,10 @@ IPA.sudo.rule_entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.search_facet({ + that.builder.search_facet({ columns: [ 'cn', 'ipaenabledflag', @@ -52,9 +53,10 @@ IPA.sudo.command_entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.search_facet({ + that.builder.search_facet({ columns: [ 'sudocmd', 'description' @@ -117,9 +119,10 @@ IPA.sudo.command_group_entity = function(spec) { var that = IPA.entity(spec); - that.init = function(params) { + that.init = function() { + that.entity_init(); - params.builder.search_facet({ + that.builder.search_facet({ columns: [ 'cn', 'description' diff --git a/install/ui/test/details_tests.js b/install/ui/test/details_tests.js index 80136649b9624c32867e639f6de82ec6f68d30f1..e8f2f7c709b73aa04cd95b9779a1616aba59e5fe 100644 --- a/install/ui/test/details_tests.js +++ b/install/ui/test/details_tests.js @@ -40,12 +40,13 @@ module('details', { details_container = $('
').appendTo(document.body); - var obj_name = 'user'; - IPA.entity_factories.user= - function(){ - return IPA.entity({name:obj_name, - metadata:IPA.metadata.objects.user}); - }; + IPA.register('user', function(spec) { + + return IPA.entity({ + name: 'user', + metadata: IPA.metadata.objects.user + }); + }); }, teardown: function() { details_container.remove(); @@ -160,10 +161,10 @@ test("Testing details lifecycle: create, load.", function(){ var that = IPA.entity(spec); - that.init = function(params) { - that.entity_init(params); + that.init = function() { + that.entity_init(); - params.builder.details_facet({ + that.builder.details_facet({ sections: [ { name: 'identity', diff --git a/install/ui/test/entity_tests.js b/install/ui/test/entity_tests.js index f655493882d639bc6113cf4525869fcf35ef64dd..d130647ed979d645bb14b6235d7ea04f9c27d20c 100644 --- a/install/ui/test/entity_tests.js +++ b/install/ui/test/entity_tests.js @@ -35,12 +35,12 @@ module('entity',{ var that = IPA.entity(spec); - that.init = function(params) { - that.entity_init(params); + that.init = function() { + that.entity_init(); - params.builder.search_facet({ - columns: [ 'uid' ] - }); + that.builder.search_facet({ + columns: [ 'uid' ] + }); }; return that; diff --git a/install/ui/test/navigation_tests.js b/install/ui/test/navigation_tests.js index 92a23eebe0eafc5ce28f39360cc5589ccd88a6cc..88daa1e04afd1c67792c48df3ec2603cb7fa74de 100644 --- a/install/ui/test/navigation_tests.js +++ b/install/ui/test/navigation_tests.js @@ -41,10 +41,11 @@ test("Testing IPA.navigation.create().", function() { //Force reset of entities IPA.entities = $.ordered_map(); - IPA.entity_factories.user = function() { + IPA.register('user', function(spec) { + var that = IPA.entity({ name: 'user', - metadata:IPA.metadata.objects.user, + metadata: IPA.metadata.objects.user, facets: [ { type: 'search' @@ -57,18 +58,25 @@ test("Testing IPA.navigation.create().", function() { same(container.attr('name'), 'user', 'user container name'); same(container[0].nodeName, 'DIV', 'user container element'); }; + return that; - }; - IPA.entity_factories.group = function(){ - var that = IPA.entity({name: 'group', - metadata:IPA.metadata.objects.group}); + }); + + IPA.register('group', function(spec) { + + var that = IPA.entity({ + name: 'group', + metadata: IPA.metadata.objects.group + }); + that.display = function(container){ group_mock_called = true; same(container.attr('name'), 'group','user container name'); same(container[0].nodeName, 'DIV', 'user container element'); }; + return that; - }; + }); var navigation_container = $('