updated plugin WP-WebAuthn version 1.3.4
This commit is contained in:
@ -17,19 +17,14 @@ use JsonSerializable;
|
||||
use League\Uri\Contracts\UriInterface;
|
||||
use League\Uri\Exceptions\SyntaxError;
|
||||
use Psr\Http\Message\UriInterface as Psr7UriInterface;
|
||||
use function is_object;
|
||||
use Stringable;
|
||||
use function is_scalar;
|
||||
use function method_exists;
|
||||
use function sprintf;
|
||||
|
||||
final class Http implements Psr7UriInterface, JsonSerializable
|
||||
{
|
||||
private UriInterface $uri;
|
||||
|
||||
private function __construct(UriInterface $uri)
|
||||
private function __construct(private readonly UriInterface $uri)
|
||||
{
|
||||
$this->validate($uri);
|
||||
$this->uri = $uri;
|
||||
$this->validate($this->uri);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -39,19 +34,18 @@ final class Http implements Psr7UriInterface, JsonSerializable
|
||||
*/
|
||||
private function validate(UriInterface $uri): void
|
||||
{
|
||||
$scheme = $uri->getScheme();
|
||||
if (null === $scheme && '' === $uri->getHost()) {
|
||||
throw new SyntaxError(sprintf('an URI without scheme can not contains a empty host string according to PSR-7: %s', (string) $uri));
|
||||
if (null === $uri->getScheme() && '' === $uri->getHost()) {
|
||||
throw new SyntaxError('An URI without scheme can not contains a empty host string according to PSR-7: '.$uri);
|
||||
}
|
||||
|
||||
$port = $uri->getPort();
|
||||
if (null !== $port && ($port < 0 || $port > 65535)) {
|
||||
throw new SyntaxError(sprintf('The URI port is outside the established TCP and UDP port ranges: %s', (string) $uri->getPort()));
|
||||
throw new SyntaxError('The URI port is outside the established TCP and UDP port ranges: '.$uri);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Static method called by PHP's var export.
|
||||
* @param array{uri:UriInterface} $components
|
||||
*/
|
||||
public static function __set_state(array $components): self
|
||||
{
|
||||
@ -60,10 +54,8 @@ final class Http implements Psr7UriInterface, JsonSerializable
|
||||
|
||||
/**
|
||||
* Create a new instance from a string.
|
||||
*
|
||||
* @param string|mixed $uri
|
||||
*/
|
||||
public static function createFromString($uri = ''): self
|
||||
public static function createFromString(Stringable|UriInterface|String $uri = ''): self
|
||||
{
|
||||
return new self(Uri::createFromString($uri));
|
||||
}
|
||||
@ -91,21 +83,18 @@ final class Http implements Psr7UriInterface, JsonSerializable
|
||||
* Create a new instance from a URI and a Base URI.
|
||||
*
|
||||
* The returned URI must be absolute.
|
||||
*
|
||||
* @param mixed $uri the input URI to create
|
||||
* @param mixed $base_uri the base URI used for reference
|
||||
*/
|
||||
public static function createFromBaseUri($uri, $base_uri = null): self
|
||||
{
|
||||
public static function createFromBaseUri(
|
||||
Stringable|UriInterface|String $uri,
|
||||
Stringable|UriInterface|String $base_uri = null
|
||||
): self {
|
||||
return new self(Uri::createFromBaseUri($uri, $base_uri));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new instance from a URI object.
|
||||
*
|
||||
* @param Psr7UriInterface|UriInterface $uri the input URI to create
|
||||
*/
|
||||
public static function createFromUri($uri): self
|
||||
public static function createFromUri(Psr7UriInterface|UriInterface $uri): self
|
||||
{
|
||||
if ($uri instanceof UriInterface) {
|
||||
return new self($uri);
|
||||
@ -178,145 +167,6 @@ final class Http implements Psr7UriInterface, JsonSerializable
|
||||
return (string) $this->uri->getFragment();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function withScheme($scheme): self
|
||||
{
|
||||
/** @var string $scheme */
|
||||
$scheme = $this->filterInput($scheme);
|
||||
if ('' === $scheme) {
|
||||
$scheme = null;
|
||||
}
|
||||
|
||||
$uri = $this->uri->withScheme($scheme);
|
||||
if ((string) $uri === (string) $this->uri) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
return new self($uri);
|
||||
}
|
||||
|
||||
/**
|
||||
* Safely stringify input when possible.
|
||||
*
|
||||
* @param mixed $str the value to evaluate as a string
|
||||
*
|
||||
* @throws SyntaxError if the submitted data can not be converted to string
|
||||
*
|
||||
* @return string|mixed
|
||||
*/
|
||||
private function filterInput($str)
|
||||
{
|
||||
if (is_scalar($str) || (is_object($str) && method_exists($str, '__toString'))) {
|
||||
return (string) $str;
|
||||
}
|
||||
|
||||
return $str;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function withUserInfo($user, $password = null): self
|
||||
{
|
||||
/** @var string $user */
|
||||
$user = $this->filterInput($user);
|
||||
if ('' === $user) {
|
||||
$user = null;
|
||||
}
|
||||
|
||||
$uri = $this->uri->withUserInfo($user, $password);
|
||||
if ((string) $uri === (string) $this->uri) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
return new self($uri);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function withHost($host): self
|
||||
{
|
||||
/** @var string $host */
|
||||
$host = $this->filterInput($host);
|
||||
if ('' === $host) {
|
||||
$host = null;
|
||||
}
|
||||
|
||||
$uri = $this->uri->withHost($host);
|
||||
if ((string) $uri === (string) $this->uri) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
return new self($uri);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function withPort($port): self
|
||||
{
|
||||
$uri = $this->uri->withPort($port);
|
||||
if ((string) $uri === (string) $this->uri) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
return new self($uri);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function withPath($path): self
|
||||
{
|
||||
$uri = $this->uri->withPath($path);
|
||||
if ((string) $uri === (string) $this->uri) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
return new self($uri);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function withQuery($query): self
|
||||
{
|
||||
/** @var string $query */
|
||||
$query = $this->filterInput($query);
|
||||
if ('' === $query) {
|
||||
$query = null;
|
||||
}
|
||||
|
||||
$uri = $this->uri->withQuery($query);
|
||||
if ((string) $uri === (string) $this->uri) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
return new self($uri);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function withFragment($fragment): self
|
||||
{
|
||||
/** @var string $fragment */
|
||||
$fragment = $this->filterInput($fragment);
|
||||
if ('' === $fragment) {
|
||||
$fragment = null;
|
||||
}
|
||||
|
||||
$uri = $this->uri->withFragment($fragment);
|
||||
if ((string) $uri === (string) $this->uri) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
return new self($uri);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@ -332,4 +182,88 @@ final class Http implements Psr7UriInterface, JsonSerializable
|
||||
{
|
||||
return $this->uri->__toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Safely stringify input when possible for League UriInterface compatibility.
|
||||
*
|
||||
* @throws SyntaxError
|
||||
*/
|
||||
private function filterInput(mixed $str): string|null
|
||||
{
|
||||
if (!is_scalar($str) && !$str instanceof Stringable) {
|
||||
throw new SyntaxError('The component must be a string, a scalar or a Stringable object; `'.gettype($str).'` given.');
|
||||
}
|
||||
|
||||
$str = (string) $str;
|
||||
if ('' === $str) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $str;
|
||||
}
|
||||
|
||||
private function newInstance(UriInterface $uri): self
|
||||
{
|
||||
if ((string) $uri === (string) $this->uri) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
return new self($uri);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function withScheme($scheme): self
|
||||
{
|
||||
return $this->newInstance($this->uri->withScheme($this->filterInput($scheme)));
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function withUserInfo($user, $password = null): self
|
||||
{
|
||||
return $this->newInstance($this->uri->withUserInfo($this->filterInput($user), $password));
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function withHost($host): self
|
||||
{
|
||||
return $this->newInstance($this->uri->withHost($this->filterInput($host)));
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function withPort($port): self
|
||||
{
|
||||
return $this->newInstance($this->uri->withPort($port));
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function withPath($path): self
|
||||
{
|
||||
return $this->newInstance($this->uri->withPath($path));
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function withQuery($query): self
|
||||
{
|
||||
return $this->newInstance($this->uri->withQuery($this->filterInput($query)));
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function withFragment($fragment): self
|
||||
{
|
||||
return $this->newInstance($this->uri->withFragment($this->filterInput($fragment)));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user