169 lines
4.9 KiB
PHP
Executable File
169 lines
4.9 KiB
PHP
Executable File
<?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\MetadataService;
|
|
|
|
use Assert\Assertion;
|
|
use JsonSerializable;
|
|
use function Safe\sprintf;
|
|
|
|
class VerificationMethodDescriptor implements JsonSerializable
|
|
{
|
|
public const USER_VERIFY_PRESENCE = 0x00000001;
|
|
public const USER_VERIFY_FINGERPRINT = 0x00000002;
|
|
public const USER_VERIFY_PASSCODE = 0x00000004;
|
|
public const USER_VERIFY_VOICEPRINT = 0x00000008;
|
|
public const USER_VERIFY_FACEPRINT = 0x00000010;
|
|
public const USER_VERIFY_LOCATION = 0x00000020;
|
|
public const USER_VERIFY_EYEPRINT = 0x00000040;
|
|
public const USER_VERIFY_PATTERN = 0x00000080;
|
|
public const USER_VERIFY_HANDPRINT = 0x00000100;
|
|
public const USER_VERIFY_NONE = 0x00000200;
|
|
public const USER_VERIFY_ALL = 0x00000400;
|
|
|
|
/**
|
|
* @var int
|
|
*/
|
|
private $userVerification;
|
|
|
|
/**
|
|
* @var CodeAccuracyDescriptor|null
|
|
*/
|
|
private $caDesc;
|
|
|
|
/**
|
|
* @var BiometricAccuracyDescriptor|null
|
|
*/
|
|
private $baDesc;
|
|
|
|
/**
|
|
* @var PatternAccuracyDescriptor|null
|
|
*/
|
|
private $paDesc;
|
|
|
|
public function __construct(int $userVerification, ?CodeAccuracyDescriptor $caDesc = null, ?BiometricAccuracyDescriptor $baDesc = null, ?PatternAccuracyDescriptor $paDesc = null)
|
|
{
|
|
Assertion::greaterOrEqualThan($userVerification, 0, Utils::logicException('The parameter "userVerification" is invalid'));
|
|
$this->userVerification = $userVerification;
|
|
$this->caDesc = $caDesc;
|
|
$this->baDesc = $baDesc;
|
|
$this->paDesc = $paDesc;
|
|
}
|
|
|
|
public function getUserVerification(): int
|
|
{
|
|
return $this->userVerification;
|
|
}
|
|
|
|
public function userPresence(): bool
|
|
{
|
|
return 0 !== ($this->userVerification & self::USER_VERIFY_PRESENCE);
|
|
}
|
|
|
|
public function fingerprint(): bool
|
|
{
|
|
return 0 !== ($this->userVerification & self::USER_VERIFY_FINGERPRINT);
|
|
}
|
|
|
|
public function passcode(): bool
|
|
{
|
|
return 0 !== ($this->userVerification & self::USER_VERIFY_PASSCODE);
|
|
}
|
|
|
|
public function voicePrint(): bool
|
|
{
|
|
return 0 !== ($this->userVerification & self::USER_VERIFY_VOICEPRINT);
|
|
}
|
|
|
|
public function facePrint(): bool
|
|
{
|
|
return 0 !== ($this->userVerification & self::USER_VERIFY_FACEPRINT);
|
|
}
|
|
|
|
public function location(): bool
|
|
{
|
|
return 0 !== ($this->userVerification & self::USER_VERIFY_LOCATION);
|
|
}
|
|
|
|
public function eyePrint(): bool
|
|
{
|
|
return 0 !== ($this->userVerification & self::USER_VERIFY_EYEPRINT);
|
|
}
|
|
|
|
public function pattern(): bool
|
|
{
|
|
return 0 !== ($this->userVerification & self::USER_VERIFY_PATTERN);
|
|
}
|
|
|
|
public function handprint(): bool
|
|
{
|
|
return 0 !== ($this->userVerification & self::USER_VERIFY_HANDPRINT);
|
|
}
|
|
|
|
public function none(): bool
|
|
{
|
|
return 0 !== ($this->userVerification & self::USER_VERIFY_NONE);
|
|
}
|
|
|
|
public function all(): bool
|
|
{
|
|
return 0 !== ($this->userVerification & self::USER_VERIFY_ALL);
|
|
}
|
|
|
|
public function getCaDesc(): ?CodeAccuracyDescriptor
|
|
{
|
|
return $this->caDesc;
|
|
}
|
|
|
|
public function getBaDesc(): ?BiometricAccuracyDescriptor
|
|
{
|
|
return $this->baDesc;
|
|
}
|
|
|
|
public function getPaDesc(): ?PatternAccuracyDescriptor
|
|
{
|
|
return $this->paDesc;
|
|
}
|
|
|
|
public static function createFromArray(array $data): self
|
|
{
|
|
$data = Utils::filterNullValues($data);
|
|
Assertion::keyExists($data, 'userVerification', Utils::logicException('The parameter "userVerification" is missing'));
|
|
Assertion::integer($data['userVerification'], Utils::logicException('The parameter "userVerification" is invalid'));
|
|
foreach (['caDesc', 'baDesc', 'paDesc'] as $key) {
|
|
if (isset($data[$key])) {
|
|
Assertion::isArray($data[$key], Utils::logicException(sprintf('Invalid parameter "%s"', $key)));
|
|
}
|
|
}
|
|
|
|
return new self(
|
|
$data['userVerification'],
|
|
isset($data['caDesc']) ? CodeAccuracyDescriptor::createFromArray($data['caDesc']) : null,
|
|
isset($data['baDesc']) ? BiometricAccuracyDescriptor::createFromArray($data['baDesc']) : null,
|
|
isset($data['paDesc']) ? PatternAccuracyDescriptor::createFromArray($data['paDesc']) : null
|
|
);
|
|
}
|
|
|
|
public function jsonSerialize(): array
|
|
{
|
|
$data = [
|
|
'userVerification' => $this->userVerification,
|
|
'caDesc' => null === $this->caDesc ? null : $this->caDesc->jsonSerialize(),
|
|
'baDesc' => null === $this->baDesc ? null : $this->baDesc->jsonSerialize(),
|
|
'paDesc' => null === $this->paDesc ? null : $this->paDesc->jsonSerialize(),
|
|
];
|
|
|
|
return Utils::filterNullValues($data);
|
|
}
|
|
}
|