Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/AssetManager.php2
-rw-r--r--core/DataTable/Renderer/Csv.php12
-rw-r--r--core/DataTable/Renderer/Json.php7
-rw-r--r--core/FrontController.php3
-rw-r--r--core/Piwik.php36
-rw-r--r--core/ProxyHttp.php233
-rw-r--r--core/ReportRenderer.php8
-rw-r--r--core/Session.php5
-rw-r--r--core/View.php2
-rw-r--r--js/index.php4
-rw-r--r--plugins/CoreVisualizations/JqplotDataGenerator/Chart.php4
-rw-r--r--plugins/Installation/Controller.php25
-rw-r--r--plugins/Login/Controller.php18
-rw-r--r--plugins/Login/Login.php11
-rw-r--r--plugins/Overlay/Controller.php11
-rw-r--r--plugins/Proxy/Controller.php8
-rw-r--r--tests/PHPUnit/Core/ServeStaticFileTest.php23
-rw-r--r--tests/resources/staticFileServer.php26
18 files changed, 312 insertions, 126 deletions
diff --git a/core/AssetManager.php b/core/AssetManager.php
index e65639b12f..af8e8a4bd4 100644
--- a/core/AssetManager.php
+++ b/core/AssetManager.php
@@ -500,7 +500,7 @@ class AssetManager
}
// Tries to remove compressed version of the merged file.
- // See Piwik::serveFile() for more info on static file compression
+ // See Piwik::serverStaticFile() for more info on static file compression
$compressedFileLocation = PIWIK_USER_PATH . Piwik::COMPRESSED_FILE_LOCATION . $filename;
@unlink($compressedFileLocation . ".deflate");
diff --git a/core/DataTable/Renderer/Csv.php b/core/DataTable/Renderer/Csv.php
index 64a62e3c2a..e1f4556025 100644
--- a/core/DataTable/Renderer/Csv.php
+++ b/core/DataTable/Renderer/Csv.php
@@ -10,14 +10,14 @@
*/
namespace Piwik\DataTable\Renderer;
-use Piwik\DataTable\Simple;
+use Piwik\Common;
use Piwik\DataTable\Renderer;
+use Piwik\DataTable\Simple;
+use Piwik\DataTable;
+use Piwik\Date;
use Piwik\Period;
use Piwik\Period\Range;
-use Piwik\Piwik;
-use Piwik\Common;
-use Piwik\Date;
-use Piwik\DataTable;
+use Piwik\ProxyHttp;
/**
* CSV export
@@ -353,7 +353,7 @@ class Csv extends Renderer
// silent fail otherwise unit tests fail
@header('Content-Type: application/vnd.ms-excel');
@header('Content-Disposition: attachment; filename="' . $fileName . '"');
- Piwik::overrideCacheControlHeaders();
+ ProxyHttp::overrideCacheControlHeaders();
}
/**
diff --git a/core/DataTable/Renderer/Json.php b/core/DataTable/Renderer/Json.php
index 89dd73ab37..ad22cab3ad 100644
--- a/core/DataTable/Renderer/Json.php
+++ b/core/DataTable/Renderer/Json.php
@@ -10,11 +10,10 @@
*/
namespace Piwik\DataTable\Renderer;
-use Piwik\DataTable\Renderer;
-use Piwik\Piwik;
use Piwik\Common;
+use Piwik\DataTable\Renderer;
use Piwik\DataTable;
-use Piwik\DataTable\Renderer\Php;
+use Piwik\ProxyHttp;
/**
* JSON export.
@@ -114,7 +113,7 @@ class Json extends Renderer
protected function renderHeader()
{
self::sendHeaderJSON();
- Piwik::overrideCacheControlHeaders();
+ ProxyHttp::overrideCacheControlHeaders();
}
public static function sendHeaderJSON()
diff --git a/core/FrontController.php b/core/FrontController.php
index 79a57b5e93..b26a754808 100644
--- a/core/FrontController.php
+++ b/core/FrontController.php
@@ -15,7 +15,6 @@ use Piwik\API\Request;
use Piwik\API\ResponseBuilder;
use Piwik\Log;
use Piwik\Session;
-use Piwik\Profiler;
use Zend_Registry;
/**
@@ -344,7 +343,7 @@ class FrontController
{
if (!Common::isPhpCliMode()
&& Config::getInstance()->General['force_ssl'] == 1
- && !Piwik::isHttps()
+ && !ProxyHttp::isHttps()
// Specifically disable for the opt out iframe
&& !(Common::getRequestVar('module', '') == 'CoreAdminHome'
&& Common::getRequestVar('action', '') == 'optOut')
diff --git a/core/Piwik.php b/core/Piwik.php
index 6d178f45eb..469b1f80e6 100644
--- a/core/Piwik.php
+++ b/core/Piwik.php
@@ -178,42 +178,6 @@ class Piwik
return $url;
}
- /**
- * Returns true if this appears to be a secure HTTPS connection
- *
- * @return bool
- */
- static public function isHttps()
- {
- return Url::getCurrentScheme() === 'https';
- }
-
- /**
- * Workaround IE bug when downloading certain document types over SSL and
- * cache control headers are present, e.g.,
- *
- * Cache-Control: no-cache
- * Cache-Control: no-store,max-age=0,must-revalidate
- * Pragma: no-cache
- *
- * @see http://support.microsoft.com/kb/316431/
- * @see RFC2616
- *
- * @param string $override One of "public", "private", "no-cache", or "no-store". (optional)
- */
- static public function overrideCacheControlHeaders($override = null)
- {
- if ($override || self::isHttps()) {
- @header('Pragma: ');
- @header('Expires: ');
- if (in_array($override, array('public', 'private', 'no-cache', 'no-store'))) {
- @header("Cache-Control: $override, must-revalidate");
- } else {
- @header('Cache-Control: must-revalidate');
- }
- }
- }
-
/*
* File and directory operations
*/
diff --git a/core/ProxyHttp.php b/core/ProxyHttp.php
new file mode 100644
index 0000000000..5bcde43de1
--- /dev/null
+++ b/core/ProxyHttp.php
@@ -0,0 +1,233 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ * @category Piwik
+ * @package Piwik
+ */
+namespace Piwik;
+
+/**
+ * Http helper: static file server proxy, with compression, caching, isHttps() helper...
+ *
+ * Used to server piwik.js and the merged+minified CSS and JS files
+ *
+ * @package Piwik
+ */
+class ProxyHttp
+{
+ /**
+ * Returns true if the current request appears to be a secure HTTPS connection
+ *
+ * @return bool
+ */
+ public static function isHttps()
+ {
+ return Url::getCurrentScheme() === 'https';
+ }
+
+ /**
+ * Serve static files through php proxy.
+ *
+ * It performs the following actions:
+ * - Checks the file is readable or returns "HTTP/1.0 404 Not Found"
+ * - Returns "HTTP/1.1 304 Not Modified" after comparing the HTTP_IF_MODIFIED_SINCE
+ * with the modification date of the static file
+ * - Will try to compress the static file according to HTTP_ACCEPT_ENCODING. Compressed files are store in
+ * the /tmp directory. If compressing extensions are not available, a manually gzip compressed file
+ * can be provided in the /tmp directory. It has to bear the same name with an added .gz extension.
+ * Using manually compressed static files requires you to manually update the compressed file when
+ * the static file is updated.
+ * - Overrides server cache control config to allow caching
+ * - Sends Very Accept-Encoding to tell proxies to store different version of the static file according
+ * to users encoding capacities.
+ *
+ * Warning:
+ * Compressed filed are stored in the /tmp directory.
+ * If this method is used with two files bearing the same name but located in different locations,
+ * there is a risk of conflict. One file could be served with the content of the other.
+ * A future upgrade of this method would be to recreate the directory structure of the static file
+ * within a /tmp/compressed-static-files directory.
+ *
+ * @param string $file The location of the static file to serve
+ * @param string $contentType The content type of the static file.
+ * @param bool $expireFarFuture If set to true, will set Expires: header in far future.
+ * Should be set to false for files that don't have a cache buster (eg. piwik.js)
+ */
+ public static function serverStaticFile($file, $contentType, $expireFarFuture = true)
+ {
+ if (file_exists($file)) {
+ // conditional GET
+ $modifiedSince = '';
+ if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
+ $modifiedSince = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
+
+ // strip any trailing data appended to header
+ if (false !== ($semicolon = strpos($modifiedSince, ';'))) {
+ $modifiedSince = substr($modifiedSince, 0, $semicolon);
+ }
+ }
+
+ $fileModifiedTime = @filemtime($file);
+ $lastModified = gmdate('D, d M Y H:i:s', $fileModifiedTime) . ' GMT';
+
+ // set HTTP response headers
+ self::overrideCacheControlHeaders('public');
+ @header('Vary: Accept-Encoding');
+ @header('Content-Disposition: inline; filename=' . basename($file));
+
+ if ($expireFarFuture) {
+ // Required by proxy caches potentially in between the browser and server to cache the request indeed
+ @header("Expires: " . gmdate('D, d M Y H:i:s', time() + 86400 * 100) . ' GMT');
+ }
+
+ // Returns 304 if not modified since
+ if ($modifiedSince === $lastModified) {
+ self::setHttpStatus('304 Not Modified');
+ } else {
+ // optional compression
+ $compressed = false;
+ $encoding = '';
+ $compressedFileLocation = PIWIK_USER_PATH . Piwik::COMPRESSED_FILE_LOCATION . basename($file);
+
+ $phpOutputCompressionEnabled = ProxyHttp::isPhpOutputCompressed();
+ if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && !$phpOutputCompressionEnabled) {
+ $acceptEncoding = $_SERVER['HTTP_ACCEPT_ENCODING'];
+
+ if (extension_loaded('zlib') && function_exists('file_get_contents') && function_exists('file_put_contents')) {
+ if (preg_match('/(?:^|, ?)(deflate)(?:,|$)/', $acceptEncoding, $matches)) {
+ $encoding = 'deflate';
+ $filegz = $compressedFileLocation . '.deflate';
+ } else if (preg_match('/(?:^|, ?)((x-)?gzip)(?:,|$)/', $acceptEncoding, $matches)) {
+ $encoding = $matches[1];
+ $filegz = $compressedFileLocation . '.gz';
+ }
+
+ if (!empty($encoding)) {
+ // compress-on-demand and use cache
+ if (!file_exists($filegz) || ($fileModifiedTime > @filemtime($filegz))) {
+ $data = file_get_contents($file);
+
+ if ($encoding == 'deflate') {
+ $data = gzdeflate($data, 9);
+ } else if ($encoding == 'gzip' || $encoding == 'x-gzip') {
+ $data = gzencode($data, 9);
+ }
+
+ file_put_contents($filegz, $data);
+ }
+
+ $compressed = true;
+ $file = $filegz;
+ }
+ } else {
+ // manually compressed
+ $filegz = $compressedFileLocation . '.gz';
+ if (preg_match('/(?:^|, ?)((x-)?gzip)(?:,|$)/', $acceptEncoding, $matches) && file_exists($filegz) && ($fileModifiedTime < @filemtime($filegz))) {
+ $encoding = $matches[1];
+ $compressed = true;
+ $file = $filegz;
+ }
+ }
+ }
+
+ @header('Last-Modified: ' . $lastModified);
+
+ if (!$phpOutputCompressionEnabled) {
+ @header('Content-Length: ' . filesize($file));
+ }
+
+ if (!empty($contentType)) {
+ @header('Content-Type: ' . $contentType);
+ }
+
+ if ($compressed) {
+ @header('Content-Encoding: ' . $encoding);
+ }
+
+ if (!_readfile($file)) {
+ self::setHttpStatus('505 Internal server error');
+ }
+ }
+ } else {
+ self::setHttpStatus('404 Not Found');
+ }
+ }
+
+ /**
+ * Test if php output is compressed
+ *
+ * @return bool True if php output is (or suspected/likely) to be compressed
+ */
+ public static function isPhpOutputCompressed()
+ {
+ // Off = ''; On = '1'; otherwise, it's a buffer size
+ $zlibOutputCompression = ini_get('zlib.output_compression');
+
+ // could be ob_gzhandler, ob_deflatehandler, etc
+ $outputHandler = ini_get('output_handler');
+
+ // output handlers can be stacked
+ $obHandlers = array_filter(ob_list_handlers(), function ($var) {
+ return $var !== "default output handler";
+ });
+
+ // user defined handler via wrapper
+ $autoPrependFile = ini_get('auto_prepend_file');
+ $autoAppendFile = ini_get('auto_append_file');
+
+ return !empty($zlibOutputCompression) ||
+ !empty($outputHandler) ||
+ !empty($obHandlers) ||
+ !empty($autoPrependFile) ||
+ !empty($autoAppendFile);
+ }
+
+
+ /**
+ * Workaround IE bug when downloading certain document types over SSL and
+ * cache control headers are present, e.g.,
+ *
+ * Cache-Control: no-cache
+ * Cache-Control: no-store,max-age=0,must-revalidate
+ * Pragma: no-cache
+ *
+ * @see http://support.microsoft.com/kb/316431/
+ * @see RFC2616
+ *
+ * @param string $override One of "public", "private", "no-cache", or "no-store". (optional)
+ */
+ public static function overrideCacheControlHeaders($override = null)
+ {
+ if ($override || self::isHttps()) {
+ @header('Pragma: ');
+ @header('Expires: ');
+ if (in_array($override, array('public', 'private', 'no-cache', 'no-store'))) {
+ @header("Cache-Control: $override, must-revalidate");
+ } else {
+ @header('Cache-Control: must-revalidate');
+ }
+ }
+ }
+
+
+ /**
+ * Set response header, e.g., HTTP/1.0 200 Ok
+ *
+ * @param string $status Status
+ * @return bool
+ */
+ protected static function setHttpStatus($status)
+ {
+ if (substr_compare(PHP_SAPI, '-fcgi', -5)) {
+ @header($_SERVER['SERVER_PROTOCOL'] . ' ' . $status);
+ } else {
+ // FastCGI
+ @header('Status: ' . $status);
+ }
+ }
+
+} \ No newline at end of file
diff --git a/core/ReportRenderer.php b/core/ReportRenderer.php
index f724935209..3287a6e97e 100644
--- a/core/ReportRenderer.php
+++ b/core/ReportRenderer.php
@@ -11,12 +11,10 @@
namespace Piwik;
use Exception;
-use Piwik\DataTable\Simple;
+use Piwik\API\Request;
use Piwik\DataTable\Row;
-use Piwik\Piwik;
+use Piwik\DataTable\Simple;
use Piwik\DataTable;
-use Piwik\Loader;
-use Piwik\API\Request;
use Piwik\Plugins\ImageGraph\API;
/**
@@ -175,7 +173,7 @@ abstract class ReportRenderer
{
$filename = ReportRenderer::appendExtension($filename, $extension);
- Piwik::overrideCacheControlHeaders();
+ ProxyHttp::overrideCacheControlHeaders();
header('Content-Description: File Transfer');
header('Content-Type: ' . $contentType);
header('Content-Disposition: attachment; filename="' . str_replace('"', '\'', basename($filename)) . '";');
diff --git a/core/Session.php b/core/Session.php
index 16378607ed..59e02a89a2 100644
--- a/core/Session.php
+++ b/core/Session.php
@@ -11,9 +11,6 @@
namespace Piwik;
use Exception;
-use Piwik\Config;
-use Piwik\Piwik;
-use Piwik\Common;
use Piwik\Session\SaveHandler\DbTable;
use Zend_Registry;
use Zend_Session;
@@ -63,7 +60,7 @@ class Session extends Zend_Session
@ini_set('session.use_only_cookies', '1');
// advise browser that session cookie should only be sent over secure connection
- if (Piwik::isHttps()) {
+ if (ProxyHttp::isHttps()) {
@ini_set('session.cookie_secure', '1');
}
diff --git a/core/View.php b/core/View.php
index fea23de6ac..910e5b1397 100644
--- a/core/View.php
+++ b/core/View.php
@@ -134,7 +134,7 @@ class View implements ViewInterface
$this->totalNumberOfQueries = 0;
}
- Piwik::overrideCacheControlHeaders('no-store');
+ ProxyHttp::overrideCacheControlHeaders('no-store');
@header('Content-Type: ' . $this->contentType);
// always sending this header, sometimes empty, to ensure that Dashboard embed loads (which could call this header() multiple times, the last one will prevail)
diff --git a/js/index.php b/js/index.php
index 4ee43b7e64..721e3353ef 100644
--- a/js/index.php
+++ b/js/index.php
@@ -5,7 +5,7 @@
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-use Piwik\ProxyStaticFile;
+use Piwik\ProxyHttp;
/**
* Tracker proxy
@@ -31,6 +31,6 @@ $file = '../piwik.js';
// There is no cache buster parameter so we don't set Expires: header
$expireFarFuture = false;
-ProxyStaticFile::serveFile($file, "application/javascript; charset=UTF-8", $expireFarFuture);
+ProxyHttp::serverStaticFile($file, "application/javascript; charset=UTF-8", $expireFarFuture);
exit;
diff --git a/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php b/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php
index 0f0cccb22c..b3253b340c 100644
--- a/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php
+++ b/plugins/CoreVisualizations/JqplotDataGenerator/Chart.php
@@ -10,8 +10,8 @@
*/
namespace Piwik\Plugins\CoreVisualizations\JqplotDataGenerator;
-use Piwik\Piwik;
use Piwik\Common;
+use Piwik\ProxyHttp;
/**
* Generates the data in the Open Flash Chart format, from the given data.
@@ -106,7 +106,7 @@ class Chart
public function render()
{
- Piwik::overrideCacheControlHeaders();
+ ProxyHttp::overrideCacheControlHeaders();
// See http://www.jqplot.com/docs/files/jqPlotOptions-txt.html
$data = array(
diff --git a/plugins/Installation/Controller.php b/plugins/Installation/Controller.php
index 295fcfd776..5df88f94f4 100644
--- a/plugins/Installation/Controller.php
+++ b/plugins/Installation/Controller.php
@@ -11,26 +11,23 @@
namespace Piwik\Plugins\Installation;
use Exception;
+use Piwik\Access;
use Piwik\API\Request;
+use Piwik\Common;
+use Piwik\Config;
use Piwik\DataAccess\ArchiveTableCreator;
use Piwik\Db\Adapter;
-use Piwik\Piwik;
-use Piwik\Config;
-use Piwik\Common;
-use Piwik\Access;
-use Piwik\Http;
-use Piwik\Session\SessionNamespace;
-use Piwik\Updater;
-use Piwik\Version;
-use Piwik\Url;
-use Piwik\ProxyHeaders;
use Piwik\Db;
-use Piwik\Plugins\Installation\FormDatabaseSetup;
-use Piwik\Plugins\Installation\FormFirstWebsiteSetup;
-use Piwik\Plugins\Installation\FormGeneralSetup;
+use Piwik\Http;
+use Piwik\Piwik;
use Piwik\Plugins\LanguagesManager\LanguagesManager;
use Piwik\Plugins\SitesManager\API as SitesManagerAPI;
use Piwik\Plugins\UsersManager\API as UsersManagerAPI;
+use Piwik\ProxyHeaders;
+use Piwik\Session\SessionNamespace;
+use Piwik\Updater;
+use Piwik\Url;
+use Piwik\Version;
use Zend_Db_Adapter_Exception;
/**
@@ -850,7 +847,7 @@ class Controller extends \Piwik\Controller\Admin
$infos['tracker_status'] = Common::getRequestVar('trackerStatus', 0, 'int');
$infos['protocol'] = ProxyHeaders::getProtocolInformation();
- if (!Piwik::isHttps() && $infos['protocol'] !== null) {
+ if (!\Piwik\ProxyHttp::isHttps() && $infos['protocol'] !== null) {
$infos['general_infos']['assume_secure_protocol'] = '1';
}
if (count($headers = ProxyHeaders::getProxyClientHeaders()) > 0) {
diff --git a/plugins/Login/Controller.php b/plugins/Login/Controller.php
index 9ed0e7c3cf..ad4e91c1d1 100644
--- a/plugins/Login/Controller.php
+++ b/plugins/Login/Controller.php
@@ -11,22 +11,20 @@
namespace Piwik\Plugins\Login;
use Exception;
-use Piwik\Config;
-use Piwik\Piwik;
use Piwik\Common;
+use Piwik\Config;
use Piwik\Cookie;
use Piwik\IP;
use Piwik\Mail;
use Piwik\Nonce;
-use Piwik\View;
-use Piwik\Url;
+use Piwik\Piwik;
+use Piwik\Plugins\UsersManager\API;
+use Piwik\Plugins\UsersManager\UsersManager;
+use Piwik\ProxyHttp;
use Piwik\QuickForm2;
use Piwik\Session;
-use Piwik\Plugins\Login\Login;
-use Piwik\Plugins\Login\FormLogin;
-use Piwik\Plugins\Login\FormResetPassword;
-use Piwik\Plugins\UsersManager\UsersManager;
-use Piwik\Plugins\UsersManager\API;
+use Piwik\Url;
+use Piwik\View;
require_once PIWIK_INCLUDE_PATH . '/core/Config.php';
@@ -499,7 +497,7 @@ class Controller extends \Piwik\Controller
{
$forceSslLogin = Config::getInstance()->General['force_ssl_login'];
if ($forceSslLogin
- && !Piwik::isHttps()
+ && !ProxyHttp::isHttps()
) {
$url = 'https://'
. Url::getCurrentHost()
diff --git a/plugins/Login/Login.php b/plugins/Login/Login.php
index 2e511b0a5b..653b5bfb60 100644
--- a/plugins/Login/Login.php
+++ b/plugins/Login/Login.php
@@ -12,14 +12,13 @@ namespace Piwik\Plugins\Login;
use Exception;
use Piwik\Config;
-use Piwik\Piwik;
use Piwik\Cookie;
use Piwik\Option;
-use Piwik\Plugins\Login\Auth;
-use Piwik\Plugins\Login\Controller;
-use Piwik\Session;
-use Piwik\Plugins\UsersManager\UsersManager;
+use Piwik\Piwik;
use Piwik\Plugins\UsersManager\API;
+use Piwik\Plugins\UsersManager\UsersManager;
+use Piwik\ProxyHttp;
+use Piwik\Session;
/**
*
@@ -124,7 +123,7 @@ class Login extends \Piwik\Plugin
$cookie->set('login', $login);
$cookie->set('token_auth', $auth->getHashTokenAuth($login, $authResult->getTokenAuth()));
- $cookie->setSecure(Piwik::isHttps());
+ $cookie->setSecure(ProxyHttp::isHttps());
$cookie->setHttpOnly(true);
$cookie->save();
diff --git a/plugins/Overlay/Controller.php b/plugins/Overlay/Controller.php
index 3721c9b226..128ba12e6b 100644
--- a/plugins/Overlay/Controller.php
+++ b/plugins/Overlay/Controller.php
@@ -11,14 +11,15 @@
namespace Piwik\Plugins\Overlay;
use Piwik\API\Request;
+use Piwik\Common;
+use Piwik\Config;
use Piwik\Metrics;
use Piwik\Piwik;
-use Piwik\Config;
-use Piwik\Common;
use Piwik\Plugins\Actions\ArchivingHelper;
+use Piwik\Plugins\SitesManager\API;
+use Piwik\ProxyHttp;
use Piwik\Tracker\Action;
use Piwik\View;
-use Piwik\Plugins\SitesManager\API;
class Controller extends \Piwik\Controller
{
@@ -41,7 +42,7 @@ class Controller extends \Piwik\Controller
$view->date = Common::getRequestVar('date', 'today');
$view->period = Common::getRequestVar('period', 'day');
- $view->ssl = Piwik::isHttps();
+ $view->ssl = ProxyHttp::isHttps();
echo $view->render();
}
@@ -137,7 +138,7 @@ class Controller extends \Piwik\Controller
<html><head><title></title></head><body>
<script type="text/javascript">
function handleProtocol(url) {
- if (' . (Piwik::isHttps() ? 'true' : 'false') . ') {
+ if (' . (ProxyHttp::isHttps() ? 'true' : 'false') . ') {
return url.replace(/http:\/\//i, "https://");
} else {
return url.replace(/https:\/\//i, "http://");
diff --git a/plugins/Proxy/Controller.php b/plugins/Proxy/Controller.php
index 9378a6f3e1..0e514d692e 100644
--- a/plugins/Proxy/Controller.php
+++ b/plugins/Proxy/Controller.php
@@ -13,7 +13,7 @@ namespace Piwik\Plugins\Proxy;
use Piwik\AssetManager;
use Piwik\Common;
use Piwik\Piwik;
-use Piwik\ProxyStaticFile;
+use Piwik\ProxyHttp;
use Piwik\Url;
/**
@@ -35,7 +35,7 @@ class Controller extends \Piwik\Controller
public function getCss()
{
$cssMergedFile = AssetManager::getMergedCssFileLocation();
- ProxyStaticFile::serveFile($cssMergedFile, "text/css");
+ ProxyHttp::serverStaticFile($cssMergedFile, "text/css");
}
/**
@@ -47,7 +47,7 @@ class Controller extends \Piwik\Controller
public function getJs()
{
$jsMergedFile = AssetManager::getMergedJsFileLocation();
- ProxyStaticFile::serveFile($jsMergedFile, self::JS_MIME_TYPE);
+ ProxyHttp::serverStaticFile($jsMergedFile, self::JS_MIME_TYPE);
}
/**
@@ -65,7 +65,7 @@ class Controller extends \Piwik\Controller
AssetManager::removeTranslationsJsFile();
$translationsJsFile = AssetManager::getTranslationsJsFileLocation();
- ProxyStaticFile::serveFile($translationsJsFile, self::JS_MIME_TYPE);
+ ProxyHttp::serverStaticFile($translationsJsFile, self::JS_MIME_TYPE);
}
/**
diff --git a/tests/PHPUnit/Core/ServeStaticFileTest.php b/tests/PHPUnit/Core/ServeStaticFileTest.php
index a5cbaa1d39..e6aeb2e5d9 100644
--- a/tests/PHPUnit/Core/ServeStaticFileTest.php
+++ b/tests/PHPUnit/Core/ServeStaticFileTest.php
@@ -1,20 +1,20 @@
<?php
/**
- * This php file is used to unit test Piwik::serveFile()
+ * This php file is used to unit test Piwik::serverStaticFile()
* Unit tests for this method should normally be located in /tests/core/Piwik.test.php
- * To make a comprehensive test suit for Piwik::serveFile() (ie. being able to test combinations of request
+ * To make a comprehensive test suit for Piwik::serverStaticFile() (ie. being able to test combinations of request
* headers, being able to test response headers and so on) we need to simulate static file requests in a controlled
* environment
- * The php code which simulates requests using Piwik::serveFile() is provided in the same file (ie. this one)
- * as the unit testing code for Piwik::serveFile()
+ * The php code which simulates requests using Piwik::serverStaticFile() is provided in the same file (ie. this one)
+ * as the unit testing code for Piwik::serverStaticFile()
* This decision has a structural impact on the usual unit test file structure
- * serveFile.test.php has been created to avoid making too many modifications to /tests/core/Piwik.test.php
+ * serverStaticFile.test.php has been created to avoid making too many modifications to /tests/core/Piwik.test.php
*/
// This is Piwik logo, the static file used in this test suit
use Piwik\Common;
use Piwik\Piwik;
-use Piwik\ProxyStaticFile;
+use Piwik\ProxyHttp;
define("TEST_FILE_LOCATION", realpath(dirname(__FILE__) . "/../../resources/lipsum.txt"));
define("TEST_FILE_CONTENT_TYPE", "text/plain");
@@ -26,7 +26,7 @@ define("ZLIB_OUTPUT_REQUEST_VAR", "zlibOutput");
/**
* These constants define the mode in which this php file is used :
- * - for unit testing Piwik::serveFile() or
+ * - for unit testing Piwik::serverStaticFile() or
* - as a static file server
*/
define("STATIC_SERVER_MODE", "staticServerMode");
@@ -53,11 +53,11 @@ class Test_Piwik_ServeStaticFile extends PHPUnit_Framework_TestCase
*/
public function test_phpOutputCompression()
{
- $this->assertFalse(ProxyStaticFile::isPhpOutputCompressed());
+ $this->assertFalse(ProxyHttp::isPhpOutputCompressed());
}
/**
- * Checks that "HTTP/1.0 404 Not Found" is returned when Piwik::serveFile is called with a null file
+ * Checks that "HTTP/1.0 404 Not Found" is returned when Piwik::serverStaticFile is called with a null file
*
* @group ServeStaticFile
*/
@@ -74,7 +74,8 @@ class Test_Piwik_ServeStaticFile extends PHPUnit_Framework_TestCase
}
/**
- * Checks that "HTTP/1.0 404 Not Found" is returned when Piwik::serveFile is called with a non existing file
+ * Checks that "HTTP/1.0 404 Not Found" is returned when Piwik::serverStaticFile is called with a non existing file
+ *
*
* @group ServeStaticFile
*/
@@ -91,7 +92,7 @@ class Test_Piwik_ServeStaticFile extends PHPUnit_Framework_TestCase
}
/**
- * Checks that "HTTP/1.0 505 Internal server error" is returned when Piwik::serveFile is called with a
+ * Checks that "HTTP/1.0 505 Internal server error" is returned when Piwik::serverStaticFile is called with a
* non-readable file
*
* @group ServeStaticFile
diff --git a/tests/resources/staticFileServer.php b/tests/resources/staticFileServer.php
index 0646b6b3cc..cdaa54830f 100644
--- a/tests/resources/staticFileServer.php
+++ b/tests/resources/staticFileServer.php
@@ -1,16 +1,16 @@
<?php
/**
- * This php file is used to unit test Piwik::serveFile()
- * To make a comprehensive test suit for Piwik::serveFile() (ie. being able to test combinations of request
+ * This php file is used to unit test Piwik::serverStaticFile()
+ * To make a comprehensive test suit for Piwik::serverStaticFile() (ie. being able to test combinations of request
* headers, being able to test response headers and so on) we need to simulate static file requests in a controlled
* environment
- * The php code which simulates requests using Piwik::serveFile() is provided in the same file (ie. this one)
- * as the unit testing code for Piwik::serveFile()
+ * The php code which simulates requests using Piwik::serverStaticFile() is provided in the same file (ie. this one)
+ * as the unit testing code for Piwik::serverStaticFile()
* This decision has a structural impact on the usual unit test file structure
- * serveFile.test.php has been created to avoid making too many modifications to /tests/core/Piwik.test.php
+ * serverStaticFile.test.php has been created to avoid making too many modifications to /tests/core/Piwik.test.php
*/
use Piwik\Common;
-use Piwik\ProxyStaticFile;
+use Piwik\ProxyHttp;
define('PIWIK_DOCUMENT_ROOT', dirname(__FILE__).'/../../');
if(file_exists(PIWIK_DOCUMENT_ROOT . '/bootstrap.php'))
@@ -58,7 +58,7 @@ define("TEST_FILE_SRV_MODE", "testFile");
/**
* If the static file server has been requested, the response sent back to the browser will be the content produced by
- * the execution of Piwik:serveFile(). In this case, unit tests won't be executed
+ * the execution of Piwik:serverStaticFile(). In this case, unit tests won't be executed
*/
// Getting the server mode
$staticFileServerMode = Common::getRequestVar(SRV_MODE_REQUEST_VAR, "");
@@ -72,21 +72,21 @@ if ($staticFileServerMode === "") {
}
switch ($staticFileServerMode) {
- // The static file server calls Piwik::serveFile with a null file
+ // The static file server calls Piwik::serverStaticFile with a null file
case NULL_FILE_SRV_MODE:
- ProxyStaticFile::serveFile(null, TEST_FILE_CONTENT_TYPE);
+ ProxyHttp::serverStaticFile(null, TEST_FILE_CONTENT_TYPE);
break;
- // The static file server calls Piwik::serveFile with a non-existing file
+ // The static file server calls Piwik::serverStaticFile with a non-existing file
case GHOST_FILE_SRV_MODE:
- ProxyStaticFile::serveFile(TEST_FILE_LOCATION . ".ghost", TEST_FILE_CONTENT_TYPE);
+ ProxyHttp::serverStaticFile(TEST_FILE_LOCATION . ".ghost", TEST_FILE_CONTENT_TYPE);
break;
- // The static file server calls Piwik::serveFile with the test file
+ // The static file server calls Piwik::serverStaticFile with the test file
case TEST_FILE_SRV_MODE:
- ProxyStaticFile::serveFile(TEST_FILE_LOCATION, TEST_FILE_CONTENT_TYPE);
+ ProxyHttp::serverStaticFile(TEST_FILE_LOCATION, TEST_FILE_CONTENT_TYPE);
break;
} \ No newline at end of file