updated plugin WP-WebAuthn
version 1.3.1
This commit is contained in:
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2021 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Webauthn\TokenBinding;
|
||||
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
final class IgnoreTokenBindingHandler implements TokenBindingHandler
|
||||
{
|
||||
public function check(TokenBinding $tokenBinding, ServerRequestInterface $request): void
|
||||
{
|
||||
//Does nothing
|
||||
}
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2021 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Webauthn\TokenBinding;
|
||||
|
||||
use Assert\Assertion;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
final class SecTokenBindingHandler implements TokenBindingHandler
|
||||
{
|
||||
public function check(TokenBinding $tokenBinding, ServerRequestInterface $request): void
|
||||
{
|
||||
if (TokenBinding::TOKEN_BINDING_STATUS_PRESENT !== $tokenBinding->getStatus()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Assertion::true($request->hasHeader('Sec-Token-Binding'), 'The header parameter "Sec-Token-Binding" is missing.');
|
||||
$tokenBindingIds = $request->getHeader('Sec-Token-Binding');
|
||||
Assertion::count($tokenBindingIds, 1, 'The header parameter "Sec-Token-Binding" is invalid.');
|
||||
$tokenBindingId = reset($tokenBindingIds);
|
||||
Assertion::eq($tokenBindingId, $tokenBinding->getId(), 'The header parameter "Sec-Token-Binding" is invalid.');
|
||||
}
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2021 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Webauthn\TokenBinding;
|
||||
|
||||
use function array_key_exists;
|
||||
use Assert\Assertion;
|
||||
use Base64Url\Base64Url;
|
||||
use function Safe\sprintf;
|
||||
|
||||
class TokenBinding
|
||||
{
|
||||
public const TOKEN_BINDING_STATUS_PRESENT = 'present';
|
||||
public const TOKEN_BINDING_STATUS_SUPPORTED = 'supported';
|
||||
public const TOKEN_BINDING_STATUS_NOT_SUPPORTED = 'not-supported';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $status;
|
||||
|
||||
/**
|
||||
* @var string|null
|
||||
*/
|
||||
private $id;
|
||||
|
||||
public function __construct(string $status, ?string $id)
|
||||
{
|
||||
Assertion::false(self::TOKEN_BINDING_STATUS_PRESENT === $status && null === $id, 'The member "id" is required when status is "present"');
|
||||
$this->status = $status;
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed[] $json
|
||||
*/
|
||||
public static function createFormArray(array $json): self
|
||||
{
|
||||
Assertion::keyExists($json, 'status', 'The member "status" is required');
|
||||
$status = $json['status'];
|
||||
Assertion::inArray(
|
||||
$status,
|
||||
self::getSupportedStatus(),
|
||||
sprintf('The member "status" is invalid. Supported values are: %s', implode(', ', self::getSupportedStatus()))
|
||||
);
|
||||
$id = array_key_exists('id', $json) ? Base64Url::decode($json['id']) : null;
|
||||
|
||||
return new self($status, $id);
|
||||
}
|
||||
|
||||
public function getStatus(): string
|
||||
{
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
public function getId(): ?string
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
private static function getSupportedStatus(): array
|
||||
{
|
||||
return [
|
||||
self::TOKEN_BINDING_STATUS_PRESENT,
|
||||
self::TOKEN_BINDING_STATUS_SUPPORTED,
|
||||
self::TOKEN_BINDING_STATUS_NOT_SUPPORTED,
|
||||
];
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2021 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Webauthn\TokenBinding;
|
||||
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
interface TokenBindingHandler
|
||||
{
|
||||
public function check(TokenBinding $tokenBinding, ServerRequestInterface $request): void;
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2021 Spomky-Labs
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Webauthn\TokenBinding;
|
||||
|
||||
use Assert\Assertion;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
final class TokenBindingNotSupportedHandler implements TokenBindingHandler
|
||||
{
|
||||
public function check(TokenBinding $tokenBinding, ServerRequestInterface $request): void
|
||||
{
|
||||
Assertion::true(TokenBinding::TOKEN_BINDING_STATUS_PRESENT !== $tokenBinding->getStatus(), 'Token binding not supported.');
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user