diff options
author | Petr Vobornik <pvoborni@redhat.com> | 2012-03-12 14:13:11 +0100 |
---|---|---|
committer | Petr Vobornik <pvoborni@redhat.com> | 2012-03-15 16:08:16 +0100 |
commit | 97e440bf4b4da2add771cfa4db1614668a5cd06c (patch) | |
tree | e2d0e81a59f6e037e0f26ff6ff5b0dd2c4894085 /install | |
parent | 3ca0f6aee5b04758f8473359cc14979d27d31530 (diff) | |
download | freeipa-97e440bf4b4da2add771cfa4db1614668a5cd06c.tar.gz freeipa-97e440bf4b4da2add771cfa4db1614668a5cd06c.tar.xz freeipa-97e440bf4b4da2add771cfa4db1614668a5cd06c.zip |
Better hbactest validation message
HBAC Test validation message contains all missing values in form of list of links instead of general 'missing values' message and redirection to first missing value's facet.
When a link is clicked user is redirected to value's facet.
https://fedorahosted.org/freeipa/ticket/2182
Diffstat (limited to 'install')
-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 |
4 files changed, 91 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", |