summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Vobornik <pvoborni@redhat.com>2012-03-12 14:13:11 +0100
committerPetr Vobornik <pvoborni@redhat.com>2012-03-15 16:08:16 +0100
commit97e440bf4b4da2add771cfa4db1614668a5cd06c (patch)
treee2d0e81a59f6e037e0f26ff6ff5b0dd2c4894085
parent3ca0f6aee5b04758f8473359cc14979d27d31530 (diff)
downloadfreeipa-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
-rw-r--r--install/ui/dialog.js2
-rw-r--r--install/ui/hbactest.js104
-rw-r--r--install/ui/jsl.conf1
-rw-r--r--install/ui/test/data/ipa_init.json1
-rw-r--r--ipalib/plugins/internal.py1
5 files changed, 92 insertions, 17 deletions
diff --git a/install/ui/dialog.js b/install/ui/dialog.js
index 324eb9b9..9003aa82 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 0e77083c..cab579e1 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 e03212d4..3eebda4e 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 df9fbe9c..1b95762b 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 160b4015..d00f06ab 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"),