[ 'query' => function() { return TRUE; }, ], '/services/passageInfo/stopPassages/stop' => [ 'stop' => 'ctype_alnum', 'mode' => function($mode) { return in_array($mode, ['arrival', 'departure']); }, #'startTime' => 'ctype_digit', #'timeFrame' => 'ctype_digit', ], '/services/passageInfo/stopPassages/stopPoint' => [ 'stopPoint' => 'is_number', 'mode' => function($mode) { return in_array($mode, ['arrival', 'departure']); }, #'startTime' => 'ctype_digit', #'timeFrame' => 'ctype_digit', ], '/services/tripInfo/tripPassages' => [ 'tripId' => 'ctype_digit', 'mode' => function($mode) { return in_array($mode, ['arrival', 'departure']); }, #'vehicleId' => 'ctype_digit', ], '/services/routeInfo/routeStops' => [ 'routeId' => 'ctype_alnum', ], '/services/stopInfo/stop' => [ 'stop' => 'is_number', ], '/services/stopInfo/stopPoint' => [ 'stopPoint' => 'is_number', ], '/geoserviceDispatcher/services/stopinfo/stops' => [ 'left' => 'is_number', 'bottom' => 'is_number', 'right' => 'is_number', 'top' => 'is_number', ], '/geoserviceDispatcher/services/stopinfo/stopPoints' => [ 'left' => 'is_number', 'bottom' => 'is_number', 'right' => 'is_number', 'top' => 'is_number', ], '/geoserviceDispatcher/services/pathinfo/route' => [ 'id' => 'is_number', 'direction' => 'is_number', ], '/geoserviceDispatcher/services/pathinfo/vehicle' => [ 'id' => 'is_number', ], '/geoserviceDispatcher/services/vehicleinfo/vehicles' => [ 'lastUpdate' => 'ctype_digit', 'positionType' => function($type) { return in_array($type, ['CORRECTED']); }, 'colorType' => function($type) { return in_array($type, ['ROUTE_BASED']); }, ], ]; $rewrite = [ '/lookup/autocomplete/json' => '/services/lookup/autocomplete/json', '/passageInfo/stopPassages/stop' => '/services/passageInfo/stopPassages/stop', '/routeInfo/routeStops' => '/services/routeInfo/routeStops', '/internetservice/geoserviceDispatcher/services/pathinfo/vehicle' => '/geoserviceDispatcher/services/pathinfo/vehicle', ]; $path = $_SERVER['PATH_INFO']; if(isset($rewrite[$path])) { $path = $rewrite[$path]; } if(!isset($method[$path])) { header('HTTP/1.1 403 Forbidden'); die('Forbidden'); } $parameters = []; foreach($method[$path] as $name => $filter) { if(!isset($_GET[$name])) { header('HTTP/1.1 403 Forbidden'); die('Parameter '.$name.' is required'); } if(!$filter($_GET[$name])) { header('HTTP/1.1 403 Forbidden'); die('Parameter '.$name.' has invalid value'); } $parameters[$name] = $_GET[$name]; } $result = @file_get_contents($base_proxy . $path . '?' . http_build_query($parameters)); if(!$result OR $http_response_header[0] != 'HTTP/1.1 200 OK') { header('HTTP/1.1 503 Service Unavailable'); if(isset($http_response_header[0])) { die($http_response_header[0]); } else { die('Unknown error'); } } header('Content-Type: application/json'); echo $result;