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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
<?php
/* Hier kommt der Dozmod proxy hin */
require 'modules/locations/inc/location.inc.php';
define('LIST_URL', CONFIG_DOZMOD . '/vmchooser/list');
define('VMX_URL', CONFIG_DOZMOD . '/vmchooser/lecture');
$availableRessources = ['vmx', 'test', 'netrules'];
/* this script requires 2 (3 with implicit client ip) parameters
*
* ressource = vmx,...
* lecture_uuid = client can choose
**/
function println($str) { echo "$str\n"; }
/* return an array of lecutre uuids.
* Parameter: an array with location Ids
* Cacheable
* */
function getLecturesForLocations($locationIds) {
$ids = implode('%20', $locationIds);
$url = LIST_URL . "?locations=$ids";
$responseXML = Download::asString($url, 60, $code);
$xml = new SimpleXMLElement($responseXML);
$uuids = [];
foreach ($xml->eintrag as $e) {
$uuids[] = strval($e->uuid['param'][0]);
}
return $uuids;
}
function getVMX($lecture_uuid) {
$url = VMX_URL . '/' . $lecture_uuid;
$response = Download::asString($url, 60, $code);
return $response;
}
// -----------------------------------------------------------------------------//
$ip = $_SERVER['REMOTE_ADDR'];
if (substr($ip, 0, 7) === '::ffff:') {
$ip = substr($ip, 7);
}
/* request data, don't trust */
$request = [ 'ressource' => filter_var(strtolower(trim($_REQUEST['ressource'])), FILTER_SANITIZE_STRING),
'lecture' => filter_var(strtolower(trim($_REQUEST['lecture'])), FILTER_SANITIZE_STRING),
'ip' => $ip ];
/* lookup location id(s) */
$location_ids = Location::getFromIP($request['ip']);
/* lookup lecture uuids */
$lectures = getLecturesForLocations(array($location_ids));
/* validate request -------------------------------------------- */
/* check ressources */
if (!in_array($request['ressource'], $availableRessources)) {
Util::traceError("unknown ressource: {$request['ressource']}");
}
/* check that the user requests a lecture that he is allowed to have */
if (!in_array($request['lecture'], $lectures)) {
Util::traceError("client is not allowed to access this lecture: ${request['lecture']}");
}
if ($request['ressource'] === 'vmx') {
echo getVMX($request['lecture']);
} else if ($request['ressource'] === 'test') {
echo "Here's your special test data!";
} else {
echo "I don't know how to give you that ressource";
}
|