Обновление клиента (apps, 3rdparty, install)
This commit is contained in:
+50
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Webauthn\AuthenticationExtensions;
|
||||
|
||||
use JsonSerializable;
|
||||
|
||||
class AuthenticationExtension implements JsonSerializable
|
||||
{
|
||||
public function __construct(
|
||||
public readonly string $name,
|
||||
public readonly mixed $value
|
||||
) {
|
||||
}
|
||||
|
||||
public static function create(string $name, mixed $value): self
|
||||
{
|
||||
return new self($name, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated since 4.7.0. Please use the property directly.
|
||||
* @infection-ignore-all
|
||||
*/
|
||||
public function name(): string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated since 4.7.0. Please use the property directly.
|
||||
* @infection-ignore-all
|
||||
*/
|
||||
public function value(): mixed
|
||||
{
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
public function jsonSerialize(): mixed
|
||||
{
|
||||
trigger_deprecation(
|
||||
'web-auth/webauthn-bundle',
|
||||
'4.9.0',
|
||||
'The "%s" method is deprecated and will be removed in 5.0. Please use the serializer instead.',
|
||||
__METHOD__
|
||||
);
|
||||
return $this->value;
|
||||
}
|
||||
}
|
||||
+164
@@ -0,0 +1,164 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Webauthn\AuthenticationExtensions;
|
||||
|
||||
use ArrayAccess;
|
||||
use ArrayIterator;
|
||||
use Countable;
|
||||
use Iterator;
|
||||
use IteratorAggregate;
|
||||
use JsonSerializable;
|
||||
use Webauthn\Exception\AuthenticationExtensionException;
|
||||
use function array_key_exists;
|
||||
use function count;
|
||||
use function is_string;
|
||||
use const COUNT_NORMAL;
|
||||
|
||||
/**
|
||||
* @implements IteratorAggregate<AuthenticationExtension>
|
||||
* @final
|
||||
*/
|
||||
class AuthenticationExtensions implements JsonSerializable, Countable, IteratorAggregate, ArrayAccess
|
||||
{
|
||||
/**
|
||||
* @var array<string, AuthenticationExtension>
|
||||
* @readonly
|
||||
*/
|
||||
public array $extensions;
|
||||
|
||||
/**
|
||||
* @param array<array-key, mixed|AuthenticationExtension> $extensions
|
||||
*/
|
||||
public function __construct(array $extensions = [])
|
||||
{
|
||||
$list = [];
|
||||
foreach ($extensions as $key => $extension) {
|
||||
if ($extension instanceof AuthenticationExtension) {
|
||||
$list[$extension->name] = $extension;
|
||||
|
||||
continue;
|
||||
}
|
||||
if (is_string($key)) {
|
||||
$list[$key] = AuthenticationExtension::create($key, $extension);
|
||||
continue;
|
||||
}
|
||||
throw new AuthenticationExtensionException('Invalid extension');
|
||||
}
|
||||
$this->extensions = $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<array-key, AuthenticationExtension> $extensions
|
||||
*/
|
||||
public static function create(array $extensions = []): static
|
||||
{
|
||||
return new static($extensions);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated since 4.7.0. Please use the property directly.
|
||||
* @infection-ignore-all
|
||||
*/
|
||||
public function add(AuthenticationExtension ...$extensions): static
|
||||
{
|
||||
foreach ($extensions as $extension) {
|
||||
$this->extensions[$extension->name] = $extension;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $json
|
||||
* @deprecated since 4.8.0. Please use {Webauthn\Denormalizer\WebauthnSerializerFactory} for converting the object.
|
||||
* @infection-ignore-all
|
||||
*/
|
||||
public static function createFromArray(array $json): static
|
||||
{
|
||||
return static::create(
|
||||
array_map(
|
||||
static fn (string $key, mixed $value): AuthenticationExtension => AuthenticationExtension::create(
|
||||
$key,
|
||||
$value
|
||||
),
|
||||
array_keys($json),
|
||||
$json
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public function has(string $key): bool
|
||||
{
|
||||
return array_key_exists($key, $this->extensions);
|
||||
}
|
||||
|
||||
public function get(string $key): AuthenticationExtension
|
||||
{
|
||||
$this->has($key) || throw AuthenticationExtensionException::create(sprintf(
|
||||
'The extension with key "%s" is not available',
|
||||
$key
|
||||
));
|
||||
|
||||
return $this->extensions[$key];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, AuthenticationExtension>
|
||||
*/
|
||||
public function jsonSerialize(): array
|
||||
{
|
||||
trigger_deprecation(
|
||||
'web-auth/webauthn-bundle',
|
||||
'4.9.0',
|
||||
'The "%s" method is deprecated and will be removed in 5.0. Please use the serializer instead.',
|
||||
__METHOD__
|
||||
);
|
||||
return $this->extensions;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Iterator<string, AuthenticationExtension>
|
||||
*/
|
||||
public function getIterator(): Iterator
|
||||
{
|
||||
return new ArrayIterator($this->extensions);
|
||||
}
|
||||
|
||||
public function count(int $mode = COUNT_NORMAL): int
|
||||
{
|
||||
return count($this->extensions, $mode);
|
||||
}
|
||||
|
||||
public function offsetExists(mixed $offset): bool
|
||||
{
|
||||
return array_key_exists($offset, $this->extensions);
|
||||
}
|
||||
|
||||
public function offsetGet(mixed $offset): mixed
|
||||
{
|
||||
return $this->extensions[$offset];
|
||||
}
|
||||
|
||||
public function offsetSet(mixed $offset, mixed $value): void
|
||||
{
|
||||
if ($value === null) {
|
||||
return;
|
||||
}
|
||||
if ($value instanceof AuthenticationExtension) {
|
||||
$this->extensions[$value->name] = $value;
|
||||
return;
|
||||
}
|
||||
if (is_string($offset)) {
|
||||
$this->extensions[$offset] = AuthenticationExtension::create($offset, $value);
|
||||
return;
|
||||
}
|
||||
throw new AuthenticationExtensionException('Invalid extension');
|
||||
}
|
||||
|
||||
public function offsetUnset(mixed $offset): void
|
||||
{
|
||||
unset($this->extensions[$offset]);
|
||||
}
|
||||
}
|
||||
3rdparty/web-auth/webauthn-lib/src/AuthenticationExtensions/AuthenticationExtensionsClientInputs.php
Vendored
+12
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Webauthn\AuthenticationExtensions;
|
||||
|
||||
/**
|
||||
* @deprecated since 4.8.0. Use {Webauthn\AuthenticationExtensions\AuthenticationExtensions} instead.
|
||||
*/
|
||||
class AuthenticationExtensionsClientInputs extends AuthenticationExtensions
|
||||
{
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Webauthn\AuthenticationExtensions;
|
||||
|
||||
/**
|
||||
* @deprecated since 4.8.0. Use {Webauthn\AuthenticationExtensions\AuthenticationExtensions} instead.
|
||||
*/
|
||||
class AuthenticationExtensionsClientOutputs extends AuthenticationExtensions
|
||||
{
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Webauthn\AuthenticationExtensions;
|
||||
|
||||
use CBOR\CBORObject;
|
||||
use CBOR\MapObject;
|
||||
use Webauthn\Exception\AuthenticationExtensionException;
|
||||
|
||||
abstract class AuthenticationExtensionsClientOutputsLoader
|
||||
{
|
||||
public static function load(CBORObject $object): AuthenticationExtensions
|
||||
{
|
||||
$object instanceof MapObject || throw AuthenticationExtensionException::create('Invalid extension object');
|
||||
$data = $object->normalize();
|
||||
return AuthenticationExtensionsClientOutputs::create(
|
||||
array_map(
|
||||
fn (mixed $value, string $key) => AuthenticationExtension::create($key, $value),
|
||||
$data,
|
||||
array_keys($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Webauthn\AuthenticationExtensions;
|
||||
|
||||
interface ExtensionOutputChecker
|
||||
{
|
||||
public function check(AuthenticationExtensions $inputs, AuthenticationExtensions $outputs): void;
|
||||
}
|
||||
Vendored
+30
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Webauthn\AuthenticationExtensions;
|
||||
|
||||
class ExtensionOutputCheckerHandler
|
||||
{
|
||||
/**
|
||||
* @var ExtensionOutputChecker[]
|
||||
*/
|
||||
private array $checkers = [];
|
||||
|
||||
public static function create(): self
|
||||
{
|
||||
return new self();
|
||||
}
|
||||
|
||||
public function add(ExtensionOutputChecker $checker): void
|
||||
{
|
||||
$this->checkers[] = $checker;
|
||||
}
|
||||
|
||||
public function check(AuthenticationExtensions $inputs, AuthenticationExtensions $outputs): void
|
||||
{
|
||||
foreach ($this->checkers as $checker) {
|
||||
$checker->check($inputs, $outputs);
|
||||
}
|
||||
}
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Webauthn\AuthenticationExtensions;
|
||||
|
||||
use Exception;
|
||||
use Throwable;
|
||||
|
||||
class ExtensionOutputError extends Exception
|
||||
{
|
||||
public function __construct(
|
||||
public readonly AuthenticationExtension $authenticationExtension,
|
||||
string $message = '',
|
||||
int $code = 0,
|
||||
Throwable $previous = null
|
||||
) {
|
||||
parent::__construct($message, $code, $previous);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated since 4.7.0. Please use the property directly.
|
||||
* @infection-ignore-all
|
||||
*/
|
||||
public function getAuthenticationExtension(): AuthenticationExtension
|
||||
{
|
||||
return $this->authenticationExtension;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user