From 3464b596abc454de33f60572602a6edfc23bb3fe Mon Sep 17 00:00:00 2001 From: Rekryt Date: Fri, 20 Feb 2026 08:11:27 +0300 Subject: [PATCH] feat: optimize filters in getSites() --- .../Controller/AbstractIPListController.php | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/App/Controller/AbstractIPListController.php b/src/App/Controller/AbstractIPListController.php index 7ffdb08..166c08c 100644 --- a/src/App/Controller/AbstractIPListController.php +++ b/src/App/Controller/AbstractIPListController.php @@ -7,6 +7,7 @@ use Amp\Http\Server\Request; use OpenCCK\App\Service\IPListService; use OpenCCK\Domain\Entity\Site; +use OpenCCK\Domain\Factory\SiteFactory; use OpenCCK\Infrastructure\API\App; use Monolog\Logger; @@ -44,6 +45,7 @@ abstract class AbstractIPListController extends AbstractController { * @return array */ protected function getSites(): array { + $querySites = SiteFactory::normalizeArray($this->request->getQueryParameters()['site'] ?? []); $wildcard = !!($this->request->getQueryParameter('wildcard') ?? ''); $group = $this->request->getQueryParameterArray('group') ?? []; @@ -59,6 +61,9 @@ abstract class AbstractIPListController extends AbstractController { $sites = []; foreach ($this->service->sites as $siteEntity) { + if (count($querySites) && !in_array($siteEntity->name, $querySites)) { + continue; + } if (isset($exclude['site'][$siteEntity->name])) { continue; } @@ -71,15 +76,29 @@ abstract class AbstractIPListController extends AbstractController { $site = clone $siteEntity; $site->domains = array_values( - array_filter( - $siteEntity->getDomains($wildcard), - fn(string $domain) => !isset($exclude['domain'][$domain]) - ) + count($exclude['domain']) + ? array_filter( + $siteEntity->getDomains($wildcard), + fn(string $domain) => !isset($exclude['domain'][$domain]) + ) + : $siteEntity->getDomains($wildcard) ); - $site->ip4 = array_values(array_filter($site->ip4, fn(string $ip) => !isset($exclude['ip4'][$ip]))); - $site->cidr4 = array_values(array_filter($site->cidr4, fn(string $ip) => !isset($exclude['cidr4'][$ip]))); - $site->ip6 = array_values(array_filter($site->ip6, fn(string $ip) => !isset($exclude['ip6'][$ip]))); - $site->cidr6 = array_values(array_filter($site->cidr6, fn(string $ip) => !isset($exclude['cidr6'][$ip]))); + if (count($exclude['ip4'])) { + $site->ip4 = array_values(array_filter($site->ip4, fn(string $ip) => !isset($exclude['ip4'][$ip]))); + } + if (count($exclude['cidr4'])) { + $site->cidr4 = array_values( + array_filter($site->cidr4, fn(string $ip) => !isset($exclude['cidr4'][$ip])) + ); + } + if (count($exclude['ip6'])) { + $site->ip6 = array_values(array_filter($site->ip6, fn(string $ip) => !isset($exclude['ip6'][$ip]))); + } + if (count($exclude['cidr6'])) { + $site->cidr6 = array_values( + array_filter($site->cidr6, fn(string $ip) => !isset($exclude['cidr6'][$ip])) + ); + } $sites[$site->name] = $site; }