GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Branch php72 (880eb0)
by Joni
05:58
created

JWTParameter   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 118
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 4
eloc 70
dl 0
loc 118
ccs 12
cts 12
cp 1
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A fromNameAndValue() 0 7 2
A fromJSONValue() 0 4 1
1
<?php
2
3
declare(strict_types = 1);
4
5
namespace Sop\JWX\JWT\Parameter;
6
7
use Sop\JWX\Parameter\Parameter;
8
9
/**
10
 * Represents a header parameter.
11
 *
12
 * @see https://tools.ietf.org/html/rfc7519#section-5
13
 * @see http://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-header-parameters
14
 */
15
class JWTParameter extends Parameter
16
{
17
    // registered parameter names
18
    const PARAM_ALGORITHM = 'alg';
19
    const PARAM_JWK_SET_URL = 'jku';
20
    const PARAM_JSON_WEB_KEY = 'jwk';
21
    const PARAM_KEY_ID = 'kid';
22
    const PARAM_X509_URL = 'x5u';
23
    const PARAM_X509_CERTIFICATE_CHAIN = 'x5c';
24
    const PARAM_X509_CERTIFICATE_SHA1_THUMBPRINT = 'x5t';
25
    const PARAM_X509_CERTIFICATE_SHA256_THUMBPRINT = 'x5t#S256';
26
    const PARAM_TYPE = 'typ';
27
    const PARAM_CONTENT_TYPE = 'cty';
28
    const PARAM_CRITICAL = 'crit';
29
    const PARAM_ENCRYPTION_ALGORITHM = 'enc';
30
    const PARAM_COMPRESSION_ALGORITHM = 'zip';
31
    const PARAM_EPHEMERAL_PUBLIC_KEY = 'epk';
32
    const PARAM_AGREEMENT_PARTYUINFO = 'apu';
33
    const PARAM_AGREEMENT_PARTYVINFO = 'apv';
34
    const PARAM_INITIALIZATION_VECTOR = 'iv';
35
    const PARAM_AUTHENTICATION_TAG = 'tag';
36
    const PARAM_PBES2_SALT_INPUT = 'p2s';
37
    const PARAM_PBES2_COUNT = 'p2c';
38
    const PARAM_BASE64URL_ENCODE_PAYLOAD = 'b64';
39
40
    // shorthand aliases for parameter names
41
    const P_ALG = self::PARAM_ALGORITHM;
42
    const P_JKU = self::PARAM_JWK_SET_URL;
43
    const P_JWK = self::PARAM_JSON_WEB_KEY;
44
    const P_KID = self::PARAM_KEY_ID;
45
    const P_X5U = self::PARAM_X509_URL;
46
    const P_X5C = self::PARAM_X509_CERTIFICATE_CHAIN;
47
    const P_X5T = self::PARAM_X509_CERTIFICATE_SHA1_THUMBPRINT;
48
    const P_X5TS256 = self::PARAM_X509_CERTIFICATE_SHA256_THUMBPRINT;
49
    const P_TYP = self::PARAM_TYPE;
50
    const P_CTY = self::PARAM_CONTENT_TYPE;
51
    const P_CRIT = self::PARAM_CRITICAL;
52
    const P_ENC = self::PARAM_ENCRYPTION_ALGORITHM;
53
    const P_ZIP = self::PARAM_COMPRESSION_ALGORITHM;
54
    const P_EPK = self::PARAM_EPHEMERAL_PUBLIC_KEY;
55
    const P_APU = self::PARAM_AGREEMENT_PARTYUINFO;
56
    const P_APV = self::PARAM_AGREEMENT_PARTYVINFO;
57
    const P_IV = self::PARAM_INITIALIZATION_VECTOR;
58
    const P_TAG = self::PARAM_AUTHENTICATION_TAG;
59
    const P_P2S = self::PARAM_PBES2_SALT_INPUT;
60
    const P_P2C = self::PARAM_PBES2_COUNT;
61
    const P_B64 = self::PARAM_BASE64URL_ENCODE_PAYLOAD;
62
63
    /**
64
     * Mapping from registered JWT parameter name to class name.
65
     *
66
     * @internal
67
     *
68
     * @var array
69
     */
70
    const MAP_NAME_TO_CLASS = [
71
        self::P_ALG => AlgorithmParameter::class,
72
        self::P_JKU => JWKSetURLParameter::class,
73
        self::P_JWK => JSONWebKeyParameter::class,
74
        self::P_KID => KeyIDParameter::class,
75
        self::P_X5U => X509URLParameter::class,
76
        self::P_X5C => X509CertificateChainParameter::class,
77
        self::P_X5T => X509CertificateSHA1ThumbprintParameter::class,
78
        self::P_X5TS256 => X509CertificateSHA256ThumbprintParameter::class,
79
        self::P_TYP => TypeParameter::class,
80
        self::P_CTY => ContentTypeParameter::class,
81
        self::P_CRIT => CriticalParameter::class,
82
        self::P_ENC => EncryptionAlgorithmParameter::class,
83
        self::P_ZIP => CompressionAlgorithmParameter::class,
84
        self::P_IV => InitializationVectorParameter::class,
85
        self::P_TAG => AuthenticationTagParameter::class,
86
        self::P_P2S => PBES2SaltInputParameter::class,
87
        self::P_P2C => PBES2CountParameter::class,
88
        self::P_B64 => B64PayloadParameter::class,
89
    ];
90
91
    /**
92
     * Constructor.
93
     *
94
     * @param string $name  Parameter name
95
     * @param mixed  $value Parameter value
96
     */
97 168
    public function __construct(string $name, $value)
98
    {
99 168
        $this->_name = $name;
100 168
        $this->_value = $value;
101 168
    }
102
103
    /**
104
     * Initialize from a name and a value.
105
     *
106
     * Returns a parameter specific object if one is implemented.
107
     *
108
     * @param string $name  Parameter name
109
     * @param mixed  $value Parameter value
110
     *
111
     * @return self
112
     */
113 53
    public static function fromNameAndValue(string $name, $value): self
114
    {
115 53
        if (array_key_exists($name, self::MAP_NAME_TO_CLASS)) {
116 52
            $cls = self::MAP_NAME_TO_CLASS[$name];
117 52
            return $cls::fromJSONValue($value);
118
        }
119 1
        return new self($name, $value);
120
    }
121
122
    /**
123
     * Initialize from a JSON value.
124
     *
125
     * @param mixed $value
126
     *
127
     * @return JWTParameter
128
     */
129 1
    public static function fromJSONValue($value): Parameter
130
    {
131 1
        throw new \BadMethodCallException(
132 1
            __FUNCTION__ . ' must be implemented in a derived class.');
133
    }
134
}
135