From 6c7f1e54668733b0e9d9dd62317a1ce601b99a53 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Fri, 28 Mar 2025 11:46:16 +0100 Subject: [PATCH] Dashlet: Properly embed iframe urls fixes #5346 --- .../Icinga/Web/Widget/Dashboard/Dashlet.php | 41 +++++++++++-------- public/js/icinga/events.js | 16 +++++++- 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/library/Icinga/Web/Widget/Dashboard/Dashlet.php b/library/Icinga/Web/Widget/Dashboard/Dashlet.php index 2ba26dfff..e7454813e 100644 --- a/library/Icinga/Web/Widget/Dashboard/Dashlet.php +++ b/library/Icinga/Web/Widget/Dashboard/Dashlet.php @@ -3,9 +3,9 @@ namespace Icinga\Web\Widget\Dashboard; +use Icinga\Web\Session; use Icinga\Web\Url; use Icinga\Data\ConfigObject; -use Icinga\Exception\IcingaException; /** * A dashboard pane dashlet @@ -57,18 +57,15 @@ class Dashlet extends UserWidget */ private $template =<<<'EOD' -
-

{TITLE}

+
+

{TITLE}

{PROGRESS_LABEL}...

-
EOD; @@ -250,13 +247,22 @@ EOD; $url = $this->getUrl(); $url->setParam('showCompact', true); - $iframeUrl = clone $url; - $iframeUrl->setParam('isIframe'); + $fullUrl = $url->getUrlWithout(['showCompact', 'limit', 'view']); + + $urlHash = ''; + $fullUrlHash = ''; + if ($url->getPath() === 'iframe') { + $urlHash = hash('sha256', Url::fromPath($url->getParam('url'))->getAbsoluteUrl() + . Session::getSession()->getId()); + $fullUrlHash = hash('sha256', Url::fromPath($fullUrl->getParam('url'))->getAbsoluteUrl() + . Session::getSession()->getId()); + } $searchTokens = array( '{URL}', - '{IFRAME_URL}', + '{URL_HASH}', '{FULL_URL}', + '{FULL_URL_HASH}', '{TOOLTIP}', '{TITLE}', '{TITLE_PREFIX}', @@ -265,8 +271,9 @@ EOD; $replaceTokens = array( $url, - $iframeUrl, - $url->getUrlWithout(['showCompact', 'limit', 'view']), + $urlHash, + $fullUrl, + $fullUrlHash, sprintf($view->translate('Show %s', 'dashboard.dashlet.tooltip'), $view->escape($this->getTitle())), $view->escape($this->getTitle()), $view->translate('Dashlet') . ': ', diff --git a/public/js/icinga/events.js b/public/js/icinga/events.js index 43ca34de3..de36492ab 100644 --- a/public/js/icinga/events.js +++ b/public/js/icinga/events.js @@ -170,7 +170,21 @@ var $dashlet = $(this); var url = $dashlet.data('icingaUrl'); if (typeof url !== 'undefined') { - _this.icinga.loader.loadUrl(url, $dashlet).autorefresh = true; + const urlHash = this.dataset.urlHash; + if (urlHash) { + _this.icinga.loader.loadUrl( + url, + $dashlet, + undefined, + undefined, + undefined, + true, + undefined, + { "X-Icinga-URLHash": urlHash } + ); + } else { + _this.icinga.loader.loadUrl(url, $dashlet).autorefresh = true; + } } }); }