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

CheckerManager   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 5
Bugs 3 Features 0
Metric Value
wmc 7
c 5
b 3
f 0
lcom 1
cbo 5
dl 0
loc 74
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A checkJWT() 0 13 2
A checkHeaders() 0 6 2
A checkJWS() 0 11 1
A addClaimChecker() 0 4 1
A addHeaderChecker() 0 4 1
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