| | |
| | | <?php |
| | | function is_number($str) { |
| | | $str = (string)$str; |
| | | |
| | | return |
| | | ctype_digit($str) |
| | | OR |
| | | ( |
| | | substr($str, 0, 1) == '-' |
| | | AND |
| | | ctype_digit(substr($str, 1)) |
| | | ); |
| | | } |
| | | |
| | | $base_proxy = 'http://www.ttss.krakow.pl/internetservice'; |
| | | $method = [ |
| | | '/services/lookup/autocomplete/json' => [ |
| | | '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($_GET['positionType'] ?? NULL === 'RAW') { |
| | | $_GET['positionType'] = 'CORRECTED'; |
| | | } |
| | | |
| | | 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; |
| | | require('proxy_common.php'); |