diff options
Diffstat (limited to 'tests/javascript/piwik.php')
-rw-r--r-- | tests/javascript/piwik.php | 58 |
1 files changed, 45 insertions, 13 deletions
diff --git a/tests/javascript/piwik.php b/tests/javascript/piwik.php index 856193e330..c1c0f5ae20 100644 --- a/tests/javascript/piwik.php +++ b/tests/javascript/piwik.php @@ -9,6 +9,11 @@ function sendWebBug() { print(base64_decode($trans_gif_64)); } +function isPost() +{ + return $_SERVER['REQUEST_METHOD'] == 'POST'; +} + if (!file_exists("enable_sqlite")) { sendWebBug(); exit; @@ -35,6 +40,22 @@ if (filesize(dirname(__FILE__).'/unittest.dbf') == 0) } } +function logRequest($sqlite, $uri, $data) { + $ip = $_SERVER['REMOTE_ADDR']; + $ts = $_SERVER['REQUEST_TIME']; + +// $uri = htmlspecialchars($uri); + + $referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; + $ua = $_SERVER['HTTP_USER_AGENT']; + + $token = isset($data['token']) ? $data['token'] : ''; + + $query = $sqlite->exec("INSERT INTO requests (token, ip, ts, uri, referer, ua) VALUES (\"$token\", \"$ip\", \"$ts\", \"$uri\", \"$referrer\", \"$ua\")"); + + return $query; +} + if (isset($_GET['requests'])) { $token = get_magic_quotes_gpc() ? stripslashes($_GET['requests']) : $_GET['requests']; $ua = $_SERVER['HTTP_USER_AGENT']; @@ -56,25 +77,36 @@ if (isset($_GET['requests'])) { echo "</body></html>\n"; } else { + if (!isset($_REQUEST['data'])) { - header("HTTP/1.0 400 Bad Request"); + header("HTTP/1.0 400 Bad Request"); } else { - $ip = $_SERVER['REMOTE_ADDR']; - $ts = $_SERVER['REQUEST_TIME']; - $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''; - if($_SERVER['REQUEST_METHOD'] == 'POST') { - $uri .= '?' . file_get_contents('php://input'); - } -// $uri = htmlspecialchars($uri); + $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''; + + $input = file_get_contents("php://input"); + $requests = @json_decode($input, true); + $data = json_decode(get_magic_quotes_gpc() ? stripslashes($_REQUEST['data']) : $_REQUEST['data'], true); + + if (!empty($requests) && isPost()) { + $query = true; + foreach ($requests['requests'] as $request) { + if (empty($data) && preg_match('/data=%7B%22token%22%3A%22([a-z0-9A-Z]*?)%22%7D/', $request, $matches)) { + // safari and opera + $data = array('token' => $matches[1]); + } + + $query = $query && logRequest($sqlite, $uri . $request, $data); + } + } else { - $referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; - $ua = $_SERVER['HTTP_USER_AGENT']; + if (isPost()) { + $uri .= '?' . file_get_contents('php://input'); + } - $data = json_decode(get_magic_quotes_gpc() ? stripslashes($_REQUEST['data']) : $_REQUEST['data'], true); - $token = isset($data['token']) ? $data['token'] : ''; + $query = logRequest($sqlite, $uri, $data); + } - $query = $sqlite->exec("INSERT INTO requests (token, ip, ts, uri, referer, ua) VALUES (\"$token\", \"$ip\", \"$ts\", \"$uri\", \"$referrer\", \"$ua\")"); if (!$query) { header("HTTP/1.0 500 Internal Server Error"); } else { |