Plush: URLs lack trailing /

Report & discuss bugs found in SABnzbd
Forum rules
Help us help you:
  • Are you using the latest stable version of SABnzbd? Downloads page.
  • Tell us what system you run SABnzbd on.
  • Adhere to the forum rules.
  • Do you experience problems during downloading?
    Check your connection in Status and Interface settings window.
    Use Test Server in Config > Servers.
    We will probably ask you to do a test using only basic settings.
  • Do you experience problems during repair or unpacking?
    Enable +Debug logging in the Status and Interface settings window and share the relevant parts of the log here using [ code ] sections.
Post Reply
User avatar
sander
Release Testers
Release Testers
Posts: 9429
Joined: January 22nd, 2008, 2:22 pm

Plush: URLs lack trailing /

Post by sander »

Plush present the URLs for Downloads, Status, RSS, Config without a trailing "/", whereas the real URL has a trailing "/". This leads to problems when using a reverse proxy (and maybe other use cases): nothing happens when clicking on those links

Example:
The link under "Config" is http://...:8080/config , but clicking on it 'eventually' leads to http://...:8080/config/ . That is just like typing http://www.google.com which will result in http://www.google.com/

So I would say that is a minor bug, with big results in my setup.

Solution: have trailing "/"-s in the URLs of Plush in the case it's needed.

FWIW: the 'smpl' skin does present correct URLs with a trailing slash, and that works good via my reverse proxy.
User avatar
sander
Release Testers
Release Testers
Posts: 9429
Joined: January 22nd, 2008, 2:22 pm

Re: Plush: URLs lack trailing /

Post by sander »

I found where the problem / bug is: in interfaces/Plush/templates/_inc_header.tmpl replace

<a href="${path}config">

with

<a href="${path}config/">

and the URL is really pointing to what is wanted.

In general, any reference starting with "href="${path}" which points to a directory (and not a file), should end with a /.

@shypike: who is the maintainer of Plush? Can I contact him/her?

Code: Select all

sander@toverdoos:/usr/share/sabnzbdplus/interfaces/Plush/templates$ grep 'href="${path}config/"' _inc_header.tmpl 

          <li#if $pane!="RSS" and $pane!="Nzo" and ($pane=="Config" or $path=='../../')# class="active last"#else# class="last"#end if#><a href="${path}config/"><span class="icon_nav_config">$T('menu-config').capitalize()</span></a></li>

User avatar
sander
Release Testers
Release Testers
Posts: 9429
Joined: January 22nd, 2008, 2:22 pm

Re: Plush: URLs lack trailing /

Post by sander »

Here is the patched _inc_header.tmpl for Plush on SABnzbd 0.6.8.

Code: Select all

#if $pane=="Connections" or $pane=="Config"#
  #set global $path = '../'#
#else if $pane=="Main"#
  #set global $path = ''#
#else#
  #set global $path = '../../'#
#end if#

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>

  <title>SABnzbd $version - $T('queued'): $mbleft $T('MB')</title>
  <link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="${path}rss?mode=history"/>

  <link rel="stylesheet" type="text/css" href="${path}static/stylesheets/jqueryui/overcast/jquery-ui-1.8.9.custom.css?$version"/>
  #if $color_scheme#
  <link rel="shortcut icon" type="image/ico" href="${path}static/stylesheets/colorschemes/$color_scheme/images/sabnzbdplus.ico"/>
  <link rel="stylesheet" type="text/css" href="${path}static/stylesheets/colorschemes/$color_scheme/${color_scheme}.css?$version"/>
  #else#
  <link rel="shortcut icon" type="image/ico" href="${path}static/stylesheets/colorschemes/gold/images/sabnzbdplus.ico"/>
  <link rel="stylesheet" type="text/css" href="${path}static/stylesheets/colorschemes/gold/gold.css?$version"/>
  #end if#

  <script type="text/javascript" src="${path}static/javascripts/lib.js?$version"></script>

#if $pane=="Main"#
  <script type="text/javascript" src="${path}static/javascripts/plush.js?$version"></script>
  <script type="text/javascript">
    jQuery(function($){
      $.plush.apikey = "$session";
      $.plush.Tprev = "$T('Plush-prev')"; // translations for pagination
      $.plush.Tnext = "$T('Plush-next')";
      $.plush.Tconfirmation = "$T('Plush-confirm')";
      $.plush.TconfirmPurgeH = "$T('Plush-confirmPurgeH')";
    $.plush.Init();   // Initialize Plush UI
    $.plush.Refresh();  // Initiate Plush refresh cycle
  });
  </script>
#else if $pane=="Nzo"#
  <script type="text/javascript" src="${path}static/javascripts/config.js?$version"></script>
  <script type="text/javascript">
    var config_pane = "NZO"; // re-uses config's js/css
      var confirmWithoutSavingPrompt = "$T('Plush-confirmWithoutSavingPrompt')";
  </script>
  <script type="text/javascript" src="${path}static/javascripts/plush.js?$version"></script>
  <script type="text/javascript">
    jQuery(function($){
      $.plush.apikey = "$session";
      $.plush.Tprev = "$T('Plush-prev')"; // translations for pagination
      $.plush.Tnext = "$T('Plush-next')";
      $.plush.Tconfirmation = "$T('Plush-confirm')";
      $.plush.TconfirmPurgeH = "$T('Plush-confirmPurgeH')";
    $.plush.Init();   // Initialize Plush UI
    $.plush.Refresh();  // Initiate Plush refresh cycle
  });
  </script>
#else#
  <script type="text/javascript" src="${path}static/javascripts/config.js?$version"></script>
  <script type="text/javascript">
    var config_pane = "$pane";
    var help_uri = "$help_uri";
    var apikey = "$session";
    var confirmWithoutSavingPrompt = "$T('Plush-confirmWithoutSavingPrompt')";
  </script>
