Failed Conditions
Push — master ( ed7204...c7c4bc )
by Florent
01:40
created

AttestationStatementSupportManager::get()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 3
nc 2
nop 1
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * The MIT License (MIT)
7
 *
8
 * Copyright (c) 2014-2018 Spomky-Labs
9
 *
10
 * This software may be modified and distributed under the terms
11
 * of the MIT license.  See the LICENSE file for details.
12
 */
13
14
namespace U2FAuthentication\Fido2\AttestationStatement;
15
16
use U2FAuthentication\Fido2\AuthenticatorData;
17
use U2FAuthentication\Fido2\CollectedClientData;
18
19
class AttestationStatementSupportManager
20
{
21
    /**
22
     * @var AttestationStatementSupport[]
23
     */
24
    private $attestationStatementSupports = [];
25
26
    public function add(AttestationStatementSupport $attestationStatementSupport)
27
    {
28
        $this->attestationStatementSupports[$attestationStatementSupport->name()] = $attestationStatementSupport;
29
    }
30
31
    public function has(string $name): bool
32
    {
33
        return array_key_exists($name, $this->attestationStatementSupports);
34
    }
35
36
    public function get(string $name): AttestationStatementSupport
37
    {
38
        if (!$this->has($name)) {
39
            throw new \InvalidArgumentException(sprintf('The attestation statement format "%s" is not supported.', name));
0 ignored issues
show
Bug introduced by
The constant U2FAuthentication\Fido2\AttestationStatement\name was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
40
        }
41
42
        return $this->attestationStatementSupports[$name];
43
    }
44
45
    public function isValid(AttestationStatement $attestationStatement, AuthenticatorData $authenticatorData, CollectedClientData $collectedClientData): bool
46
    {
47
        $fmt = $attestationStatement->getFmt();
48
        if (!array_key_exists($fmt, $this->attestationStatementSupports)) {
49
            throw new \InvalidArgumentException(sprintf('The attestation format "%s" is not supported.', $fmt));
50
        }
51
52
        return $this->attestationStatementSupports[$fmt]->isValid($attestationStatement, $authenticatorData, $collectedClientData);
53
    }
54
}
55