From 6616bee53dd9fe2f8db37dba8cbdc7f870a48ef7 Mon Sep 17 00:00:00 2001 From: Rekryt Date: Sun, 18 Jan 2026 16:22:29 +0300 Subject: [PATCH] fix: optimize AbstractIPListController - method getSites() --- .../Controller/AbstractIPListController.php | 48 ++++++++++--------- src/App/Controller/AmneziaController.php | 5 +- src/App/Controller/BatController.php | 5 +- src/App/Controller/PacController.php | 5 +- src/App/Controller/SwitchyController.php | 5 +- src/App/Controller/TextController.php | 5 +- 6 files changed, 41 insertions(+), 32 deletions(-) diff --git a/src/App/Controller/AbstractIPListController.php b/src/App/Controller/AbstractIPListController.php index 175628a..b55eb5d 100644 --- a/src/App/Controller/AbstractIPListController.php +++ b/src/App/Controller/AbstractIPListController.php @@ -45,7 +45,9 @@ abstract class AbstractIPListController extends AbstractController { */ protected function getSites(): array { $wildcard = !!($this->request->getQueryParameter('wildcard') ?? ''); - $exclude = [ + $group = $this->request->getQueryParameterArray('group') ?? []; + + $exclude = array_map(fn($arr) => array_fill_keys($arr, true), [ 'group' => $this->request->getQueryParameterArray('exclude[group]') ?? [], 'site' => $this->request->getQueryParameterArray('exclude[site]') ?? [], 'domain' => $this->request->getQueryParameterArray('exclude[domain]') ?? [], @@ -53,34 +55,36 @@ abstract class AbstractIPListController extends AbstractController { 'cidr4' => $this->request->getQueryParameterArray('exclude[cidr4]') ?? [], 'ip6' => $this->request->getQueryParameterArray('exclude[ip6]') ?? [], 'cidr6' => $this->request->getQueryParameterArray('exclude[cidr6]') ?? [], - ]; - $group = $this->request->getQueryParameterArray('group') ?? []; - return array_map(static function (Site $siteEntity) use ($wildcard, $exclude) { + ]); + + $sites = []; + foreach ($this->service->sites as $siteEntity) { + if (isset($exclude['site'][$siteEntity->name])) { + continue; + } + if (isset($exclude['group'][$siteEntity->group])) { + continue; + } + if ($group && !in_array($siteEntity->group, $group, true)) { + continue; + } $site = clone $siteEntity; + $site->domains = array_values( array_filter( $siteEntity->getDomains($wildcard), - fn(string $domain) => !in_array($domain, $exclude['domain']) + fn(string $domain) => !isset($exclude['domain'][$domain]) ) ); - $site->ip4 = array_values(array_filter($site->ip4, fn(string $ip) => !in_array($ip, $exclude['ip4']))); - $site->cidr4 = array_values( - array_filter($site->cidr4, fn(string $ip) => !in_array($ip, $exclude['cidr4'])) - ); - $site->ip6 = array_values(array_filter($site->ip6, fn(string $ip) => !in_array($ip, $exclude['ip6']))); - $site->cidr6 = array_values( - array_filter($site->cidr6, fn(string $ip) => !in_array($ip, $exclude['cidr6'])) - ); + $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]))); - return $site; - }, array_filter( - array_filter( - $this->service->sites, - fn(Site $siteEntity) => !in_array($siteEntity->name, $exclude['site']) && - !in_array($siteEntity->group, $exclude['group']) - ), - fn(Site $siteEntity) => count($group) === 0 || in_array($siteEntity->group, $group) - )); + $sites[] = $site; + } + + return $sites; } /** diff --git a/src/App/Controller/AmneziaController.php b/src/App/Controller/AmneziaController.php index 46867ab..19a836f 100644 --- a/src/App/Controller/AmneziaController.php +++ b/src/App/Controller/AmneziaController.php @@ -18,12 +18,13 @@ class AmneziaController extends AbstractIPListController { } $response = []; + $sitesEntities = $this->getSites(); if (count($sites)) { foreach ($sites as $site) { - $response = array_merge($response, $this->getSites()[$site]->$data); + $response = array_merge($response, $sitesEntities[$site]->$data ?? []); } } else { - foreach ($this->getSites() as $siteEntity) { + foreach ($sitesEntities as $siteEntity) { $response = array_merge($response, $siteEntity->$data); } } diff --git a/src/App/Controller/BatController.php b/src/App/Controller/BatController.php index eb4108b..b5861aa 100644 --- a/src/App/Controller/BatController.php +++ b/src/App/Controller/BatController.php @@ -25,12 +25,13 @@ class BatController extends AbstractIPListController { } $response = []; + $sitesEntities = $this->getSites(); if (count($sites)) { foreach ($sites as $site) { - $response = array_merge($response, $this->getSites()[$site]->$data); + $response = array_merge($response, $sitesEntities[$site]->$data ?? []); } } else { - foreach ($this->getSites() as $siteEntity) { + foreach ($sitesEntities as $siteEntity) { $response = array_merge($response, $siteEntity->$data); } } diff --git a/src/App/Controller/PacController.php b/src/App/Controller/PacController.php index 061c4fe..d47bc39 100644 --- a/src/App/Controller/PacController.php +++ b/src/App/Controller/PacController.php @@ -20,12 +20,13 @@ class PacController extends AbstractIPListController { } $items = []; + $sitesEntities = $this->getSites(); if (count($sites)) { foreach ($sites as $site) { - $items = array_merge($items, $this->getSites()[$site]->$data); + $items = array_merge($items, $sitesEntities[$site]->$data); } } else { - foreach ($this->getSites() as $siteEntity) { + foreach ($sitesEntities as $siteEntity) { $items = array_merge($items, $siteEntity->$data); } } diff --git a/src/App/Controller/SwitchyController.php b/src/App/Controller/SwitchyController.php index 22af609..241b901 100644 --- a/src/App/Controller/SwitchyController.php +++ b/src/App/Controller/SwitchyController.php @@ -33,15 +33,16 @@ class SwitchyController extends AbstractIPListController { ]; $domains = []; + $sitesEntities = $this->getSites(); if (count($sites)) { foreach ($sites as $site) { $domains = array_merge( $domains, - array_map($this->wildcardFormat(...), $this->getSites()[$site]->$data) + array_map($this->wildcardFormat(...), $sitesEntities[$site]->$data) ); } } else { - foreach ($this->getSites() as $siteEntity) { + foreach ($sitesEntities as $siteEntity) { $domains = array_merge($domains, array_map($this->wildcardFormat(...), $siteEntity->$data)); } } diff --git a/src/App/Controller/TextController.php b/src/App/Controller/TextController.php index f24f5c7..2b52f0d 100644 --- a/src/App/Controller/TextController.php +++ b/src/App/Controller/TextController.php @@ -19,12 +19,13 @@ class TextController extends AbstractIPListController { } $response = []; + $sitesEntities = $this->getSites(); if (count($sites)) { foreach ($sites as $site) { - $response = array_merge($response, $this->getSites()[$site]->$data ?? []); + $response = array_merge($response, $sitesEntities[$site]->$data ?? []); } } else { - foreach ($this->getSites() as $siteEntity) { + foreach ($sitesEntities as $siteEntity) { $response = array_merge($response, $siteEntity->$data ?? []); } }