[Kimchi-devel] [PATCH] [WoK] Bug fix #187: Fixing redirect with non-root login
Daniel Henrique Barboza
danielhb at linux.vnet.ibm.com
Mon Dec 12 12:26:22 UTC 2016
On 12/12/2016 10:23 AM, Aline Manera wrote:
>
>
> On 12/12/2016 09:48 AM, Daniel Henrique Barboza wrote:
>>
>>
>> On 12/09/2016 03:48 PM, Aline Manera wrote:
>>>
>>>
>>> On 12/09/2016 01:19 PM, dhbarboza82 at gmail.com wrote:
>>>> From: Daniel Henrique Barboza <danielhb at linux.vnet.ibm.com>
>>>>
>>>> The 'WoK User Activity Log' tab isn't available when running
>>>> as regular (non-root) user. But, at the same time, it is acting
>>>> as the default URL when opening WoK.
>>>>
>>>> This patch redirects the default URL when logged as a regular
>>>> user as follows:
>>>>
>>>> - if no plug-ins are installed, a warning message is displayed.
>>>>
>>>> - if at least one plug-in is installed, the default URL is redirected
>>>> to the first plug-in. Considering the existing WoK plug-ins at the
>>>> time
>>>> this patch was created, it will be redirected to Gingerbase Dashboard.
>>>>
>>>> Signed-off-by: Daniel Henrique Barboza <danielhb at linux.vnet.ibm.com>
>>>> ---
>>>> ui/js/src/wok.main.js | 27 ++++++++++++++++++++++++---
>>>> 1 file changed, 24 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/ui/js/src/wok.main.js b/ui/js/src/wok.main.js
>>>> index 4b36400..260951c 100644
>>>> --- a/ui/js/src/wok.main.js
>>>> +++ b/ui/js/src/wok.main.js
>>>> @@ -209,9 +209,30 @@ wok.main = function() {
>>>> * and clear location.hash to jump to home page.
>>>> */
>>>> var tab = $('#tabPanel a[href="' + url + '"]');
>>>
>>>> - if (tab.length === 0 && url != 'wok-empty.html') {
>>>> - location.hash = '#';
>>>> - return;
>>>> + if (tab.length === 0) {
>>>> + if (url === "tabs/settings.html") {
>>>> + /*
>>>> + * This scenario means that the WoK tab isn't
>>>> avaiable for the
>>>> + * current user (probably because it's a regular
>>>> non-sudo user).
>>>> + * If there are other tabs to fall back to,
>>>> redirect to them. Otherwise,
>>>> + * if running WoK without plug-ins, put an
>>>> informative message.
>>>> + */
>>>> + if ($('#tabPanel a').length === 0) {
>>>> + var warning_msg = "Unable to access WoK User
>>>> Activity Log feature as a non-root user.<br>No plugins installed
>>>> currently. You can download the available plugins <a
>>>> href='https://github.com/kimchi-project/kimchi'>Kimchi</a> and <a
>>>> href='https://github.com/kimchi-project/ginger'>Ginger</a> from
>>>> Github."
>>>> + $('#main').html(warning_msg).addClass('noPluginMessage');
>>>> + } else {
>>>> + location.hash = '#' + $('#tabPanel
>>>> a').attr('href');
>>>> + var lastIndex =
>>>> location.hash.lastIndexOf(".html");
>>>> + if (lastIndex != -1) {
>>>> + location.hash = location.hash.substring(0,
>>>> lastIndex);
>>>> + }
>>>> + }
>>>> + return;
>>>> + }
>>>> + if (url != 'wok-empty.html') {
>>>> + location.hash = '#';
>>>> + return;
>>>> + }
>>>
>>> Seems hard coding 'tabs/settings.html' is not the right solution.
>>>
>>> From what I understood from the current code, the problem is on
>>> where to select the first tab after login.
>>> Check line 167 from wok.main.js
>>>
>>> if(tabs.length===0){
>>> DEFAULT_HASH = 'wok-empty';
>>> } else {
>>> var defaultTab = orderedTabs[0]
>>> var defaultTabPath = defaultTab && defaultTab['path']
>>>
>>> // Remove file extension from 'defaultTabPath'
>>> DEFAULT_HASH = defaultTabPath &&
>>> defaultTabPath.substring(0,
>>> defaultTabPath.lastIndexOf('.'))
>>> }
>>>
>>> genTabs(orderedTabs);
>>> wok.getHostname();
>>> wok.logos('ul#plugins',true);
>>> wok.logos('ul#wok-about',false);
>>>
>>> callback && callback();
>>> }, function(data) {
>>> wok.message.error(data.responseJSON.reason);
>>> }, true);
>>>
>>> As you can see when there is no tab, the user will see the wok-empty
>>> content.
>>> Otherwise, the defaultTab will be the first one from the list *BUT*
>>> 'orderedTabs has all the tabs specified for a plugin. But maybe not
>>> all them will be generated as some of them may have configuration to
>>> do not be shown to a normal user (as the case of this bug).
>>>
>>> So instead of getting the first element of orderedTabs we need to
>>> get the first tab really built on HTML.
>>>
>>> Something like $(.tabPanel > ul li a).attr('href') to get the first
>>> tab. All the current flow should keep the same.
>>
>>
>> I agree on not hard-coding the 'tabs/settings.html' and instead using
>> a more generic
>> approach to the problem. I'll fix that in v2.
>>
>> About "getting the first element of orderedTabs", I am not doing that
>> - I am not even using the
>> 'orderedTabs' variable. I am retrieving the existing tabs in the HTML
>> by doing:
>>
>
> I know you are not getting the value from orderedTabs, but the current
> upstream is doing that so I think the root cause of the problem is
> that. =)
>
> So replacing the code where orderedTabs is being used to the below
> code will fix the issue.
Oooohhh I see what you meant. I'll look into it!
>
>> location.hash = '#' + $('#tabPanel a').attr('href');
>>
>> Which is simply an easier way of writing
>>
>> location.hash = '#' + $('#tabPanel a')[0].attr('href');
>>
>>
>> $('#tabPanel a') retrieves the generated HTMLs, already considering
>> the scenario where
>> the plug-ins might not render some tabs due to user type restrictions.
>>
>>
>>
>> Daniel
>>
>>>
>>>
>>>
>>>
>>>> }
>>>> //Remove the tab arrow indicator for no plugin
>>>> if (url == 'wok-empty.html') {
>>>
>>
>
> _______________________________________________
> Kimchi-devel mailing list
> Kimchi-devel at ovirt.org
> http://lists.phx.ovirt.org/mailman/listinfo/kimchi-devel
>
More information about the Kimchi-devel
mailing list