From e30311d65820808037a3fb4eda0ef5c316227ca1 Mon Sep 17 00:00:00 2001 From: Stein Magne Bjorklund <steinmb@smbjorklund.com> Date: Fri, 17 Sep 2021 16:34:45 +0200 Subject: [PATCH] Refactor Utils::getMirroredUri() - Reduce logic complexity. - Return early. Code get called on every request and should be fast. - Remove support for mirroring multiple uri. Code uses a long gone PHP function. Split this into a private method. --- classes/Utils.php | 70 +++++++++++++++++++------------ classes/modules/serviceModule.php | 2 +- 2 files changed, 44 insertions(+), 28 deletions(-) diff --git a/classes/Utils.php b/classes/Utils.php index 73895735..186b9381 100644 --- a/classes/Utils.php +++ b/classes/Utils.php @@ -215,7 +215,7 @@ class Utils $t = $parser->getTriples(); $triples = array_merge($triples, $t); } - if ($lodspk['mirror_external_uris']) { + if (self::mirror_external_uris($lodspk)) { global $uri; global $localUri; $t = array(); @@ -803,38 +803,54 @@ class Utils return $result; } - public static function getMirroredUri($localUri) + public static function mirror_external_uris($conf): bool { - global $conf; - $uri = $localUri; - if (isset($conf['mirror_external_uris']) && $conf['mirror_external_uris'] != false) { - if (is_bool($conf['mirror_external_uris'])) { - $uri = preg_replace("|^" . $conf['basedir'] . "|", $conf['ns']['base'], $localUri); - } elseif (is_string($conf['mirror_external_uris'])) { - $uri = preg_replace("|^" . $conf['basedir'] . "|", $conf['mirror_external_uris'], $localUri); - } elseif (is_array($conf['mirror_external_uris'])) { - $defaultKey = ""; //Default namespace is empty string "" - $namespaceFragment = array_shift(split("/", str_replace($conf['basedir'], "", $localUri))); + return isset($conf['mirror_external_uris']) && $conf['mirror_external_uris'] !== false; + } + + private static function multiple_mirror_external_uris($conf) + { + HTTPStatus::send500("Mirroring multiple external uris currently not supported in PHP 7 and 8 by Loadspeakr"); + + $defaultKey = ""; //Default namespace is empty string "" + $namespaceFragment = array_shift(split("/", str_replace($conf['basedir'], "", $localUri))); + $uri = preg_replace( + "|^" . $conf['basedir'] . "|", + $conf['mirror_external_uris'][$defaultKey], + $localUri + ); + foreach ($conf['mirror_external_uris'] as $k => $v) { + if ($namespaceFragment == $k) { $uri = preg_replace( - "|^" . $conf['basedir'] . "|", - $conf['mirror_external_uris'][$defaultKey], + "|^" . $conf['basedir'] . $k . "/" . "|", + $conf['mirror_external_uris'][$k], $localUri ); - foreach ($conf['mirror_external_uris'] as $k => $v) { - if ($namespaceFragment == $k) { - $uri = preg_replace( - "|^" . $conf['basedir'] . $k . "/" . "|", - $conf['mirror_external_uris'][$k], - $localUri - ); - break; - } - } - } else { - HTTPStatus::send500("Error in mirroring configuration"); - exit(1); + break; } } + + } + + public static function getMirroredUri($localUri) + { + global $conf; + $uri = ''; + + if (!self::mirror_external_uris($conf)) { + return $localUri; + } + + if (is_bool($conf['mirror_external_uris'])) { + $uri = preg_replace("|^" . $conf['basedir'] . "|", $conf['ns']['base'], $localUri); + } elseif (is_string($conf['mirror_external_uris'])) { + $uri = preg_replace("|^" . $conf['basedir'] . "|", $conf['mirror_external_uris'], $localUri); + } elseif (is_array($conf['mirror_external_uris'])) { + self::multiple_mirror_external_uris($conf); + } else { + HTTPStatus::send500("Error in mirroring configuration"); + } + return $uri; } diff --git a/classes/modules/serviceModule.php b/classes/modules/serviceModule.php index 7d62b68f..11d222fc 100644 --- a/classes/modules/serviceModule.php +++ b/classes/modules/serviceModule.php @@ -148,7 +148,7 @@ class ServiceModule extends abstractModule $prefixHeader = array(); for ($i = 0; $i < sizeof($params); $i++) { - if ($conf['mirror_external_uris'] != false) { + if (Utils::mirror_external_uris($conf)) { $altUri = Utils::curie2uri($params[$i]); $altUri = preg_replace("|^" . $conf['basedir'] . "|", $conf['ns']['local'], $altUri); $params[$i] = Utils::uri2curie($altUri); -- GitLab