From 7fb6327604c31fcde39c020df73cca0f409d127b Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Thu, 22 Jun 2023 15:48:39 +0200 Subject: [PATCH 1/2] migrate: Decode urls prior transmission Should be safe to do, as they're transmitted as JSON --- application/controllers/MigrateController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/controllers/MigrateController.php b/application/controllers/MigrateController.php index 014c3328e..0820fac45 100644 --- a/application/controllers/MigrateController.php +++ b/application/controllers/MigrateController.php @@ -42,7 +42,7 @@ public function monitoringUrlAction() $url = Url::fromPath($urlString); if (UrlMigrator::isSupportedUrl($url)) { try { - $urlString = UrlMigrator::transformUrl($url)->getAbsoluteUrl(); + $urlString = rawurldecode(UrlMigrator::transformUrl($url)->getAbsoluteUrl()); } catch (Exception $e) { $errors[$urlString] = [ IcingaException::describe($e), @@ -108,7 +108,7 @@ public function searchUrlAction() $url = Url::fromPath($urlString); $filter = QueryString::parse($url->getQueryString()); $filter = $traverseFilter($filter) ?? $filter; - $result[] = $url->setQueryString(QueryString::render($filter))->getAbsoluteUrl(); + $result[] = rawurldecode($url->setQueryString(QueryString::render($filter))->getAbsoluteUrl()); } $response = $this->getResponse()->json(); From 75f6fa1e87ea60ec9644d656e71393842559d4ad Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Thu, 22 Jun 2023 15:51:05 +0200 Subject: [PATCH 2/2] migrate: Already migrate monitoring urls with wildcards --- library/Icingadb/Compat/UrlMigrator.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/library/Icingadb/Compat/UrlMigrator.php b/library/Icingadb/Compat/UrlMigrator.php index 6eef3cad0..ef95bfc75 100644 --- a/library/Icingadb/Compat/UrlMigrator.php +++ b/library/Icingadb/Compat/UrlMigrator.php @@ -141,6 +141,8 @@ protected function rewrite(Filter\Rule $filter, array $legacyColumns, Filter\Cha default: $filter->setValue($exprRule); } + + $rewritten = $this->transformWildcardFilter($rewritten); } elseif ($column === 'sort') { $column = $filter->getValue(); if (isset($legacyColumns[$column])) { @@ -178,6 +180,7 @@ protected function rewrite(Filter\Rule $filter, array $legacyColumns, Filter\Cha return false; } elseif (preg_match('/^_(host|service)_([\w.]+)/i', $column, $groups)) { $rewritten = $filter->setColumn($groups[1] . '.vars.' . $groups[2]); + $rewritten = $this->transformWildcardFilter($rewritten); } } else { /** @var Filter\Chain $filter */ @@ -198,6 +201,19 @@ protected function rewrite(Filter\Rule $filter, array $legacyColumns, Filter\Cha return $rewritten; } + private function transformWildcardFilter(Filter\Condition $filter) + { + if (is_string($filter->getValue()) && strpos($filter->getValue(), '*') !== false) { + if ($filter instanceof Filter\Equal) { + return Filter::like($filter->getColumn(), $filter->getValue()); + } elseif ($filter instanceof Filter\Unequal) { + return Filter::unlike($filter->getColumn(), $filter->getValue()); + } + } + + return $filter; + } + protected static function commonColumns(): array { return [