Improved www.ttss.krakow.pl
Jacek Kowalski
2017-04-12 68aeb4a997a99ac7dde426ad7a3c87205b4f89d2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
$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']); },
    ],
    '/services/tripInfo/tripPassages' => [
        'tripId' => 'ctype_digit',
        'mode' => function($mode) { return in_array($mode, ['arrival', 'departure']); },
        #'vehicleId' => 'ctype_digit',
    ],
    '/services/routeInfo/routeStops' => [
        'routeId' => 'ctype_alnum'
    ],
];
$rewrite = [
    '/lookup/autocomplete/json' => '/services/lookup/autocomplete/json',
    '/passageInfo/stopPassages/stop' => '/services/passageInfo/stopPassages/stop',
    '/routeInfo/routeStops' => '/services/routeInfo/routeStops',
];
 
$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;