| <?php | |
| require_once 'portabilityLayer.php'; | |
| // This script detects requests that could not be sent before cross-site XMLHttpRequest appeared. | |
| header("Expires: Thu, 01 Dec 2003 16:00:00 GMT"); | |
| header("Cache-Control: no-cache, no-store, must-revalidate"); | |
| header("Pragma: no-cache"); | |
| if (!sys_get_temp_dir()) { | |
| echo "FAIL: No temp dir was returned.\n"; | |
| exit(); | |
| } | |
| function setState($newState, $file) | |
| { | |
| file_put_contents($file, $newState); | |
| } | |
| function getState($file) | |
| { | |
| if (!file_exists($file)) { | |
| return ""; | |
| } | |
| return file_get_contents($file); | |
| } | |
| $stateFile = sys_get_temp_dir() . "/tripmine-status"; | |
| $command = $_GET['command']; | |
| if ($command) { | |
| if ($command == "status") | |
| echo getState($stateFile); | |
| exit(); | |
| } | |
| $method = $_SERVER['REQUEST_METHOD']; | |
| $contentType = $_SERVER['CONTENT_TYPE']; | |
| if ($method == "OPTIONS") { | |
| // Don't allow cross-site requests with preflight. | |
| exit(); | |
| } | |
| // Only allow simple cross-site requests - since we did not allow preflight, this is all we should ever get. | |
| if ($method != "GET" && $method != "HEAD" && $method != "POST") { | |
| setState("FAIL. Non-simple method $method.", $stateFile); | |
| exit(); | |
| } | |
| if (isset($contentType) | |
| && !preg_match("/^application\/x\-www\-form\-urlencoded(;.+)?$/", $contentType) | |
| && !preg_match("/^multipart\/form\-data(;.+)?$/", $contentType) | |
| && !preg_match("/^text\/plain(;.+)?$/", $contentType)) { | |
| setState("FAIL. Non-simple content type: $contentType.", $stateFile); | |
| exit(); | |
| } | |
| if (isset($_SERVER['HTTP_X_WEBKIT_TEST'])) { | |
| setState("FAIL. Custom header sent with a simple request.", $stateFile); | |
| exit(); | |
| } | |
| ?> |