From f18cb7d11213f728dd8c1db4fa0fb60f0b37b519 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Thu, 12 Sep 2024 16:45:57 +0200 Subject: [PATCH] StaticController: Allow to access a lib's js assets --- .../Web/Controller/StaticController.php | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/library/Icinga/Web/Controller/StaticController.php b/library/Icinga/Web/Controller/StaticController.php index f5ce1631e..3bbfe2d7b 100644 --- a/library/Icinga/Web/Controller/StaticController.php +++ b/library/Icinga/Web/Controller/StaticController.php @@ -38,7 +38,29 @@ class StaticController return; } - $assetRoot = $library->getStaticAssetPath(); + preg_match('~^(\w+)/~', $assetPath, $m); + switch ($m[1] ?? null) { + case 'js': + $assetPath = substr($assetPath, 3); + $assetRoot = $library->getJsAssetPath(); + $contentType = 'text/javascript'; + + break; + case 'css': + $assetPath = substr($assetPath, 4); + $assetRoot = $library->getCssAssetPath(); + $contentType = 'text/css'; + + break; + case 'static': + $assetPath = substr($assetPath, 7); + + // `static/` is the default + default: + $assetRoot = $library->getStaticAssetPath(); + $contentType = null; + } + if (empty($assetRoot)) { $app->getResponse() ->setHttpResponseCode(404); @@ -79,7 +101,7 @@ class StaticController } else { $app->getResponse() ->setHeader('ETag', $eTag) - ->setHeader('Content-Type', mime_content_type($filePath), true) + ->setHeader('Content-Type', $contentType ?? mime_content_type($filePath), true) ->setHeader('Last-Modified', gmdate('D, d M Y H:i:s', $fileStat['mtime']) . ' GMT') ->setBody(file_get_contents($filePath)); }