From 06bff0b9b84d47c43f9bc8aff06a29d85ebb7ed0 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 14 Nov 2023 14:47:55 +0100 Subject: Add function param/return types, fix a lot more phpstorm complaints --- modules-available/dozmod/api.inc.php | 58 +++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 28 deletions(-) (limited to 'modules-available/dozmod/api.inc.php') diff --git a/modules-available/dozmod/api.inc.php b/modules-available/dozmod/api.inc.php index 90e663aa..afc53853 100644 --- a/modules-available/dozmod/api.inc.php +++ b/modules-available/dozmod/api.inc.php @@ -10,6 +10,8 @@ **/ +use JetBrains\PhpStorm\NoReturn; + if (!Module::isAvailable('locations')) { die('require locations module'); } @@ -21,17 +23,17 @@ $availableRessources = ['list', 'netrules', 'metadata', 'imagemeta']; /* BEGIN: A simple caching mechanism ---------------------------- */ -function cache_hash($obj) +function cache_hash($obj): string { return md5(serialize($obj)); } -function cache_key_to_filename($key) +function cache_key_to_filename(string $key): string { return "/tmp/bwlp-slxadmin-cache-$key"; } -function cache_put($key, $value) +function cache_put(string $key, string $value): void { $filename = cache_key_to_filename($key); // Try to avoid another client concurrently accessing the cache seeing an empty file @@ -40,7 +42,7 @@ function cache_put($key, $value) rename($tmp, $filename); } -function cache_has($key) +function cache_has(string $key): bool { $filename = cache_key_to_filename($key); $mtime = @filemtime($filename); @@ -49,21 +51,18 @@ function cache_has($key) return false; // cache miss } $now = time(); - if ($now < $mtime || $now - $mtime > CONFIG_DOZMOD_EXPIRE) { - return false; - } else { - return true; - } + return $now >= $mtime && $now - $mtime <= CONFIG_DOZMOD_EXPIRE; } -function cache_get($key) +function cache_get(string $key): string { $filename = cache_key_to_filename($key); return file_get_contents($filename); } /* good for large binary files */ -function cache_get_passthru($key) +#[NoReturn] +function cache_get_passthru(string $key): void { $filename = cache_key_to_filename($key); $fp = fopen($filename, "r"); @@ -88,11 +87,16 @@ function cache_get_passthru($key) * Takes raw lecture list xml, returns array of uuids. * * @param string $responseXML XML from dozmod server - * @return array list of UUIDs, false on error + * @return array list of UUIDs */ -function xmlToLectureIds($responseXML) +function xmlToLectureIds(string $responseXML): array { - $xml = new SimpleXMLElement($responseXML); + try { + $xml = new SimpleXMLElement($responseXML); + } catch (Exception $e) { + EventLog::warning('Error parsing XML response data from DMSD: ' . $e->getMessage(), $responseXML); + return []; + } if (!isset($xml->eintrag)) return []; @@ -105,7 +109,8 @@ function xmlToLectureIds($responseXML) return $uuids; } -function sendExamModeMismatch() +#[NoReturn] +function sendExamModeMismatch(): void { Header('Content-Type: text/xml; charset=utf-8'); echo @@ -145,7 +150,7 @@ BLA; } /** Caching wrapper around _getLecturesForLocations() */ -function getListForLocations($locationIds, $raw) +function getListForLocations(array $locationIds, bool $raw) { /* if in any of the locations there is an exam active, consider the client to be in "exam-mode" and only offer him exams (no lectures) */ @@ -199,20 +204,20 @@ function getListForLocations($locationIds, $raw) return $list; } -function getLectureUuidsForLocations($locationIds) +function getLectureUuidsForLocations(array $locationIds) { return getListForLocations($locationIds, false); } -function outputLectureXmlForLocation($locationIds) +function outputLectureXmlForLocation(array $locationIds) { return getListForLocations($locationIds, true); } -function _getVmData($lecture_uuid, $subResource = false) +function _getVmData(string $lecture_uuid, string $subResource = null) { $url = VMX_URL . '/' . $lecture_uuid; - if ($subResource !== false) { + if ($subResource !== null) { $url .= '/' . $subResource; } $t = microtime(true); @@ -229,7 +234,7 @@ function _getVmData($lecture_uuid, $subResource = false) } /** Caching wrapper around _getVmData() **/ -function outputResource($lecture_uuid, $resource) +function outputResource(string $lecture_uuid, string $resource): void { if ($resource === 'metadata') { // HACK: config.tgz is compressed, don't use gzip output handler @@ -250,7 +255,7 @@ function outputResource($lecture_uuid, $resource) } else { $value = _getVmData($lecture_uuid, $resource); if ($value === false) - return false; + return; if (is_int($value)) { http_response_code($value); exit; @@ -258,16 +263,16 @@ function outputResource($lecture_uuid, $resource) cache_put($key, $value); die($value); } - return false; } +#[NoReturn] function fatalDozmodUnreachable() { Header('HTTP/1.1 504 Gateway Timeout'); die('DMSD currently not available'); } -function readLectureParam($locationIds) +function readLectureParam(array $locationIds): string { $lecture = Request::get('lecture', false, 'string'); if ($lecture === false) { @@ -290,7 +295,7 @@ function readLectureParam($locationIds) // in this context the lecture param is an image id (container), // just read and check if valid. // TODO do we need to check if this is allowed? -function readImageParam() +function readImageParam(): string { $image = Request::get('lecture', false, 'string'); @@ -335,6 +340,3 @@ if ($resource === 'list') { outputResource($lecture, $resource); } fatalDozmodUnreachable(); - -Header('HTTP/1.1 400 Bad Request'); -die("I don't know how to give you that resource"); -- cgit v1.2.3-55-g7522