diff --git a/README.md b/README.md index 34b9e0c..9956b8b 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Network Library for PHP with native Yggdrasil support #### Check socket is open -``` php +``` var_dump( \Yggverse\Net\Socket::isOpen('yo.index', 80) ); @@ -20,7 +20,7 @@ var_dump( #### Check host valid -``` php +``` var_dump( \Yggverse\Net\Socket::isHost('yo.index') ); @@ -28,7 +28,7 @@ var_dump( #### Check port valid -``` php +``` var_dump( \Yggverse\Net\Socket::isPort(80) ); @@ -38,15 +38,15 @@ var_dump( #### Resolve records -``` php +``` var_dump( - \Yggverse\Net\Dig::records('yo.index', ['A', 'AAAA'], &$result = [], &$error = [], $provider = null, $timeout = 5) + \Yggverse\Net\Dig::records('yo.index', ['A', 'AAAA']) ); ``` #### Check hostname valid -``` php +``` var_dump( \Yggverse\Net\Dig::isHostName('yo.index') ); @@ -54,7 +54,7 @@ var_dump( #### Check record valid -``` php +``` var_dump( \Yggverse\Net\Dig::isRecord('A') ); @@ -62,67 +62,12 @@ var_dump( #### Check record value valid -``` php +``` var_dump( \Yggverse\Net\Dig::isRecordValue('A', '127.0.0.1') ); ``` -### Resolve - -#### Init resolver - -``` php -$resolve = new \Yggverse\Net\Resolve( - [ - 'A', - 'AAAA' - ], - [ - '1.1.1.1', - '8.8.8.8' - ], - // .. -); -``` - -#### Get resolved URL string - -``` php -$resolved = $resolve->url( - 'https://en.wikipedia.org/wiki/Domain_Name_System' - // next arguments contain debug variables and new address object -); - -if ($resolved) -{ - var_dump( - $resolved // https://185.15.59.224/wiki/Domain_Name_System - ); -} -``` - -#### Resolve Address object - -``` php -$resolved = $resolve->address( - new \Yggverse\Net\Address( - 'https://en.wikipedia.org/wiki/Domain_Name_System' - ) -); - -if ($resolved) -{ - var_dump( - $resolved->get() // https://185.15.59.224/wiki/Domain_Name_System - ); - - var_dump( - $resolved->getHost() // 185.15.59.224 - ); -} -``` - ### Address Includes methods to work with network addresses. @@ -144,7 +89,7 @@ Different operations with address parts: **Document root** -``` php +``` $base = new \Yggverse\Net\Address( 'http://yo.ygg/a1/b1/c1' ); @@ -162,7 +107,7 @@ var_dump( **Current folder** -``` php +``` $base = new \Yggverse\Net\Address( 'http://yo.ygg/a1/b1/c1' ); @@ -180,7 +125,7 @@ var_dump( **Ending slash** -``` php +``` $base = new \Yggverse\Net\Address( 'http://yo.ygg/a1/b1/c1/' ); @@ -198,7 +143,7 @@ var_dump( **All options** -``` php +``` $base = new \Yggverse\Net\Address( 'http://user:password@yo.ygg/a1/b1/c1?attribute=value#anchor' ); @@ -214,20 +159,7 @@ var_dump( ); ``` -### Valid - -Network entities validation - -**Supported methods** - -* `Valid::ip` -* `Valid::ip4` -* `Valid::ip6` -* `Valid::domainHostName` - ## Integrations -* [gemini-dl](https://github.com/YGGverse/gemini-dl) - CLI batch downloader for Gemini protocol -* [web-api](https://github.com/YGGverse/web-api) - Network API with native Yggdrasil/IPv6 support -* [Yo!](https://github.com/YGGverse/Yo) - Crawler and search engine for different networks -* [Yoda](https://github.com/YGGverse/Yoda) - Experimental PHP-GTK browser for Gemini protocol +* [Network API with native Yggdrasil/IPv6 support](https://github.com/YGGverse/web-api) +* [Yo! Crawler for different networks](https://github.com/YGGverse/Yo) diff --git a/src/Address.php b/src/Address.php index 41d19c6..f8b7e71 100644 --- a/src/Address.php +++ b/src/Address.php @@ -83,9 +83,7 @@ class Address public function isAbsolute(): bool { - return boolval( - $this->_scheme || $this->_host - ); + return ($this->_scheme && $this->_host); } public function isRelative(): bool @@ -200,37 +198,28 @@ class Address $this->_separator = $value; } - public function get( - bool $scheme = true, - bool $user = true, - bool $pass = true, - bool $host = true, - bool $port = true, - bool $path = true, - bool $query = true, - bool $fragment = true, - ): string + public function get(): string { $address = ''; - if ($scheme && $this->getScheme()) + if ($scheme = $this->getScheme()) { $address .= sprintf( '%s:%s%s', - $this->getScheme(), + $scheme, $this->getSeparator(), $this->getSeparator() ); } - if ($user && $this->getUser()) + if ($user = $this->getUser()) { - if ($pass && $this->getPass()) + if ($pass = $this->getPass()) { $address .= sprintf( '%s:%s@', - $this->getUser(), - $this->getPass() + $user, + $pass ); } @@ -238,65 +227,65 @@ class Address { $address .= sprintf( '%s@', - $this->getUser() + $user ); } } - if ($host && $this->getHost()) + if ($host = $this->getHost()) { - $address .= $this->getHost(); + $address .= $host; } - if ($port && $this->getPort()) + if ($port = $this->getPort()) { $address .= sprintf( ':%d', - $this->getPort() + $port ); } - if ($path && $this->getPath()) + if ($path = $this->getPath()) { - if (!str_starts_with($this->getPath(), $this->getSeparator())) + if (!str_starts_with($path, $this->getSeparator())) { $address .= $this->getSeparator(); } - $address .= $this->getPath(); + $address .= $path; } - if ($query && $this->getQuery()) + if ($query = $this->getQuery()) { $address .= sprintf( '?%s', - $this->getQuery() + $query ); } - if ($fragment && $this->getFragment()) + if ($fragment = $this->getFragment()) { $address .= sprintf( '#%s', - $this->getFragment() + $fragment ); } return $address; } - public function toAbsolute( + public function getAbsolute( \Yggverse\Net\Address $base - ): bool + ): ?string { if ($this->isAbsolute()) { - return true; + return $this->get(); } if ($base->isRelative()) { - return false; + return null; } $this->setScheme( @@ -325,7 +314,7 @@ class Address if (str_starts_with((string) $this->getPath(), $this->getSeparator())) { - return true; + return $this->get(); } if ($path = $this->getPath()) @@ -353,7 +342,7 @@ class Address { if (empty($prefix[$index])) { - return false; + return null; } unset( @@ -379,23 +368,8 @@ class Address ) ) ); - - return true; } - return false; - } - - // @TODO deprecated, legacy needs only - public function getAbsolute( - \Yggverse\Net\Address $base - ): ?string - { - if ($this->toAbsolute($base)) - { - return $this->get(); - } - - return null; + return $this->get(); } } \ No newline at end of file diff --git a/src/Dig.php b/src/Dig.php index e8f5ae9..7323f0c 100644 --- a/src/Dig.php +++ b/src/Dig.php @@ -17,59 +17,32 @@ class Dig ]; } - public static function isProvider(mixed $value): bool - { - return - ( - is_string($value) && - false !== filter_var($value, FILTER_VALIDATE_IP) - ); - } - public static function isHostName(mixed $value, array $find = ['_'], array $replace = []): bool { - return ( - is_string($value) && - false !== filter_var(str_replace($find, $replace, $value), FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME) - ); + return is_string($value) && false !== filter_var(str_replace($find, $replace, $value), FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME); } public static function isRecord(mixed $value): bool { - return - ( - is_string($value) && - isset(self::_records()[$value]) - ); + return is_string($value) && isset(self::_records()[$value]); } public static function isRecordValue(mixed $record, mixed $value): bool { - return - ( - is_string($record) && - is_string($value) && - isset(self::_records()[$record]) && self::_records()[$record]($value) - ); + return is_string($record) && + is_string($value) && + isset(self::_records()[$record]) && self::_records()[$record]($value); } - public static function records(string $hostname, array $records, array &$result = [], array &$error = [], ?string $provider = null, int $timeout = 5): array + public static function records(string $hostname, array $records, array &$result = [], array &$error = []): array { - if (self::isProvider($provider)) - { - $provider = sprintf( - '@%s', - $provider - ); - } - if (self::isHostName($hostname)) { foreach ($records as $record) { if (self::isRecord($record)) { - if ($values = exec(sprintf('dig %s %s %s +short +time=%d', (string) $provider, $record, $hostname, $timeout))) + if ($values = exec(sprintf('dig %s %s +short', $record, $hostname))) { foreach (explode(PHP_EOL, $values) as $value) { diff --git a/src/Resolve.php b/src/Resolve.php deleted file mode 100644 index 16f6d7e..0000000 --- a/src/Resolve.php +++ /dev/null @@ -1,204 +0,0 @@ -setRecords( - $records - ); - } - - if ($providers) - { - $this->setProviders( - $providers - ); - } - - if ($timeout) - { - $this->setTimeout( - $timeout - ); - } - - $this->setShuffle( - $shuffle - ); - } - - public function getRecords(): array - { - return $this->_records; - } - - public function setRecords(array $records): void - { - foreach ($records as $record) - { - $this->addRecord( - $record - ); - } - } - - public function addRecord(string $record): void - { - $this->_records[] = $record; - - $this->_records = array_unique( - $this->_records - ); - } - - public function getProviders(): array - { - return $this->_providers; - } - - public function setProviders(array $providers): void - { - foreach ($providers as $provider) - { - $this->addProvider( - $provider - ); - } - } - - public function addProvider(string $provider): void - { - $this->_providers[] = $provider; - - $this->_providers = array_unique( - $this->_providers - ); - } - - public function setTimeout( - int $timeout - ): void - { - $this->_timeout = $timeout; - } - - public function getTimeout(): int - { - return $this->_timeout; - } - - public function setShuffle( - bool $shuffle - ): void - { - $this->_shuffle = $shuffle; - } - - public function isShuffle(): bool - { - return $this->_shuffle; - } - - public function url( - string $url, - array &$result = [], - array &$error = [], - ?\Yggverse\Net\Address &$resolved = null - ): ?string - { - $resolved = $this->address( - new \Yggverse\Net\Address( - $url - ), - $result, - $error - ); - - if ($resolved) - { - return $resolved->get(); - } - - return null; - } - - public function address( - \Yggverse\Net\Address $address, - array &$result = [], - array &$error = [] - ): ?\Yggverse\Net\Address - { - foreach ($this->_providers as $provider) - { - foreach ( - \Yggverse\Net\Dig::records( - $address->getHost(), - $this->_records, - $result, - $error, - $provider, - $this->_timeout - ) as $record => $data - ) { - - if ($this->_shuffle) - { - shuffle( - $data - ); - } - - foreach ($data as $host) - { - if (\Yggverse\Net\Valid::ip6($host)) - { - $address->setHost( - sprintf( - '[%s]', - $host - ) - ); - } - - else - { - $address->setHost( - $host - ); - } - - return $address; - } - } - } - - return null; - } -} \ No newline at end of file diff --git a/src/Valid.php b/src/Valid.php deleted file mode 100644 index 3d80ecc..0000000 --- a/src/Valid.php +++ /dev/null @@ -1,40 +0,0 @@ -