forked from GithubBackups/vichan
FilterService.php: use DnsDriver
This commit is contained in:
parent
456356ad9a
commit
4c29e84527
@ -3,6 +3,7 @@
|
|||||||
namespace Vichan\Service;
|
namespace Vichan\Service;
|
||||||
|
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
use Vichan\Data\Driver\Dns\DnsDriver;
|
||||||
use Vichan\Data\Driver\LogDriver;
|
use Vichan\Data\Driver\LogDriver;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -24,6 +25,11 @@ class FilterService {
|
|||||||
*/
|
*/
|
||||||
private LogDriver $logger;
|
private LogDriver $logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var DnsDriver Dns driver for reverse DNS lookup.
|
||||||
|
*/
|
||||||
|
private DnsDriver $dns_resolver;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filter service constructor
|
* Filter service constructor
|
||||||
@ -31,11 +37,13 @@ class FilterService {
|
|||||||
* @param array<int, array<string, mixed>> $filters The config filters.
|
* @param array<int, array<string, mixed>> $filters The config filters.
|
||||||
* @param FloodService $floodService The FloodService.
|
* @param FloodService $floodService The FloodService.
|
||||||
* @param LogDriver $logger The LogDriver.
|
* @param LogDriver $logger The LogDriver.
|
||||||
|
* @param DnsDriver $dns_resolver DnsResolver for hostname matching.
|
||||||
*/
|
*/
|
||||||
public function __construct(array $filters, FloodService $floodService, LogDriver $logger) {
|
public function __construct(array $filters, FloodService $floodService, LogDriver $logger, DnsDriver $dns_resolver) {
|
||||||
$this->filters = $filters;
|
$this->filters = $filters;
|
||||||
$this->floodService = $floodService;
|
$this->floodService = $floodService;
|
||||||
$this->logger = $logger;
|
$this->logger = $logger;
|
||||||
|
$this->dns_resolver = $dns_resolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -260,13 +268,17 @@ class FilterService {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$hostname = \rDNS($post['ip']);
|
$hostnames = $this->dns_resolver->IPToNames($post['ip']);
|
||||||
if ($hostname === $post['ip']) {
|
if ($hostnames === null) {
|
||||||
$this->logger->log(LogDriver::WARNING, "RDNS lookup failed for IP: {$post['ip']}");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->checkRegex($value, $hostname, 'RDNS');
|
foreach ($hostnames as $name) {
|
||||||
|
if ($this->checkRegex($value, $name, 'RDNS')) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
case 'agent':
|
case 'agent':
|
||||||
$this->validateType($value, 'array', 'Agent condition list');
|
$this->validateType($value, 'array', 'Agent condition list');
|
||||||
return $this->matchAgentCondition($value);
|
return $this->matchAgentCondition($value);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user