remotelyliving /
php-dns
| 1 | <?php |
||
| 2 | |||
| 3 | namespace RemotelyLiving\PHPDNS\Resolvers; |
||
| 4 | |||
| 5 | use RemotelyLiving\PHPDNS\Entities\DNSRecordCollection; |
||
| 6 | use RemotelyLiving\PHPDNS\Entities\DNSRecordType; |
||
| 7 | use RemotelyLiving\PHPDNS\Entities\Hostname; |
||
| 8 | use RemotelyLiving\PHPDNS\Factories\SpatieDNS; |
||
|
0 ignored issues
–
show
|
|||
| 9 | use RemotelyLiving\PHPDNS\Mappers\Dig as DigMapper; |
||
| 10 | use RemotelyLiving\PHPDNS\Resolvers\Exceptions\QueryFailure; |
||
| 11 | use Spatie\Dns\Dns; |
||
| 12 | use Spatie\Dns\Records\Record; |
||
| 13 | use Throwable; |
||
| 14 | |||
| 15 | use function array_slice; |
||
| 16 | use function explode; |
||
| 17 | use function implode; |
||
| 18 | use function preg_replace; |
||
| 19 | use function trim; |
||
| 20 | |||
| 21 | final class Dig extends ResolverAbstract |
||
| 22 | { |
||
| 23 | public const SUPPORTED_QUERY_TYPES = [ |
||
| 24 | DNSRecordType::TYPE_A, |
||
| 25 | DNSRecordType::TYPE_AAAA, |
||
| 26 | DNSRecordType::TYPE_CNAME, |
||
| 27 | DNSRecordType::TYPE_NS, |
||
| 28 | DNSRecordType::TYPE_SOA, |
||
| 29 | DNSRecordType::TYPE_MX, |
||
| 30 | DNSRecordType::TYPE_SRV, |
||
| 31 | DNSRecordType::TYPE_TXT, |
||
| 32 | DNSRecordType::TYPE_CAA, |
||
| 33 | ]; |
||
| 34 | |||
| 35 | private Dns $dig; |
||
| 36 | |||
| 37 | private DigMapper $mapper; |
||
| 38 | |||
| 39 | public function __construct( |
||
| 40 | Dns $dig = null, |
||
| 41 | DigMapper $mapper = null, |
||
| 42 | Hostname $nameserver = null |
||
| 43 | ) { |
||
| 44 | $this->dig = $dig ?? new Dns(); |
||
| 45 | |||
| 46 | if ($nameserver !== null) { |
||
| 47 | $this->dig = $this->dig->useNameserver((string) $nameserver); |
||
| 48 | } |
||
| 49 | |||
| 50 | $this->mapper = $mapper ?? new DigMapper(); |
||
| 51 | } |
||
| 52 | |||
| 53 | protected function doQuery(Hostname $hostname, DNSRecordType $recordType): DNSRecordCollection |
||
| 54 | { |
||
| 55 | if (!self::isSupportedQueryType($recordType)) { |
||
| 56 | return new DNSRecordCollection(); |
||
| 57 | } |
||
| 58 | |||
| 59 | try { |
||
| 60 | $response = ($recordType->equals(DNSRecordType::createANY())) |
||
| 61 | ? $this->dig->getRecords((string) $hostname, self::SUPPORTED_QUERY_TYPES) |
||
| 62 | : $this->dig->getRecords((string) $hostname, (string) $recordType); |
||
| 63 | } catch (Throwable $e) { |
||
| 64 | throw new QueryFailure($e->getMessage(), 0, $e); |
||
| 65 | } |
||
| 66 | |||
| 67 | return $this->mapResults($this->mapper, array_map(fn(Record $record): array => $record->toArray(), $response)); |
||
| 68 | } |
||
| 69 | |||
| 70 | private static function isSupportedQueryType(DNSRecordType $type): bool |
||
| 71 | { |
||
| 72 | if ($type->isA(DNSRecordType::TYPE_ANY)) { |
||
| 73 | return true; |
||
| 74 | } |
||
| 75 | |||
| 76 | foreach (self::SUPPORTED_QUERY_TYPES as $queryType) { |
||
| 77 | if ($type->isA($queryType)) { |
||
| 78 | return true; |
||
| 79 | } |
||
| 80 | } |
||
| 81 | |||
| 82 | return false; |
||
| 83 | } |
||
| 84 | } |
||
| 85 |
The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g.
excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths