<?php 
 | 
if(!isset($base_proxy)) { 
 | 
    echo 'This script is for inclusion only.'; 
 | 
    die(); 
 | 
} 
 | 
  
 | 
function is_number($str) { 
 | 
    $str = (string)$str; 
 | 
  
 | 
    return 
 | 
        ctype_digit($str) 
 | 
        OR 
 | 
        ( 
 | 
            substr($str, 0, 1) == '-' 
 | 
            AND 
 | 
            ctype_digit(substr($str, 1)) 
 | 
        ); 
 | 
} 
 | 
  
 | 
$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', 'RAW']); }, 
 | 
        '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; 
 |