Completed
Push — develop ( 686594...b5844e )
by Florent
03:11
created

CheckerManager::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
c 2
b 1
f 0
dl 0
loc 8
rs 9.4285
cc 1
eloc 5
nc 1
nop 0
1
<?php
2
3
/*
4
 * The MIT License (MIT)
5
 *
6
 * Copyright (c) 2014-2016 Spomky-Labs
7
 *
8
 * This software may be modified and distributed under the terms
9
 * of the MIT license.  See the LICENSE file for details.
10
 */
11
12
namespace Jose\Checker;
13
14
use Assert\Assertion;
15
use Jose\Object\JWSInterface;
16
use Jose\Object\JWTInterface;
17
18
/**
19
 * Class CheckerManager.
20
 */
21
class CheckerManager implements CheckerManagerInterface
22
{
23
    /**
24
     * @var \Jose\Checker\ClaimCheckerInterface[]
25
     */
26
    private $claim_checkers = [];
27
28
    /**
29
     * @var \Jose\Checker\HeaderCheckerInterface[]
30
     */
31
    private $header_checkers = [];
32
33
    /**
34
     * @param \Jose\Object\JWTInterface $jwt
35
     *
36
     * @return string[]
37
     */
38
    private function checkJWT(JWTInterface $jwt)
39
    {
40
        $checked_claims = [];
41
42
        foreach ($this->claim_checkers as $claim_checker) {
43
            $checked_claims = array_merge(
44
                $checked_claims,
45
                $claim_checker->checkClaim($jwt)
46
            );
47
        }
48
49
        return $checked_claims;
50
    }
51
52
    /**
53
     * @param array $protected_headers
54
     * @param array $headers
55
     * @param array $checked_claims
56
     */
57
    private function checkHeaders(array $protected_headers, array $headers, array $checked_claims)
58
    {
59
        foreach ($this->header_checkers as $header_checker) {
60
            $header_checker->checkHeader($protected_headers, $headers, $checked_claims);
61
        }
62
    }
63
64
    /**
65
     * {@inheritdoc}
66
     */
67
    public function checkJWS(JWSInterface $jws, $signature)
68
    {
69
        Assertion::integer($signature);
70
        Assertion::lessThan($signature, $jws->countSignatures());
71
72
        $checked_claims = $this->checkJWT($jws);
73
        $protected_headers = $jws->getSignature($signature)->getProtectedHeaders();
74
        $headers = $jws->getSignature($signature)->getHeaders();
75
76
        $this->checkHeaders($protected_headers, $headers, $checked_claims);
77
    }
78
79
    /**
80
     * @param \Jose\Checker\ClaimCheckerInterface $claim_checker
81
     */
82
    public function addClaimChecker(ClaimCheckerInterface $claim_checker)
83
    {
84
        $this->claim_checkers[] = $claim_checker;
85
    }
86
87
    /**
88
     * @param \Jose\Checker\HeaderCheckerInterface $header_checker
89
     */
90
    public function addHeaderChecker(HeaderCheckerInterface $header_checker)
91
    {
92
        $this->header_checkers[] = $header_checker;
93
    }
94
}
95