|
|
fef02c |
From 014aab243a4e7185ad5ebdc0a71e7de81553e501 Mon Sep 17 00:00:00 2001
|
|
|
fef02c |
From: Pavel Vomacka <pvomacka@redhat.com>
|
|
|
fef02c |
Date: Mon, 17 Oct 2016 14:33:07 +0200
|
|
|
fef02c |
Subject: [PATCH] WebUI: services without canonical name are shown correctly
|
|
|
fef02c |
|
|
|
fef02c |
There is a change introduced in 4.4 that new services have canonical name. The old ones
|
|
|
fef02c |
didn't have it, therefore these services were not correctly displayed in WebUI.
|
|
|
fef02c |
|
|
|
fef02c |
This patch adds support for this type of services. Service name is taken from
|
|
|
fef02c |
'krbprincipalname' attribute in case that 'krbcanonicalname' attribute is not present
|
|
|
fef02c |
in server response.
|
|
|
fef02c |
|
|
|
fef02c |
https://fedorahosted.org/freeipa/ticket/6397
|
|
|
fef02c |
|
|
|
fef02c |
Reviewed-By: Petr Vobornik <pvoborni@redhat.com>
|
|
|
fef02c |
---
|
|
|
fef02c |
install/ui/src/freeipa/field.js | 41 ++++++++++++++++++++++++++++++
|
|
|
fef02c |
install/ui/src/freeipa/service.js | 52 ++++++++++++++++++++++++++++++++++++++-
|
|
|
fef02c |
2 files changed, 92 insertions(+), 1 deletion(-)
|
|
|
fef02c |
|
|
|
fef02c |
diff --git a/install/ui/src/freeipa/field.js b/install/ui/src/freeipa/field.js
|
|
|
fef02c |
index d8b957f5ab28b5ee4bc4ebce2ae6f454083bc4fd..efa2fb6ef4d4b5384661e9023ace511730954153 100644
|
|
|
fef02c |
--- a/install/ui/src/freeipa/field.js
|
|
|
fef02c |
+++ b/install/ui/src/freeipa/field.js
|
|
|
fef02c |
@@ -1306,6 +1306,46 @@ field.ObjectAdapter = declare([field.Adapter], {
|
|
|
fef02c |
|
|
|
fef02c |
|
|
|
fef02c |
/**
|
|
|
fef02c |
+ * Custom adapter for fields which handles situations when there is no value
|
|
|
fef02c |
+ * for attribute (name) of the field and we want to use alternative attribute
|
|
|
fef02c |
+ * from response. We can set the alternative attribute name to the 'alt_attr'
|
|
|
fef02c |
+ * attribute of the adapter.
|
|
|
fef02c |
+ * This adapter is used i.e. in table in search facet for services. Handles
|
|
|
fef02c |
+ * situations where older services don't have canonical name.
|
|
|
fef02c |
+ *
|
|
|
fef02c |
+ * @class
|
|
|
fef02c |
+ * @extends field.Adapter
|
|
|
fef02c |
+ */
|
|
|
fef02c |
+field.AlternateAttrFieldAdapter = declare([field.Adapter], {
|
|
|
fef02c |
+ /**
|
|
|
fef02c |
+ * In case that the value is not get using field name then use alternative
|
|
|
fef02c |
+ * name.
|
|
|
fef02c |
+ * @param {Object} data Object which contains the record or the record
|
|
|
fef02c |
+ * @param {string} [attribute] attribute name - overrides `context.param`
|
|
|
fef02c |
+ * @param {Mixed} [def_val] default value - overrides `context.default_value`
|
|
|
fef02c |
+ * @returns {Array} attribute value
|
|
|
fef02c |
+ */
|
|
|
fef02c |
+ load: function(data, attribute, def_val) {
|
|
|
fef02c |
+ var record = this.get_record(data);
|
|
|
fef02c |
+ var value = null;
|
|
|
fef02c |
+ var attr = attribute || this.context.param;
|
|
|
fef02c |
+ var def = def_val || this.context.default_value;
|
|
|
fef02c |
+ if (record) {
|
|
|
fef02c |
+ value = this.get_value(record, attr);
|
|
|
fef02c |
+ if (util.is_empty(value) && this.context.adapter.alt_attr) {
|
|
|
fef02c |
+ value = this.get_value(record, this.context.adapter.alt_attr);
|
|
|
fef02c |
+ }
|
|
|
fef02c |
+ }
|
|
|
fef02c |
+ if (util.is_empty(value) && !util.is_empty(def)) {
|
|
|
fef02c |
+ value = util.normalize_value(def);
|
|
|
fef02c |
+ }
|
|
|
fef02c |
+ value = rpc.extract_objects(value);
|
|
|
fef02c |
+ return value;
|
|
|
fef02c |
+ }
|
|
|
fef02c |
+});
|
|
|
fef02c |
+
|
|
|
fef02c |
+
|
|
|
fef02c |
+/**
|
|
|
fef02c |
* Field for enabling/disabling entity
|
|
|
fef02c |
*
|
|
|
fef02c |
* - expects radio widget
|
|
|
fef02c |
@@ -1577,6 +1617,7 @@ field.register = function() {
|
|
|
fef02c |
|
|
|
fef02c |
l.register('adapter', field.Adapter);
|
|
|
fef02c |
l.register('object_adapter', field.ObjectAdapter);
|
|
|
fef02c |
+ l.register('alternate_attr_field_adapter', field.AlternateAttrFieldAdapter);
|
|
|
fef02c |
};
|
|
|
fef02c |
phases.on('registration', field.register);
|
|
|
fef02c |
|
|
|
fef02c |
diff --git a/install/ui/src/freeipa/service.js b/install/ui/src/freeipa/service.js
|
|
|
fef02c |
index 30e336c35b8eece2e5e3ef55629d0c98f097fbf5..a6607d22e83047fb2d0dcc7775891445df4910b7 100644
|
|
|
fef02c |
--- a/install/ui/src/freeipa/service.js
|
|
|
fef02c |
+++ b/install/ui/src/freeipa/service.js
|
|
|
fef02c |
@@ -58,7 +58,16 @@ return {
|
|
|
fef02c |
facets: [
|
|
|
fef02c |
{
|
|
|
fef02c |
$type: 'search',
|
|
|
fef02c |
- columns: [ 'krbcanonicalname' ]
|
|
|
fef02c |
+ $factory: IPA.service.search_facet,
|
|
|
fef02c |
+ columns: [
|
|
|
fef02c |
+ {
|
|
|
fef02c |
+ name: 'krbcanonicalname',
|
|
|
fef02c |
+ adapter: {
|
|
|
fef02c |
+ $type: 'alternate_attr_field_adapter',
|
|
|
fef02c |
+ alt_attr: 'krbprincipalname'
|
|
|
fef02c |
+ }
|
|
|
fef02c |
+ }
|
|
|
fef02c |
+ ]
|
|
|
fef02c |
},
|
|
|
fef02c |
{
|
|
|
fef02c |
$type: 'details',
|
|
|
fef02c |
@@ -403,6 +412,47 @@ return {
|
|
|
fef02c |
}
|
|
|
fef02c |
};};
|
|
|
fef02c |
|
|
|
fef02c |
+
|
|
|
fef02c |
+/**
|
|
|
fef02c |
+ * Custom search facet for services. It has alternative primary key, in case
|
|
|
fef02c |
+ * that the service doesn't have canonical name.
|
|
|
fef02c |
+ */
|
|
|
fef02c |
+IPA.service.search_facet = function(spec) {
|
|
|
fef02c |
+ spec = spec || {};
|
|
|
fef02c |
+
|
|
|
fef02c |
+ spec.alternative_pkey = spec.alternative_pkey || 'krbprincipalname';
|
|
|
fef02c |
+
|
|
|
fef02c |
+ var that = IPA.search_facet(spec);
|
|
|
fef02c |
+
|
|
|
fef02c |
+ that.alternative_pkey = spec.alternative_pkey;
|
|
|
fef02c |
+
|
|
|
fef02c |
+ that.get_records_map = function(data) {
|
|
|
fef02c |
+
|
|
|
fef02c |
+ var records_map = $.ordered_map();
|
|
|
fef02c |
+
|
|
|
fef02c |
+ var result = data.result.result;
|
|
|
fef02c |
+ var pkey_name = that.managed_entity.metadata.primary_key ||
|
|
|
fef02c |
+ that.primary_key_name;
|
|
|
fef02c |
+ var adapter = builder.build('adapter', 'adapter', {context: that});
|
|
|
fef02c |
+
|
|
|
fef02c |
+ for (var i=0; i
|
|
|
fef02c |
+ var record = result[i];
|
|
|
fef02c |
+ var pkey = adapter.load(record, pkey_name)[0];
|
|
|
fef02c |
+ if (pkey === undefined && that.alternative_pkey) {
|
|
|
fef02c |
+ pkey = adapter.load(record, that.alternative_pkey)[0];
|
|
|
fef02c |
+ }
|
|
|
fef02c |
+ if (that.filter_records(records_map, pkey, record)) {
|
|
|
fef02c |
+ records_map.put(pkey, record);
|
|
|
fef02c |
+ }
|
|
|
fef02c |
+ }
|
|
|
fef02c |
+
|
|
|
fef02c |
+ return records_map;
|
|
|
fef02c |
+ };
|
|
|
fef02c |
+
|
|
|
fef02c |
+ return that;
|
|
|
fef02c |
+};
|
|
|
fef02c |
+
|
|
|
fef02c |
+
|
|
|
fef02c |
IPA.service.details_facet = function(spec, no_init) {
|
|
|
fef02c |
|
|
|
fef02c |
var that = IPA.details_facet(spec, true);
|
|
|
fef02c |
--
|
|
|
fef02c |
2.7.4
|
|
|
fef02c |
|