From 2203bb650ce4730832cb9799be0ea1b855c07170 Mon Sep 17 00:00:00 2001 From: Endi Sukma Dewata Date: Wed, 16 Nov 2011 21:07:20 -0600 Subject: [PATCH] Added HBAC Test page. This is the initial implementation of HBAC Test page. Currently it can select user, source/target group, service, rules, and execute the test. Other functionalities to be implemented include the search filter, external users/hosts, back/next buttons, validation, styling, and internalization. Ticket #388 --- install/ui/Makefile.am | 1 + install/ui/facet.js | 59 +- install/ui/hbactest.js | 510 ++++++++++++++++++ install/ui/index.html | 13 +- install/ui/ipa.css | 20 +- install/ui/ipa.js | 14 +- install/ui/search.js | 18 +- install/ui/test/data/hbacrule_find_pkeys.json | 16 +- .../ui/test/data/hbacrule_get_records.json | 83 ++- install/ui/test/data/hbacrule_show.json | 4 +- install/ui/test/data/hbactest.json | 16 + install/ui/webui.js | 3 +- install/ui/widget.js | 10 +- 13 files changed, 710 insertions(+), 57 deletions(-) create mode 100644 install/ui/hbactest.js create mode 100644 install/ui/test/data/hbactest.json diff --git a/install/ui/Makefile.am b/install/ui/Makefile.am index 8b613666c..835888d94 100644 --- a/install/ui/Makefile.am +++ b/install/ui/Makefile.am @@ -25,6 +25,7 @@ app_DATA = \ field.js \ group.js \ hbac.js \ + hbactest.js \ host.js \ hostgroup.js \ index.html \ diff --git a/install/ui/facet.js b/install/ui/facet.js index 71ad5c08b..65ac71ee0 100644 --- a/install/ui/facet.js +++ b/install/ui/facet.js @@ -110,6 +110,9 @@ IPA.facet = function(spec) { that.header.load(data.result.result); }; + that.refresh = function() { + }; + that.clear = function() { }; @@ -320,7 +323,7 @@ IPA.facet_header = function(spec) { }).appendTo(container); var span = $('

', { - text: that.facet.entity.metadata.label + text: that.facet.entity.label }).appendTo(that.title_container); if (!that.facet.disable_facet_tabs) { @@ -341,9 +344,6 @@ IPA.facet_header = function(spec) { that.load = function(data) { if (!that.facet.disable_facet_tabs) { var pkey = that.facet.pkey; - if(!pkey || !data) { - pkey = ''; - } var facet_groups = that.facet.entity.facet_groups.values; for (var i=0; i + * + * Copyright (C) 2010 Red Hat + * see file 'COPYING' for use and warranty information + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* REQUIRES: ipa.js, details.js, search.js, add.js, facet.js, entity.js,hbac.js */ + +IPA.hbac.test_entity = function(spec) { + + var that = IPA.entity(spec); + + that.get_default_metadata = function() { + return IPA.metadata.commands[that.name]; + }; + + that.init = function() { + that.entity_init(); + + that.label = IPA.messages.objects.hbactest.label; + + that.builder.facet_groups([ 'default' ]). + facet({ + factory: IPA.hbac.test_facet, + name: 'user', + label: 'Who', + managed_entity_name: 'user', + disable_breadcrumb: true, + facet_group: 'default', + columns: [ + 'uid', + 'givenname', + 'sn' + ] + }). + facet({ + factory: IPA.hbac.test_facet, + name: 'targethost', + label: 'Accessing', + managed_entity_name: 'host', + disable_breadcrumb: true, + facet_group: 'default', + columns: [ + 'fqdn', + 'description', + { + name: 'has_keytab', + label: IPA.messages.objects.host.enrolled + } + ] + }). + facet({ + factory: IPA.hbac.test_facet, + name: 'service', + label: 'Via Service', + managed_entity_name: 'hbacsvc', + disable_breadcrumb: true, + facet_group: 'default', + columns: [ + 'cn', + 'description' + ] + }). + facet({ + factory: IPA.hbac.test_facet, + name: 'sourcehost', + label: 'From Host', + managed_entity_name: 'host', + disable_breadcrumb: true, + facet_group: 'default', + columns: [ + 'fqdn', + 'description', + { + name: 'has_keytab', + label: IPA.messages.objects.host.enrolled + } + ] + }). + facet({ + factory: IPA.hbac.test_rules_facet, + name: 'rules', + label: 'On Rules', + managed_entity_name: 'hbacrule', + disable_breadcrumb: true, + facet_group: 'default', + multivalued: true, + columns: [ + 'cn', + 'ipaenabledflag', + 'description' + ] + }). + facet({ + factory: IPA.hbac.test_run_facet, + name: 'run', + label: 'Run Test', + managed_entity_name: 'hbacrule', + disable_breadcrumb: true, + pagination: true, + facet_group: 'default', + columns: [ + 'cn', + { + name: 'matched', + label: 'Matched' + }, + 'ipaenabledflag', + 'description' + ] + }); + }; + + return that; +}; + +IPA.hbac.test_facet = function(spec) { + + spec = spec || {}; + + var that = IPA.table_facet(spec); + that.multivalued = spec.multivalued; + + var init = function() { + + that.managed_entity = IPA.get_entity(that.managed_entity_name); + + var columns = that.columns.values; + for (var i=0; i', { + text: that.label + }).appendTo(container); + + var filter_container = $('
', { + 'class': 'search-filter' + }).appendTo(header); + + that.filter = $('', { + type: 'text', + name: 'filter' + }).appendTo(filter_container); + + that.filter.keypress(function(e) { + /* if the key pressed is the enter key */ + if (e.which == 13) { + that.find(); + } + }); + + that.find_button = IPA.action_button({ + name: 'find', + icon: 'search-icon', + click: function() { + that.find(); + return false; + } + }).appendTo(filter_container); + + header.append(IPA.create_network_spinner()); + + var div = $('
', { + style: 'position: relative; height: 200px' + }).appendTo(container); + + that.table.create(div); + + container.append('
'); + + that.create_buttons(container); + }; + + that.create_buttons = function(container) { + + var buttons = $('
', { + style: 'float: right' + }).appendTo(container); + + that.back_button = IPA.button({ + name: 'back', + label: 'Back', + click: function() { + if (!that.back_button.hasClass('action-button-disabled')) { + that.back(); + } + return false; + } + }).appendTo(buttons); + + that.next_button = IPA.button({ + name: 'next', + label: 'Next', + click: function() { + if (!that.add_button.hasClass('action-button-disabled')) { + that.next(); + } + return false; + } + }).appendTo(buttons); + }; + + that.get_pkeys = function(data) { + var result = data.result.result; + var pkey_name = that.managed_entity.metadata.primary_key; + var pkeys = []; + for (var i=0; i', { + }).appendTo(container); + + $('

', { + text: that.label, + style: 'display: inline-block' + }).appendTo(header); + + header.append(' '); + + that.enabled = $('', { + id: 'hbactest-rules-include-enabled', + type: 'checkbox', + name: 'enabled' + }).appendTo(header); + + $('