diff options
-rw-r--r-- | install/ui/dialog.js | 2 | ||||
-rw-r--r-- | install/ui/hbactest.js | 104 | ||||
-rw-r--r-- | install/ui/jsl.conf | 1 | ||||
-rw-r--r-- | install/ui/test/data/ipa_init.json | 1 | ||||
-rw-r--r-- | ipalib/plugins/internal.py | 1 |
5 files changed, 92 insertions, 17 deletions
diff --git a/install/ui/dialog.js b/install/ui/dialog.js index 324eb9b93..9003aa820 100644 --- a/install/ui/dialog.js +++ b/install/ui/dialog.js @@ -664,5 +664,7 @@ IPA.message_dialog = function(spec) { init(); + that.message_dialog_create = that.create; + return that; }; diff --git a/install/ui/hbactest.js b/install/ui/hbactest.js index 0e77083ca..cab579e13 100644 --- a/install/ui/hbactest.js +++ b/install/ui/hbactest.js @@ -410,19 +410,6 @@ IPA.hbac.test_select_facet = function(spec) { that.validate = function(record) { if (record[that.name]) return true; - var dialog = IPA.message_dialog({ - title: IPA.messages.dialogs.validation_title, - message: IPA.messages.dialogs.validation_message - }); - - dialog.on_ok = function() { - var state = {}; - state[that.entity.name+'-facet'] = that.name; - IPA.nav.push_state(state); - }; - - dialog.open(); - return false; }; @@ -691,22 +678,34 @@ IPA.hbac.test_run_facet = function(spec) { var command = IPA.command({ method: 'hbactest' }); var options = {}; + var validation_results = { + valid: true, + invalid_facets: [] + }; var facet = that.entity.get_facet('user'); facet.save(options); - if (!facet.validate(options)) return; + that.validate_facet(facet, options, validation_results); facet = that.entity.get_facet('targethost'); facet.save(options); - if (!facet.validate(options)) return; + that.validate_facet(facet, options, validation_results); facet = that.entity.get_facet('service'); facet.save(options); - if (!facet.validate(options)) return; + that.validate_facet(facet, options, validation_results); facet = that.entity.get_facet('sourcehost'); facet.save(options); - if (!facet.validate(options)) return; + that.validate_facet(facet, options, validation_results); + + if (!validation_results.valid) { + var dialog = IPA.hbac.validation_dialog({ + validation_results: validation_results + }); + dialog.open(); + return; + } facet = that.entity.get_facet('rules'); facet.save(options); @@ -721,6 +720,17 @@ IPA.hbac.test_run_facet = function(spec) { command.execute(); }; + that.validate_facet = function(facet, options, validation_results) { + + var facet_valid = facet.validate(options); + + validation_results.valid = facet_valid && validation_results.valid; + + if (!facet_valid) { + validation_results.invalid_facets.push(facet); + } + }; + that.get_records_map = function(data) { var records_map = $.ordered_map(); @@ -759,4 +769,64 @@ IPA.hbac.test_run_facet = function(spec) { return that; }; +IPA.hbac.validation_dialog = function(spec) { + + spec = spec || {}; + spec.title = spec.title || IPA.messages.dialogs.validation_title; + spec.message = spec.message || IPA.messages.dialogs.validation_message; + + var that = IPA.message_dialog(spec); + + that.validation_results = spec.validation_results; + + that.create = function() { + + if (that.message) { + that.message_dialog_create(); + } + + if (that.validation_results && that.validation_results.invalid_facets) { + var invalid_facets = that.validation_results.invalid_facets; + + var ul; + + if (invalid_facets.length > 0) { + var div = $('<div/>',{ + text: IPA.messages.objects.hbactest.missing_values + }).appendTo(that.container); + ul = $('<ul/>').appendTo(that.container); + } + + for (var i=0; i<invalid_facets.length; i++) { + + var facet = invalid_facets[i]; + + var li = $('<li />').appendTo(ul); + + var metadata = IPA.get_command_option('hbactest', facet.name); + + $('<a />', { + href: '#'+facet.name, + text: metadata.label, + click: function(facet) { + return function() { + that.redirect_to_facet(facet); + return false; + }; + }(facet) + }).appendTo(li); + } + } + }; + + that.redirect_to_facet = function(facet) { + that.close(); + var state = {}; + state[facet.entity.name+'-facet'] = facet.name; + IPA.nav.push_state(state); + }; + + return that; +}; + IPA.register('hbactest', IPA.hbac.test_entity); diff --git a/install/ui/jsl.conf b/install/ui/jsl.conf index e03212d45..3eebda4e8 100644 --- a/install/ui/jsl.conf +++ b/install/ui/jsl.conf @@ -144,6 +144,7 @@ +process user.js +process group.js +process hbac.js ++process hbactest.js +process host.js +process hostgroup.js +process netgroup.js diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json index df9fbe9c8..1b95762b4 100644 --- a/install/ui/test/data/ipa_init.json +++ b/install/ui/test/data/ipa_init.json @@ -267,6 +267,7 @@ "include_enabled": "Include Enabled", "label": "HBAC Test", "matched": "Matched", + "missing_values": "Missing values: ", "new_test": "New Test", "rules": "Rules", "run_test": "Run Test", diff --git a/ipalib/plugins/internal.py b/ipalib/plugins/internal.py index 160b40154..d00f06ab3 100644 --- a/ipalib/plugins/internal.py +++ b/ipalib/plugins/internal.py @@ -405,6 +405,7 @@ class i18n_messages(Command): "include_enabled": _("Include Enabled"), "label": _("HBAC Test"), "matched": _("Matched"), + "missing_values": _("Missing values: "), "new_test": _("New Test"), "rules": _("Rules"), "run_test": _("Run Test"), |