diff --git a/classes/Utils.php b/classes/Utils.php index 73895735bdd84a395691279b59f1270e23dd549e..186b938128d5403ffe3cb5e71cbfd192120643cc 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 7d62b68f0a678c9cfea1b799c7c447ce17eadf71..11d222fc8e9fe2a16d86fc6a574fc508ca7b3386 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);