Completed
Push — master ( ce5be5...cd6056 )
by Florent
02:40
created

CheckerManager::checkJWS()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 11
rs 9.4285
cc 1
eloc 7
nc 1
nop 2
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\JWEInterface;
16
use Jose\Object\JWSInterface;
17
use Jose\Object\JWTInterface;
18
19
/**
20
 * Class CheckerManager.
21
 */
22
class CheckerManager implements CheckerManagerInterface
23
{
24
    /**
25
     * @var \Jose\Checker\ClaimCheckerInterface[]
26
     */
27
    private $claim_checkers = [];
28
29
    /**
30
     * @var \Jose\Checker\HeaderCheckerInterface[]
31
     */
32
    private $header_checkers = [];
33
34
    /**
35
     * ClaimCheckerManager constructor.
36
     */
37
    public function __construct()
38
    {
39
        $this->claim_checkers = [
40
            new ExpirationTimeChecker(),
41
            new IssuedAtChecker(),
42
            new NotBeforeChecker(),
43
        ];
44
    }
45
46
    /**
47
     * @param \Jose\Object\JWTInterface $jwt
48
     *
49
     * @return string[]
50
     */
51
    private function checkJWT(JWTInterface $jwt)
52
    {
53
        $checked_claims = [];
54
55
        foreach ($this->claim_checkers as $claim_checker) {
56
            $checked_claims = array_merge(
57
                $checked_claims,
58
                $claim_checker->checkClaim($jwt)
59
            );
60
        }
61
62
        return $checked_claims;
63
    }
64
65
    /**
66
     * @param array $protected_headers
67
     * @param array $headers
68
     * @param array $checked_claims
69
     */
70
    private function checkHeaders(array $protected_headers, array $headers, array $checked_claims)
71
    {
72
        foreach ($this->header_checkers as $header_checker) {
73
            $header_checker->checkHeader($protected_headers, $headers, $checked_claims);
74
        }
75
    }
76
77
    /**
78
     * {@inheritdoc}
79
     */
80
    public function checkJWS(JWSInterface $jws, $signature)
81
    {
82
        Assertion::integer($signature);
83
        Assertion::lessThan($signature, $jws->countSignatures());
84
85
        $checked_claims = $this->checkJWT($jws);
86
        $protected_headers = $jws->getSignature($signature)->getProtectedHeaders();
87
        $headers = $jws->getSignature($signature)->getHeaders();
88
89
        $this->checkHeaders($protected_headers, $headers, $checked_claims);
90
    }
91
92
    /**
93
     * {@inheritdoc}
94
     */
95
    public function checkJWE(JWEInterface $jwe, $recipient)
96
    {
97
        Assertion::integer($recipient);
98
        Assertion::lessThan($recipient, $jwe->countRecipients());
99
100
        $checked_claims = $this->checkJWT($jwe);
101
        $protected_headers = $jwe->getSharedProtectedHeaders();
102
        $headers = array_merge(
103
            $jwe->getSharedHeaders(),
104
            $jwe->getRecipient($recipient)->getHeaders()
105
        );
106
107
        $this->checkHeaders($protected_headers, $headers, $checked_claims);
108
    }
109
110
    /**
111
     * @param \Jose\Checker\ClaimCheckerInterface $claim_checker
112
     */
113
    public function addClaimChecker(ClaimCheckerInterface $claim_checker)
114
    {
115
        $this->claim_checkers[] = $claim_checker;
116
    }
117
118
    /**
119
     * @param \Jose\Checker\HeaderCheckerInterface $header_checker
120
     */
121
    public function addHeaderChecker(HeaderCheckerInterface $header_checker)
122
    {
123
        $this->header_checkers[] = $header_checker;
124
    }
125
}
126