[Freeipa-devel] [freeipa PR#549][synchronized] WebUI: certmap match
URL: https://github.com/freeipa/freeipa/pull/549 Author: pvomacka Title: #549: WebUI: certmap match Action: synchronized To pull the PR as Git branch: git remote add ghfreeipa https://github.com/freeipa/freeipa git fetch ghfreeipa pull/549/head:pr549 git checkout pr549 From 5fb22584c08ee50afce10bdd4ba6572d7a6b00ae Mon Sep 17 00:00:00 2001 From: Pavel Vomacka Date: Tue, 7 Mar 2017 21:28:32 +0100 Subject: [PATCH 1/4] WebUI: Add possibility to turn of autoload when details.load is called When field on details facet has set 'autoload_value' to false, then it won't be loaded using that.load method of details facet. That means that field might stay unchanged even that loading of data was performed. Part of: https://pagure.io/freeipa/issue/6601 --- install/ui/src/freeipa/details.js | 3 ++- install/ui/src/freeipa/field.js | 8 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/install/ui/src/freeipa/details.js b/install/ui/src/freeipa/details.js index 9f0e632..87b355a 100644 --- a/install/ui/src/freeipa/details.js +++ b/install/ui/src/freeipa/details.js @@ -743,7 +743,8 @@ exp.details_facet = IPA.details_facet = function(spec, no_init) { var fields = that.fields.get_fields(); for (var i=0; i Date: Tue, 7 Mar 2017 21:30:00 +0100 Subject: [PATCH 2/4] WebUI: Possibility to choose object when API call returns list of objects In case that API call returns array of objects which contains data, using 'object_index' attribute in adapter specification we can set which object should be used. It is possible to choose only one object specified by its index in array. Part of: https://pagure.io/freeipa/issue/6601 --- install/ui/src/freeipa/field.js | 13 + 1 file changed, 13 insertions(+) diff --git a/install/ui/src/freeipa/field.js b/install/ui/src/freeipa/field.js index 3c027bc..ea548c0 100644 --- a/install/ui/src/freeipa/field.js +++ b/install/ui/src/freeipa/field.js @@ -819,6 +819,15 @@ field.Adapter = declare(null, { result_index: 0, /** + * When result of API call is an array of object this object index + * allows to specify exact object in array according to its position. + * Default value is null which means do not use object_index. + * + * @type {Number|null} + */ +object_index: null, + +/** * Name of the record which we want to extract from the result. * Used in dnslocations. * @type {String} @@ -849,6 +858,10 @@ field.Adapter = declare(null, { else if (dr.results) { var result = dr.results[this.result_index]; if (result) record = result[this.result_name]; +var res_type = typeof record; +var obj_in_type = typeof this.object_index; +if (res_type === 'object' && obj_in_type === 'number') +record = record[this.object_index]; } } return record; From 29d75b30edc2af4a4709b3d55b6d8cbc5855aed7 Mon Sep 17 00:00:00 2001 From: Pavel Vomacka Date: Tue, 7 Mar 2017 21:30:45 +0100 Subject: [PATCH 3/4] WebUI: Add Adapter for certmap_match result table Result of certmap_match command is in the following format: [{domain: 'domain1', uid:[uid11,uid12,uid13]}, {domain: 'domain2', uid:[uid21, uid22, uid23},...] For correct displaying in table we need to reformat it to the following: [{domain: 'domain1', uid: 'uid11'}, {domain: 'domain1', uid: 'uid12'},... This can be done using this Adapter. Part of: https://pagure.io/freeipa/issue/6601 --- install/ui/src/freeipa/field.js | 79 + 1 file changed, 79 insertions(+) diff --git a/install/ui/src/freeipa/field.js b/install/ui/src/freeipa/field.js index ea548c0..5df2f6c 100644 --- a/install/ui/src/freeipa/field.js +++ b/install/ui/src/freeipa/field.js @@ -1495,6 +1495,84 @@ field.AlternateAttrFieldAdapter = declare([field.Adapter], { /** + * Custom adapter specifically implemented for certmap_match where it + * transform items in format {domain: "xxx", uid: [arrayof_uids]} to + * {[{domain: "xxx", uid: "uid1"}, {domain: "xxx", uid: 'uid2'}, ...]}. + * This is necessary for possibility to correctly display table. + * + * @class + * @extends field.Adapter + */ +field.CertMatchTransformAdapter = declare([field.Adapter], { + +/** +* @param {Array} record +*/ +transform_one_record: function(record) { +var domain = record.domain; +var uids = record.uid; +var results = []; + +for (var i=0, l=uids.length; i Date: Tue, 7 Mar 2017 21:31:22 +0100 Subject: [PATCH 4/4] WebUI: Add cermapmatch module Add module which can show users which are mapped to the provided certificate. Additionaly, the certificate is parsed and parsed information are also displayed. https://pagure.io/freeipa/issue/6601 --- install/ui/src/freeipa/app.js | 1 + install/ui/src/freeipa/navigation/menu_spec.js | 4 + install/ui/src/freeipa/plugin
[Freeipa-devel] [freeipa PR#549][synchronized] WebUI: certmap match
URL: https://github.com/freeipa/freeipa/pull/549 Author: pvomacka Title: #549: WebUI: certmap match Action: synchronized To pull the PR as Git branch: git remote add ghfreeipa https://github.com/freeipa/freeipa git fetch ghfreeipa pull/549/head:pr549 git checkout pr549 From 230fcbb463266a957da60b28ee4251361027 Mon Sep 17 00:00:00 2001 From: Pavel Vomacka Date: Tue, 7 Mar 2017 21:28:32 +0100 Subject: [PATCH 1/4] WebUI: Add possibility to turn of autoload when details.load is called When field on details facet has set 'autoload_value' to false, then it won't be loaded using that.load method of details facet. That means that field might stay unchanged even that loading of data was performed. Part of: https://pagure.io/freeipa/issue/6601 --- install/ui/src/freeipa/details.js | 3 ++- install/ui/src/freeipa/field.js | 8 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/install/ui/src/freeipa/details.js b/install/ui/src/freeipa/details.js index 9f0e632..87b355a 100644 --- a/install/ui/src/freeipa/details.js +++ b/install/ui/src/freeipa/details.js @@ -743,7 +743,8 @@ exp.details_facet = IPA.details_facet = function(spec, no_init) { var fields = that.fields.get_fields(); for (var i=0; i Date: Tue, 7 Mar 2017 21:30:00 +0100 Subject: [PATCH 2/4] WebUI: Possibility to choose object when API call returns list of objects In case that API call returns array of objects which contains data, using 'object_index' attribute in adapter specification we can set which object should be used. It is possible to choose only one object specified by its index in array. Part of: https://pagure.io/freeipa/issue/6601 --- install/ui/src/freeipa/field.js | 13 + 1 file changed, 13 insertions(+) diff --git a/install/ui/src/freeipa/field.js b/install/ui/src/freeipa/field.js index 4a63242..3b6b97b 100644 --- a/install/ui/src/freeipa/field.js +++ b/install/ui/src/freeipa/field.js @@ -819,6 +819,15 @@ field.Adapter = declare(null, { result_index: 0, /** + * When result of API call is an array of object this object index + * allows to specify exact object in array according to its position. + * Default value is null which means do not use object_index. + * + * @type {Number|null} + */ + object_index: null, + +/** * Name of the record which we want to extract from the result. * Used in dnslocations. * @type {String} @@ -849,6 +858,10 @@ field.Adapter = declare(null, { else if (dr.results) { var result = dr.results[this.result_index]; if (result) record = result[this.result_name]; +var res_type = typeof record; +var obj_in_type = typeof this.object_index; +if (res_type === 'object' && obj_in_type === 'number') +record = record[this.object_index]; } } return record; From 7d30594f88572970ee3428234af9a49a5397b10f Mon Sep 17 00:00:00 2001 From: Pavel Vomacka Date: Tue, 7 Mar 2017 21:30:45 +0100 Subject: [PATCH 3/4] WebUI: Add Adapter for certmap_match result table Result of certmap_match command is in the following format: [{domain: 'domain1', uid:[uid11,uid12,uid13]}, {domain: 'domain2', uid:[uid21, uid22, uid23},...] For correct displaying in table we need to reformat it to the following: [{domain: 'domain1', uid: 'uid11'}, {domain: 'domain1', uid: 'uid12'},... This can be done using this Adapter. Part of: https://pagure.io/freeipa/issue/6601 --- install/ui/src/freeipa/field.js | 79 + 1 file changed, 79 insertions(+) diff --git a/install/ui/src/freeipa/field.js b/install/ui/src/freeipa/field.js index 3b6b97b..dde2837 100644 --- a/install/ui/src/freeipa/field.js +++ b/install/ui/src/freeipa/field.js @@ -1462,6 +1462,84 @@ field.AlternateAttrFieldAdapter = declare([field.Adapter], { /** + * Custom adapter specifically implemented for certmap_match where it + * transform items in format {domain: "xxx", uid: [arrayof_uids]} to + * {[{domain: "xxx", uid: "uid1"}, {domain: "xxx", uid: 'uid2'}, ...]}. + * This is necessary for possibility to correctly display table. + * + * @class + * @extends field.Adapter + */ +field.CertMatchTransformAdapter = declare([field.Adapter], { + +/** +* @param {Array} record +*/ +transform_one_record: function(record) { +var domain = record.domain; +var uids = record.uid; +var results = []; + +for (var i=0, l=uids.length; i Date: Tue, 7 Mar 2017 21:31:22 +0100 Subject: [PATCH 4/4] WebUI: Add cermapmatch module Add module which can show users which are mapped to the provided certificate. Additionaly, the certificate is parsed and parsed information are also displayed. https://pagure.io/freeipa/issue/6601 --- install/ui/src/freeipa/app.js | 1 + install/ui/src/freeipa/navigation/menu_spec.js | 4 + install/ui/src/freeipa/plugi
[Freeipa-devel] [freeipa PR#549][synchronized] WebUI: certmap match
URL: https://github.com/freeipa/freeipa/pull/549 Author: pvomacka Title: #549: WebUI: certmap match Action: synchronized To pull the PR as Git branch: git remote add ghfreeipa https://github.com/freeipa/freeipa git fetch ghfreeipa pull/549/head:pr549 git checkout pr549 From 230fcbb463266a957da60b28ee4251361027 Mon Sep 17 00:00:00 2001 From: Pavel Vomacka Date: Tue, 7 Mar 2017 21:28:32 +0100 Subject: [PATCH 1/4] WebUI: Add possibility to turn of autoload when details.load is called When field on details facet has set 'autoload_value' to false, then it won't be loaded using that.load method of details facet. That means that field might stay unchanged even that loading of data was performed. Part of: https://pagure.io/freeipa/issue/6601 --- install/ui/src/freeipa/details.js | 3 ++- install/ui/src/freeipa/field.js | 8 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/install/ui/src/freeipa/details.js b/install/ui/src/freeipa/details.js index 9f0e632..87b355a 100644 --- a/install/ui/src/freeipa/details.js +++ b/install/ui/src/freeipa/details.js @@ -743,7 +743,8 @@ exp.details_facet = IPA.details_facet = function(spec, no_init) { var fields = that.fields.get_fields(); for (var i=0; i Date: Tue, 7 Mar 2017 21:30:00 +0100 Subject: [PATCH 2/4] WebUI: Possibility to choose object when API call returns list of objects In case that API call returns array of objects which contains data, using 'object_index' attribute in adapter specification we can set which object should be used. It is possible to choose only one object specified by its index in array. Part of: https://pagure.io/freeipa/issue/6601 --- install/ui/src/freeipa/field.js | 13 + 1 file changed, 13 insertions(+) diff --git a/install/ui/src/freeipa/field.js b/install/ui/src/freeipa/field.js index 4a63242..3b6b97b 100644 --- a/install/ui/src/freeipa/field.js +++ b/install/ui/src/freeipa/field.js @@ -819,6 +819,15 @@ field.Adapter = declare(null, { result_index: 0, /** + * When result of API call is an array of object this object index + * allows to specify exact object in array according to its position. + * Default value is null which means do not use object_index. + * + * @type {Number|null} + */ + object_index: null, + +/** * Name of the record which we want to extract from the result. * Used in dnslocations. * @type {String} @@ -849,6 +858,10 @@ field.Adapter = declare(null, { else if (dr.results) { var result = dr.results[this.result_index]; if (result) record = result[this.result_name]; +var res_type = typeof record; +var obj_in_type = typeof this.object_index; +if (res_type === 'object' && obj_in_type === 'number') +record = record[this.object_index]; } } return record; From 7d30594f88572970ee3428234af9a49a5397b10f Mon Sep 17 00:00:00 2001 From: Pavel Vomacka Date: Tue, 7 Mar 2017 21:30:45 +0100 Subject: [PATCH 3/4] WebUI: Add Adapter for certmap_match result table Result of certmap_match command is in the following format: [{domain: 'domain1', uid:[uid11,uid12,uid13]}, {domain: 'domain2', uid:[uid21, uid22, uid23},...] For correct displaying in table we need to reformat it to the following: [{domain: 'domain1', uid: 'uid11'}, {domain: 'domain1', uid: 'uid12'},... This can be done using this Adapter. Part of: https://pagure.io/freeipa/issue/6601 --- install/ui/src/freeipa/field.js | 79 + 1 file changed, 79 insertions(+) diff --git a/install/ui/src/freeipa/field.js b/install/ui/src/freeipa/field.js index 3b6b97b..dde2837 100644 --- a/install/ui/src/freeipa/field.js +++ b/install/ui/src/freeipa/field.js @@ -1462,6 +1462,84 @@ field.AlternateAttrFieldAdapter = declare([field.Adapter], { /** + * Custom adapter specifically implemented for certmap_match where it + * transform items in format {domain: "xxx", uid: [arrayof_uids]} to + * {[{domain: "xxx", uid: "uid1"}, {domain: "xxx", uid: 'uid2'}, ...]}. + * This is necessary for possibility to correctly display table. + * + * @class + * @extends field.Adapter + */ +field.CertMatchTransformAdapter = declare([field.Adapter], { + +/** +* @param {Array} record +*/ +transform_one_record: function(record) { +var domain = record.domain; +var uids = record.uid; +var results = []; + +for (var i=0, l=uids.length; i Date: Tue, 7 Mar 2017 21:31:22 +0100 Subject: [PATCH 4/4] WebUI: Add cermapmatch module Add module which can show users which are mapped to the provided certificate. Additionaly, the certificate is parsed and parsed information are also displayed. https://pagure.io/freeipa/issue/6601 --- install/ui/src/freeipa/app.js | 1 + install/ui/src/freeipa/navigation/menu_spec.js | 4 + install/ui/src/freeipa/plugi
[Freeipa-devel] [freeipa PR#549][synchronized] WebUI: certmap match
URL: https://github.com/freeipa/freeipa/pull/549 Author: pvomacka Title: #549: WebUI: certmap match Action: synchronized To pull the PR as Git branch: git remote add ghfreeipa https://github.com/freeipa/freeipa git fetch ghfreeipa pull/549/head:pr549 git checkout pr549 From 8bb768e9acfd4442deb579c43f0f90cf16dafb37 Mon Sep 17 00:00:00 2001 From: Pavel Vomacka Date: Mon, 16 Jan 2017 13:59:16 +0100 Subject: [PATCH 1/8] WebUI: Add possibility to set field always writable If field will have set attribute 'always_writable' to true, then 'no_update' flag will be ingored. Used in command user-{add,remove}-certmap which needs to be writable in WebUI and also needs to be omitted from user-mod command. Part of: https://fedorahosted.org/freeipa/ticket/6601 --- install/ui/src/freeipa/field.js | 43 +++- install/ui/src/freeipa/widget.js | 35 ++-- 2 files changed, 52 insertions(+), 26 deletions(-) diff --git a/install/ui/src/freeipa/field.js b/install/ui/src/freeipa/field.js index d70a778..9f287dd 100644 --- a/install/ui/src/freeipa/field.js +++ b/install/ui/src/freeipa/field.js @@ -484,7 +484,16 @@ field.field = IPA.field = function(spec) { writable = false; } -if (that.metadata.flags && array.indexOf(that.metadata.flags, 'no_update') > -1) { +// In case that field has set always_writable attribute, then +// 'no_update' flag is ignored in WebUI. It is done because of +// commands like user-{add,remove}-certmap. They operate with user's +// attribute, which cannot be changed using user-mod, but only +// using command user-{add,remove}-certmap. Therefore it has set +// 'no_update' flag, but we need to show 'Add', 'Remove' buttons in +// WebUI. +if (that.metadata.flags && +array.indexOf(that.metadata.flags, 'no_update') > -1 && +!that.always_writable) { writable = false; } } @@ -1259,6 +1268,37 @@ field.certs_field = IPA.certs_field = function(spec) { return that; }; + +/** + * Used along with custom_command_multivalued widget + * + * - by default has `w_if_no_aci` to workaround missing object class + * - by default has always_writable=true to workaround aci rights + * + * @class + * @alternateClassName IPA.custom_command_multivalued_field + * @extends IPA.field + */ +field.certmap_command_multivalued_field = function(spec) { + +spec = spec || {}; +spec.flags = spec.flags || ['w_if_no_aci']; + +var that = IPA.field(spec); + +/** + * Set field always writable in case that it is set to true + * @param Boolean always_writable + */ +that.always_writable = spec.always_writable === undefined ? true : +spec.always_writable; + +return that; +}; + + +IPA.custom_command_multivalued_field = field.custom_command_multivalued_field; + /** * SSH Keys Adapter * @class @@ -1652,6 +1692,7 @@ field.register = function() { f.register('checkbox', field.checkbox_field); f.register('checkboxes', field.field); f.register('combobox', field.field); +f.register('certmap_multivalued', field.certmap_command_multivalued_field); f.register('datetime', field.datetime_field); f.register('enable', field.enable_field); f.register('entity_select', field.field); diff --git a/install/ui/src/freeipa/widget.js b/install/ui/src/freeipa/widget.js index 15f0126..b7028a9 100644 --- a/install/ui/src/freeipa/widget.js +++ b/install/ui/src/freeipa/widget.js @@ -1534,12 +1534,8 @@ IPA.custom_command_multivalued_widget = function(spec) { * Called on error of add command. Override point. */ that.on_error_add = function(xhr, text_status, error_thrown) { -that.adder_dialog.focus_first_element(); - -if (error_thrown.message) { -var msg = error_thrown.message; -IPA.notify(msg, 'error'); -} +that.adder_dialog.show(); +exp.focus_invalid(that.adder_dialog); }; /** @@ -1599,27 +1595,16 @@ IPA.custom_command_multivalued_widget = function(spec) { name: 'custom-add-dialog' }; -that.adder_dialog = IPA.dialog(spec); -that.adder_dialog.create_button({ -name: 'add', -label: '@i18n:buttons.add', -click: function() { -if (!that.adder_dialog.validate()) { -exp.focus_invalid(that.adder_dialog); -} -else { -that.add(that.adder_dialog); -} +spec.on_ok = function() { +if (!that.adder_dialog.validate()) { +exp.focus_invalid(that.adder_dialog); } -}); - -that.adder_dialog.create_button({ -name: 'cancel', -label: '@i18n:buttons.cancel', -click: function()