#end if#

</head>
<body#if $pane=="Nzo"# class="nzo"#else if $pane!="Main"# class="config_body"#end if#>
<div id="master-width">
  <div class="wrapper">
    <div id="topmenu_bar" style="display:none">
      <div class="navigation">
        <ul class="menu" id="navigation_menu_right">
        #if $pane=="Main"#
          <li class="first"><a href="#" id="add_nzb"><span class="icon_nav_addnzb">$T('Plush-addnzb')</span></a></li>
          <li><a href="#" id="manual_refresh_wrapper"><span class="icon_nav_refresh">$T('Plush-button-refresh')</span></a></li>
          <li><a href="#" id="plush_options"><span class="icon_nav_options">$T('Plush-options')</span></a></li>
          <li class="last"><a href="#" id="help" target="_blank"><span class="icon_nav_help">$T('menu-help').capitalize()</span></a></li>
        #else#
          <li class="first last"><a href="#" id="help" target="_blank"><span class="icon_nav_help">$T('menu-help').capitalize()</span></a></li>
        #end if#
        </ul>
        <ul class="menu" id="navigation_menu_left">
          <li#if $pane=="Main"# class="active first"#else# class="first"#end if#><a href="${path}"><span class="icon_nav_download">$T('Plush-downloads').capitalize()</span></a></li>
          <li#if $pane=="Connections"# class="active"#end if#><a href="${path}connections/"><span class="icon_nav_connections">$T('menu-cons').capitalize()</span></a></li>
          <li#if $pane=="RSS"# class="active"#end if#><a href="${path}config/rss/"><span class="icon_nav_rss">$T('rss').upper()</span></a></li>
          <li#if $pane!="RSS" and $pane!="Nzo" and ($pane=="Config" or $path=='../../')# class="active last"#else# class="last"#end if#><a href="${path}config/"><span class="icon_nav_config">$T('menu-config').capitalize()</span></a></li>
        </ul>
      </div>
      <div id="nav_text_right">
        #if $loadavg#$T('ft-sysload'):&nbsp;<span id="loadavg">$loadavg</span>#end if#
      </div>
      <div id="nav_text_left">
        <span id="warning_box"><b><a href="${path}connections/#tabs-warnings" id="last_warning" title="#echo $last_warning.replace("\n"," ").replace('"',"'") #"><span id="have_warnings">$have_warnings</span> $T('warnings')</a></b></span>
        #if $pane=="Main"#
          #if $new_release#&sdot; <a href="$new_rel_url" id="new_release" target="_blank">$T('Plush-updateAvailable').replace(' ','&nbsp;')</a>#end if#
          #if $warning#&sdot; <a id="warning_message">$warning.replace(' ','&nbsp;')</a>#end if#
        #end if#
      </div>
    </div>
  </div>

  <noscript><h1 align="center">$T('Plush-enableJavascript')</h1></noscript>

#if $pane=="Main"#
#else if $pane=="Nzo"#
#else if $pane=="Connections" or $pane =="RSS"#
  <div id="config_container" class="config_margin_status lang-$active_lang">
    <div id="config_content">
#else#
  #if $pane=="Connections"#
  #else if $pane=="RSS"#
  #else#
  <div class="config_nav">
    <ul>
      <li><a class="#if $pane=="General"#nav_active#end if#" id="config_nav_general" href="${path}config/general/">
        <div class="config_sprite_container sprite_config_nav_general">$T('cmenu-general')</div></a></li>
      <li><a class="#if $pane=="Folders"#nav_active#end if#" id="config_nav_directories" href="${path}config/directories/">
        <div class="config_sprite_container sprite_config_nav_folders">$T('cmenu-folders')</div></a></li>
      <li><a class="#if $pane=="Switches"#nav_active#end if#" id="config_nav_switches" href="${path}config/switches/">
        <div class="config_sprite_container sprite_config_nav_switches">$T('cmenu-switches')</div></a></li>
      <li><a class="#if $pane=="Servers"#nav_active#end if#" id="config_nav_server" href="${path}config/server/">
        <div class="config_sprite_container sprite_config_nav_servers">$T('cmenu-servers')</div></a></li>
      <li><a class="#if $pane=="Scheduling"#nav_active#end if#" id="config_nav_scheduling" href="${path}config/scheduling/">
        <div class="config_sprite_container sprite_config_nav_scheduling">$T('Plush-cmenu-scheduling')</div></a></li>
      <li><a class="#if $pane=="Email"#nav_active#end if#" id="config_nav_email" href="${path}config/email/">
        <div class="config_sprite_container sprite_config_nav_email">$T('cmenu-email')</div></a></li>
      <li><a class="#if $pane=="Index Sites"#nav_active#end if#" id="config_nav_index_sites" href="${path}config/newzbin/">
        <div class="config_sprite_container sprite_config_nav_indexsites">$T('cmenu-newzbin')</div></a></li>
      <li><a class="#if $pane=="Categories"#nav_active#end if#" id="config_nav_categories" href="${path}config/categories/">
        <div class="config_sprite_container sprite_config_nav_categories">$T('cmenu-cat')</div></a></li>
      <li><a class="#if $pane=="Sorting"#nav_active#end if#" id="config_nav_sorting" href="${path}config/sorting/">
        <div class="config_sprite_container sprite_config_nav_sorting">$T('cmenu-sorting')</div></a></li>
    </ul>
  </div>
  #end if#
  <div id="config_container" class="config_margin#if $pane=="Categories"# config_margin_wide#end if#">
    <div id="config_content">
      <div id="config">
        <div id="config-content" class="clearfix">
#end if#
Post Reply