From 506fe169abcd603d6e0804e90b16c5c30b1ee20e Mon Sep 17 00:00:00 2001 From: Christian Klinger Date: Wed, 8 Jun 2016 15:47:33 +0200 Subject: added a caching api proxy (that also validates the client IPs) for dozmod. --- modules-available/dozmod/api.inc.php | 84 +++++++++++++++++++++++++++++++++--- 1 file changed, 79 insertions(+), 5 deletions(-) (limited to 'modules-available/dozmod') diff --git a/modules-available/dozmod/api.inc.php b/modules-available/dozmod/api.inc.php index f5525ef8..569b60a8 100644 --- a/modules-available/dozmod/api.inc.php +++ b/modules-available/dozmod/api.inc.php @@ -1,11 +1,64 @@ CONFIG_DOZMOD_EXPIRE) { + return false; + } else { + return true; + } +} + + +function cache_get($key) { + $filename = cache_key_to_filename($key); + return file_get_contents($filename); +} + +/* good for large binary files */ +function cache_get_passthru($key) { + $filename = cache_key_to_filename($key); + $fp = fopen($filename, "r"); + fpassthru($fp); +} +/* END: Cache ---------------------------------------------------- */ + /* this script requires 2 (3 with implicit client ip) parameters * @@ -18,9 +71,8 @@ function println($str) { echo "$str\n"; } /* return an array of lecutre uuids. * Parameter: an array with location Ids - * Cacheable * */ -function getLecturesForLocations($locationIds) { +function _getLecturesForLocations($locationIds) { $ids = implode('%20', $locationIds); $url = LIST_URL . "?locations=$ids"; $responseXML = Download::asString($url, 60, $code); @@ -32,13 +84,36 @@ function getLecturesForLocations($locationIds) { } return $uuids; } +/** Caching wrapper around _getLecturesForLocations() *// +function getLecturesForLocations($locationIds) { + $key = 'lectures_' . cache_hash($locationIds); + if (cache_has($key)) { + return unserialize(cache_get($key)); + } else { + $value = _getLecturesForLocations($locationIds); + cache_put($key, serialize($value)); + return $value; + } +} -function getVMX($lecture_uuid) { +function _getVMX($lecture_uuid) { $url = VMX_URL . '/' . $lecture_uuid; $response = Download::asString($url, 60, $code); return $response; } +/** Caching wrapper around _getVMX() **/ +function getVMX($lecture_uuid) { + $key = 'vmx_' . $lecture_uuid; + if (cache_has($key)) { + cache_get_passthru($key); + } else { + $value = _getVMX($lecture_uuid); + cache_put($key, $value); + return $value; + } +} + // -----------------------------------------------------------------------------// $ip = $_SERVER['REMOTE_ADDR']; @@ -58,7 +133,6 @@ $location_ids = Location::getFromIP($request['ip']); /* lookup lecture uuids */ $lectures = getLecturesForLocations(array($location_ids)); - /* validate request -------------------------------------------- */ /* check ressources */ if (!in_array($request['ressource'], $availableRessources)) { -- cgit v1.2.3-55-g7522