[Kimchi-devel] [PATCH] [WoK] Bug fix #187: Fixing redirect with non-root login

Daniel Henrique Barboza dhbarboza82 at gmail.com
Mon Dec 12 11:48:49 UTC 2016



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:

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') {
>




More information about the Kimchi-devel mailing list