|  |  | 
 |  |  | <?php | 
 |  |  | $base_proxy = 'http://www.ttss.krakow.pl/internetservice/services'; | 
 |  |  | 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 = [ | 
 |  |  |    '/lookup/autocomplete/json' => [ | 
 |  |  |    '/services/lookup/autocomplete/json' => [ | 
 |  |  |       'query' => function() { return TRUE; }, | 
 |  |  |    ], | 
 |  |  |    '/passageInfo/stopPassages/stop' => [ | 
 |  |  |    '/services/passageInfo/stopPassages/stop' => [ | 
 |  |  |       'stop' => 'ctype_alnum', | 
 |  |  |       'mode' => function($mode) { return in_array($mode, ['arrival', 'departure']); }, | 
 |  |  |       #'startTime' => 'ctype_digit', | 
 |  |  |       #'timeFrame' => 'ctype_digit', | 
 |  |  |    ], | 
 |  |  |    '/routeInfo/routeStops' => [ | 
 |  |  |       'routeId' => 'ctype_alnum' | 
 |  |  |    '/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'); |