Failed Conditions
Push — master ( f0c028...ba72c1 )
by Florent
05:06
created

ClaimCheckerManager   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 75
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
wmc 9
lcom 1
cbo 3
dl 0
loc 75
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 7 2
A create() 0 4 1
A add() 0 11 2
A check() 0 15 4
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * The MIT License (MIT)
7
 *
8
 * Copyright (c) 2014-2017 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 Jose\Component\Checker;
15
16
use Jose\Component\Core\Converter\JsonConverterInterface;
17
use Jose\Component\Core\JWTInterface;
18
19
/**
20
 * Class ClaimCheckerManager.
21
 */
22
final class ClaimCheckerManager
23
{
24
    /**
25
     * @var JsonConverterInterface
26
     */
27
    private $jsonConverter;
28
29
    /**
30
     * @var ClaimCheckerInterface[]
31
     */
32
    private $checkers = [];
33
34
    /**
35
     * ClaimCheckerManager constructor.
36
     *
37
     * @param JsonConverterInterface  $jsonConverter
38
     * @param ClaimCheckerInterface[] $checkers
39
     */
40
    private function __construct(JsonConverterInterface $jsonConverter, array $checkers)
41
    {
42
        $this->jsonConverter = $jsonConverter;
43
        foreach ($checkers as $checker) {
44
            $this->add($checker);
45
        }
46
    }
47
48
    /**
49
     * @param JsonConverterInterface  $jsonConverter
50
     * @param ClaimCheckerInterface[] $checkers
51
     *
52
     * @return ClaimCheckerManager
53
     */
54
    public static function create(JsonConverterInterface $jsonConverter, array $checkers): ClaimCheckerManager
55
    {
56
        return new self($jsonConverter, $checkers);
57
    }
58
59
    /**
60
     * @param ClaimCheckerInterface $checker
61
     *
62
     * @return ClaimCheckerManager
63
     */
64
    private function add(ClaimCheckerInterface $checker): ClaimCheckerManager
65
    {
66
        $claim = $checker->supportedClaim();
67
        if (array_key_exists($claim, $this->checkers)) {
68
            throw new \InvalidArgumentException(sprintf('The claim checker "%s" is already supported.', $claim));
69
        }
70
71
        $this->checkers[$claim] = $checker;
72
73
        return $this;
74
    }
75
76
    /**
77
     * @param JWTInterface $jwt
78
     *
79
     * @return array
80
     */
81
    public function check(JWTInterface $jwt): array
82
    {
83
        $claims = $this->jsonConverter->decode($jwt->getPayload());
84
        if (!is_array($claims)) {
85
            throw new \InvalidArgumentException('The payload is does not contain claims.');
86
        }
87
88
        foreach ($this->checkers as $claim => $checker) {
89
            if (array_key_exists($claim, $claims)) {
90
                $checker->checkClaim($claims[$claim]);
91
            }
92
        }
93
94
        return $claims;
95
    }
96
}
97