Pandabot/vendor/league/uri-components/IPv4Normalizer.php

195 lines
5.5 KiB
PHP
Executable file

<?php
/**
* League.Uri (https://uri.thephpleague.com)
*
* (c) Ignace Nyamagana Butera <nyamsprod@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace League\Uri;
use League\Uri\Components\Host;
use League\Uri\Contracts\AuthorityInterface;
use League\Uri\Contracts\HostInterface;
use League\Uri\Contracts\UriInterface;
use League\Uri\Exceptions\MissingFeature;
use League\Uri\IPv4\Calculator;
use League\Uri\IPv4\Converter;
use Psr\Http\Message\UriInterface as Psr7UriInterface;
use Stringable;
/**
* DEPRECATION WARNING! This class will be removed in the next major point release.
*
* @deprecated Since version 7.0.0
* @see Converter
*
* @codeCoverageIgnore
*/
final class IPv4Normalizer
{
private readonly Converter $converter;
public function __construct(
Converter|Calculator $calculator
) {
if (!$calculator instanceof Converter) {
$calculator = new Converter($calculator);
}
$this->converter = $calculator;
}
/**
* DEPRECATION WARNING! This method will be removed in the next major point release.
*
* @deprecated Since version 7.0.0
* @see Converter::toDecimal()
*
* @codeCoverageIgnore
*
* Normalizes the host content to a IPv4 dot-decimal notation if possible
* otherwise returns the Host instance unchanged.
*
* @see https://url.spec.whatwg.org/#concept-ipv4-parser
*/
public function normalize(Stringable|string|null $host): ?string
{
return $this->converter->toDecimal($host);
}
/**
* Returns an instance using a GMP calculator.
*/
public static function createFromGMP(): self
{
return new self(Converter::fromGMP());
}
/**
* DEPRECATION WARNING! This method will be removed in the next major point release.
*
* @deprecated Since version 7.0.0
* @see Converter::fromBCMath()
*
* @codeCoverageIgnore
*
* Returns an instance using a Bcmath calculator.
*/
public static function createFromBCMath(): self
{
return new self(Converter::fromBCMath());
}
/**
* DEPRECATION WARNING! This method will be removed in the next major point release.
*
* @deprecated Since version 7.0.0
* @see Converter::fromNative()
*
* @codeCoverageIgnore
*
* Returns an instance using a PHP native calculator (requires 64bits PHP).
*/
public static function createFromNative(): self
{
return new self(Converter::fromNative());
}
/**
* DEPRECATION WARNING! This method will be removed in the next major point release.
*
* @throws MissingFeature If no IPv4Calculator implementing object can be used on the platform
*
* @codeCoverageIgnore
*@see Converter::fromEnvironment()
*
* @codeCoverageIgnore
*
* Returns an instance using a detected calculator depending on the PHP environment.
*
* @deprecated Since version 7.0.0
*/
public static function createFromServer(): self
{
return new self(Converter::fromEnvironment());
}
/**
* DEPRECATION WARNING! This method will be removed in the next major point release.
*
* @deprecated Since version 7.0.0
* @see Modifier::hostToDecimal()
*
* @codeCoverageIgnore
*
* Normalizes the URI host content to a IPv4 dot-decimal notation if possible
* otherwise returns the uri instance unchanged.
*
* @see https://url.spec.whatwg.org/#concept-ipv4-parser
*/
public function normalizeUri(UriInterface|Psr7UriInterface $uri): UriInterface|Psr7UriInterface
{
$host = $uri->getHost();
$decimalIPv4 = $this->converter->toDecimal($host);
return match (true) {
null === $decimalIPv4,
$decimalIPv4 === $host => $uri,
default => $uri->withHost($decimalIPv4),
};
}
/**
* DEPRECATION WARNING! This method will be removed in the next major point release.
*
* @deprecated Since version 7.0.0
* @see Modifier::hostToDecimal()
*
* @codeCoverageIgnore
*
* Normalizes the authority host content to a IPv4 dot-decimal notation if possible
* otherwise returns the uri instance unchanged.
*
* @see https://url.spec.whatwg.org/#concept-ipv4-parser
*/
public function normalizeAuthority(AuthorityInterface $authority): AuthorityInterface
{
$host = $authority->getHost();
$decimalIpv4 = $this->converter->toDecimal($host);
return match (true) {
null === $decimalIpv4,
$decimalIpv4 === $host => $authority,
default => $authority->withHost($decimalIpv4),
};
}
/**
* DEPRECATION WARNING! This method will be removed in the next major point release.
*
* @deprecated Since version 7.0.0
* @see Modifier::hostToDecimal()
*
* @codeCoverageIgnore
*
* Normalizes the host content to a IPv4 dot-decimal notation if possible
* otherwise returns the Host instance unchanged.
*
* @see https://url.spec.whatwg.org/#concept-ipv4-parser
*/
public function normalizeHost(HostInterface $host): HostInterface
{
$decimalIPv4 = $this->converter->toDecimal($host->value());
return match (null) {
$decimalIPv4 => $host,
default => Host::new($decimalIPv4),
};
}
}