From 2d22bf300a8dabcc77237f4bb56bf6532486fca2 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Fri, 17 Jul 2015 23:43:43 +0200 Subject: [PATCH 1/4] dirname problem https://github.com/FreshRSS/FreshRSS/issues/906 --- lib/Minz/Request.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/Minz/Request.php b/lib/Minz/Request.php index b9eda82a5..67fbae126 100644 --- a/lib/Minz/Request.php +++ b/lib/Minz/Request.php @@ -100,7 +100,10 @@ class Minz_Request { } else { $url .= '://' . $host . ($port == 80 ? '' : ':' . $port); } - $url .= isset($_SERVER['REQUEST_URI']) ? dirname($_SERVER['REQUEST_URI']) : ''; + if (isset($_SERVER['REQUEST_URI'])) { + $path = $_SERVER['REQUEST_URI']; + $url .= substr($path, -1) === '/' ? substr($path, 0, -1) : dirname($path); + } } else { $url = rtrim($url, '/\\') . $baseUrlSuffix; } From 6db09411968ff0eac722efde79628b501b8dbe5e Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Thu, 23 Jul 2015 10:05:32 +0200 Subject: [PATCH 2/4] Fix unexpected behaviour in getBaseUrl - getBaseUrl() returns info from configuration only and always append the suffix - add a guessBaseUrl() to extract base_url from $_SERVER info - fix Url::display() to take this change in consideration Fix https://github.com/FreshRSS/FreshRSS/issues/906 Use https://github.com/FreshRSS/FreshRSS/pull/910 --- lib/Minz/Request.php | 48 ++++++++++++++++++++++++++------------------ lib/Minz/Url.php | 3 +++ 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/lib/Minz/Request.php b/lib/Minz/Request.php index 67fbae126..059b4359c 100644 --- a/lib/Minz/Request.php +++ b/lib/Minz/Request.php @@ -85,29 +85,37 @@ class Minz_Request { } /** - * Détermine la base de l'url - * @return la base de l'url + * Try to guess the base URL from $_SERVER information + * + * @return the base url (e.g. http://example.com/) */ - public static function getBaseUrl($baseUrlSuffix = '') { - $conf = Minz_Configuration::get('system'); - $url = $conf->base_url; - if ($url == '' || !preg_match('%^https?://%i', $url)) { - $url = 'http'; - $host = empty($_SERVER['HTTP_HOST']) ? $_SERVER['SERVER_NAME'] : $_SERVER['HTTP_HOST']; - $port = empty($_SERVER['SERVER_PORT']) ? 80 : $_SERVER['SERVER_PORT']; - if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') { - $url .= 's://' . $host . ($port == 443 ? '' : ':' . $port); - } else { - $url .= '://' . $host . ($port == 80 ? '' : ':' . $port); - } - if (isset($_SERVER['REQUEST_URI'])) { - $path = $_SERVER['REQUEST_URI']; - $url .= substr($path, -1) === '/' ? substr($path, 0, -1) : dirname($path); - } + public static function guessBaseUrl() { + $url = 'http'; + $host = empty($_SERVER['HTTP_HOST']) ? $_SERVER['SERVER_NAME'] : $_SERVER['HTTP_HOST']; + $port = empty($_SERVER['SERVER_PORT']) ? 80 : $_SERVER['SERVER_PORT']; + if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') { + $url .= 's://' . $host . ($port == 443 ? '' : ':' . $port); } else { - $url = rtrim($url, '/\\') . $baseUrlSuffix; + $url .= '://' . $host . ($port == 80 ? '' : ':' . $port); + } + if (isset($_SERVER['REQUEST_URI'])) { + $path = $_SERVER['REQUEST_URI']; + $url .= substr($path, -1) === '/' ? substr($path, 0, -1) : dirname($path); } - return filter_var($url . '/', FILTER_SANITIZE_URL); + + return $url; + } + + /** + * Return the base_url from configuration and add a suffix if given. + * + * @param $base_url_suffix a string to add at base_url (default: empty string) + * @return the base_url with a suffix. + */ + public static function getBaseUrl($base_url_suffix = '') { + $conf = Minz_Configuration::get('system'); + $url = rtrim($conf->base_url, '/\\') . $base_url_suffix; + return filter_var($url, FILTER_SANITIZE_URL); } /** diff --git a/lib/Minz/Url.php b/lib/Minz/Url.php index a2809257d..4279b045b 100644 --- a/lib/Minz/Url.php +++ b/lib/Minz/Url.php @@ -25,6 +25,9 @@ class Minz_Url { if ($absolute) { $url_string = Minz_Request::getBaseUrl(PUBLIC_TO_INDEX_PATH); + if ($url_string === PUBLIC_TO_INDEX_PATH) { + $url_string = Minz_Request::guessBaseUrl(); + } } else { $url_string = $isArray ? '.' : PUBLIC_RELATIVE; } From 7f08c4fcd7a2113f4a0eeaea54b254ec11f0116d Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Thu, 23 Jul 2015 10:12:20 +0200 Subject: [PATCH 3/4] CHANGELOG for getBaseUrl() and guessBaseUrl() See https://github.com/FreshRSS/FreshRSS/issues/906 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94410c38d..66920b4c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ * Changed some log visibilities. [#885](https://github.com/FreshRSS/FreshRSS/issues/885) * Fix broken links for extension script / style files. [#862](https://github.com/FreshRSS/FreshRSS/issues/862) * Load default configuration during installation to avoid hard-coded values. [#890](https://github.com/FreshRSS/FreshRSS/issues/890) + * Fix non-consistent behaviour in Minz_Request::getBaseUrl() and introduce Minz_Request::guessBaseUrl(). [#906](https://github.com/FreshRSS/FreshRSS/issues/906) ## 2015-05-31 FreshRSS 1.1.1 (beta) From 1e65fd687e030a24773e88a2e7fb173e8439a99a Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Thu, 23 Jul 2015 11:38:56 +0200 Subject: [PATCH 4/4] Use filter_var in guessBaseUrl See https://github.com/FreshRSS/FreshRSS/issues/906 See https://github.com/FreshRSS/FreshRSS/pull/915/files#r35304704 --- lib/Minz/Request.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Minz/Request.php b/lib/Minz/Request.php index 059b4359c..bf01bc26f 100644 --- a/lib/Minz/Request.php +++ b/lib/Minz/Request.php @@ -103,7 +103,7 @@ class Minz_Request { $url .= substr($path, -1) === '/' ? substr($path, 0, -1) : dirname($path); } - return $url; + return filter_var($url, FILTER_SANITIZE_URL); } /**