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