false, "error" => null, "source" => "", "headers" => array(), "contentType" => "application/javascript", ); if (empty($uri) || $_SERVER["REQUEST_METHOD"] !== "GET" || stripos($uri, AdmiralAdBlockAnalytics::$scriptURIPrefix) !== 0) { return $res; } $offset = strlen(AdmiralAdBlockAnalytics::$scriptURIPrefix); // check if this is a valid filename $basename = substr($uri, $offset); //make sure the filename doesn't already exist first if (AdmiralAdBlockAnalytics::doesWPContentFileExist($basename)) { //error_log("AdmiralAnalytics: Preventing injecting existing file for $basename"); return $res; } $seeds = AdmiralAdBlockAnalytics::getSeedsWithHost("hazadblock", $host); if (!AdmiralAdBlockAnalytics::doesURIContainRandomFilename($uri, $seeds)) { //error_log("AdmiralAnalytics: uri failed $uri"); return $res; } $res["matched"] = true; $headers = array(); if (!empty($acceptEncoding)) { $headers[] = "Accept-Encoding: $acceptEncoding"; } $scriptRes = AdmiralAdBlockAnalytics::fetchScript($headers, $_SERVER["HTTP_HOST"]); $res["error"] = $scriptRes["error"]; $res["source"] = $scriptRes["source"]; $res["headers"] = $scriptRes["headers"]; return $res; } function admiraladblock_proxy_record($uri, $host) { $res = array("matched" => false, "error" => null, "source" => "", "headers" => array(), "contentType" => "application/json", ); if (empty($uri) || $_SERVER["REQUEST_METHOD"] !== "POST" || substr_count($uri, "/") > 1) { return $res; } $seeds = AdmiralAdBlockAnalytics::getSeedsWithHost("hoothoot", $host); if (!AdmiralAdBlockAnalytics::doesURIContainRandomFilename($uri, $seeds)) { return $res; } $res["matched"] = true; $entityBody = ""; try { $entityBody = file_get_contents('php://input'); } catch (Exception $e) { error_log("AdmiralAnalytics: Error reading POST body: " . $e->getMessage()); } $proxyRes = AdmiralAdBlockAnalytics::proxyRecord($entityBody); $res["error"] = $proxyRes["error"]; $res["source"] = $proxyRes["source"]; $res["headers"] = $proxyRes["headers"]; return $res; } function admiraladblock_inject_proxy($query) { $acceptEncoding = ""; if (!empty($_SERVER["HTTP_ACCEPT_ENCODING"])) { $acceptEncoding = $_SERVER["HTTP_ACCEPT_ENCODING"]; } $res = admiraladblock_inject_public_script($_SERVER["REQUEST_URI"], $_SERVER["HTTP_HOST"], $acceptEncoding); if (!$res["matched"]) { $res = admiraladblock_proxy_record($_SERVER["REQUEST_URI"], $_SERVER["HTTP_HOST"]); if (!$res["matched"]) { return $query; } // let the proxy request go through for the record proxy } if (!empty($res["error"])) { $errorString = json_encode($res["error"]); error_log("AdmiralAnalytics: Error proxying: $errorString"); if (function_exists("wp_die")) { wp_die("", "", 500); } } else { if (!headers_sent()) { if (!empty($res["headers"])) { foreach ($res["headers"] as $header) { header($header, true); } } else { // at least tell the browser that its javascript header("Content-Type: {$res["contentType"]}", true); } } echo $res["source"]; } die(); } add_action("parse_request", "admiraladblock_inject_proxy"); function admiraladblock_enqueue_script() { $url = AdmiralAdBlockAnalytics::getPublicScriptURL($_SERVER["HTTP_HOST"]); if (!empty($url)) { // no deps, no version, yes in footer wp_enqueue_script("admiral-adblock-analytics", $url, array(), false, true); } } add_action("wp_enqueue_scripts", "admiraladblock_enqueue_script"); /* EOF */