From 6cb525a2a255aafebc162f80968a2054a0a9798b Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <Jacek@jacekk.info> Date: Tue, 29 Jan 2019 14:23:48 +0000 Subject: [PATCH] Add buses data to the map --- proxy_tram.php | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 117 insertions(+), 0 deletions(-) diff --git a/proxy_tram.php b/proxy_tram.php new file mode 100644 index 0000000..f24d447 --- /dev/null +++ b/proxy_tram.php @@ -0,0 +1,117 @@ +<?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(!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; -- Gitblit v1.9.1