mirror of
https://github.com/rekryt/iplist.git
synced 2026-02-26 09:18:35 +03:00
fix: optimize AbstractIPListController - method getSites()
This commit is contained in:
@@ -45,7 +45,9 @@ abstract class AbstractIPListController extends AbstractController {
|
|||||||
*/
|
*/
|
||||||
protected function getSites(): array {
|
protected function getSites(): array {
|
||||||
$wildcard = !!($this->request->getQueryParameter('wildcard') ?? '');
|
$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]') ?? [],
|
'group' => $this->request->getQueryParameterArray('exclude[group]') ?? [],
|
||||||
'site' => $this->request->getQueryParameterArray('exclude[site]') ?? [],
|
'site' => $this->request->getQueryParameterArray('exclude[site]') ?? [],
|
||||||
'domain' => $this->request->getQueryParameterArray('exclude[domain]') ?? [],
|
'domain' => $this->request->getQueryParameterArray('exclude[domain]') ?? [],
|
||||||
@@ -53,34 +55,36 @@ abstract class AbstractIPListController extends AbstractController {
|
|||||||
'cidr4' => $this->request->getQueryParameterArray('exclude[cidr4]') ?? [],
|
'cidr4' => $this->request->getQueryParameterArray('exclude[cidr4]') ?? [],
|
||||||
'ip6' => $this->request->getQueryParameterArray('exclude[ip6]') ?? [],
|
'ip6' => $this->request->getQueryParameterArray('exclude[ip6]') ?? [],
|
||||||
'cidr6' => $this->request->getQueryParameterArray('exclude[cidr6]') ?? [],
|
'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 = clone $siteEntity;
|
||||||
|
|
||||||
$site->domains = array_values(
|
$site->domains = array_values(
|
||||||
array_filter(
|
array_filter(
|
||||||
$siteEntity->getDomains($wildcard),
|
$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->ip4 = array_values(array_filter($site->ip4, fn(string $ip) => !isset($exclude['ip4'][$ip])));
|
||||||
$site->cidr4 = array_values(
|
$site->cidr4 = array_values(array_filter($site->cidr4, fn(string $ip) => !isset($exclude['cidr4'][$ip])));
|
||||||
array_filter($site->cidr4, fn(string $ip) => !in_array($ip, $exclude['cidr4']))
|
$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])));
|
||||||
$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']))
|
|
||||||
);
|
|
||||||
|
|
||||||
return $site;
|
$sites[] = $site;
|
||||||
}, array_filter(
|
}
|
||||||
array_filter(
|
|
||||||
$this->service->sites,
|
return $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)
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -18,12 +18,13 @@ class AmneziaController extends AbstractIPListController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$response = [];
|
$response = [];
|
||||||
|
$sitesEntities = $this->getSites();
|
||||||
if (count($sites)) {
|
if (count($sites)) {
|
||||||
foreach ($sites as $site) {
|
foreach ($sites as $site) {
|
||||||
$response = array_merge($response, $this->getSites()[$site]->$data);
|
$response = array_merge($response, $sitesEntities[$site]->$data ?? []);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
foreach ($this->getSites() as $siteEntity) {
|
foreach ($sitesEntities as $siteEntity) {
|
||||||
$response = array_merge($response, $siteEntity->$data);
|
$response = array_merge($response, $siteEntity->$data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,12 +25,13 @@ class BatController extends AbstractIPListController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$response = [];
|
$response = [];
|
||||||
|
$sitesEntities = $this->getSites();
|
||||||
if (count($sites)) {
|
if (count($sites)) {
|
||||||
foreach ($sites as $site) {
|
foreach ($sites as $site) {
|
||||||
$response = array_merge($response, $this->getSites()[$site]->$data);
|
$response = array_merge($response, $sitesEntities[$site]->$data ?? []);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
foreach ($this->getSites() as $siteEntity) {
|
foreach ($sitesEntities as $siteEntity) {
|
||||||
$response = array_merge($response, $siteEntity->$data);
|
$response = array_merge($response, $siteEntity->$data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,12 +20,13 @@ class PacController extends AbstractIPListController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$items = [];
|
$items = [];
|
||||||
|
$sitesEntities = $this->getSites();
|
||||||
if (count($sites)) {
|
if (count($sites)) {
|
||||||
foreach ($sites as $site) {
|
foreach ($sites as $site) {
|
||||||
$items = array_merge($items, $this->getSites()[$site]->$data);
|
$items = array_merge($items, $sitesEntities[$site]->$data);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
foreach ($this->getSites() as $siteEntity) {
|
foreach ($sitesEntities as $siteEntity) {
|
||||||
$items = array_merge($items, $siteEntity->$data);
|
$items = array_merge($items, $siteEntity->$data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,15 +33,16 @@ class SwitchyController extends AbstractIPListController {
|
|||||||
];
|
];
|
||||||
|
|
||||||
$domains = [];
|
$domains = [];
|
||||||
|
$sitesEntities = $this->getSites();
|
||||||
if (count($sites)) {
|
if (count($sites)) {
|
||||||
foreach ($sites as $site) {
|
foreach ($sites as $site) {
|
||||||
$domains = array_merge(
|
$domains = array_merge(
|
||||||
$domains,
|
$domains,
|
||||||
array_map($this->wildcardFormat(...), $this->getSites()[$site]->$data)
|
array_map($this->wildcardFormat(...), $sitesEntities[$site]->$data)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
foreach ($this->getSites() as $siteEntity) {
|
foreach ($sitesEntities as $siteEntity) {
|
||||||
$domains = array_merge($domains, array_map($this->wildcardFormat(...), $siteEntity->$data));
|
$domains = array_merge($domains, array_map($this->wildcardFormat(...), $siteEntity->$data));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,12 +19,13 @@ class TextController extends AbstractIPListController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$response = [];
|
$response = [];
|
||||||
|
$sitesEntities = $this->getSites();
|
||||||
if (count($sites)) {
|
if (count($sites)) {
|
||||||
foreach ($sites as $site) {
|
foreach ($sites as $site) {
|
||||||
$response = array_merge($response, $this->getSites()[$site]->$data ?? []);
|
$response = array_merge($response, $sitesEntities[$site]->$data ?? []);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
foreach ($this->getSites() as $siteEntity) {
|
foreach ($sitesEntities as $siteEntity) {
|
||||||
$response = array_merge($response, $siteEntity->$data ?? []);
|
$response = array_merge($response, $siteEntity->$data ?? []);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user