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.

JWTParameter   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 116
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 4
eloc 70
dl 0
loc 116
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
    public const PARAM_ALGORITHM = 'alg';
19
    public const PARAM_JWK_SET_URL = 'jku';
20
    public const PARAM_JSON_WEB_KEY = 'jwk';
21
    public const PARAM_KEY_ID = 'kid';
22
    public const PARAM_X509_URL = 'x5u';
23
    public const PARAM_X509_CERTIFICATE_CHAIN = 'x5c';
24
    public const PARAM_X509_CERTIFICATE_SHA1_THUMBPRINT = 'x5t';
25
    public const PARAM_X509_CERTIFICATE_SHA256_THUMBPRINT = 'x5t#S256';
26
    public const PARAM_TYPE = 'typ';
27
    public const PARAM_CONTENT_TYPE = 'cty';
28
    public const PARAM_CRITICAL = 'crit';
29
    public const PARAM_ENCRYPTION_ALGORITHM = 'enc';
30
    public const PARAM_COMPRESSION_ALGORITHM = 'zip';
31
    public const PARAM_EPHEMERAL_PUBLIC_KEY = 'epk';
32
    public const PARAM_AGREEMENT_PARTYUINFO = 'apu';
33
    public const PARAM_AGREEMENT_PARTYVINFO = 'apv';
34
    public const PARAM_INITIALIZATION_VECTOR = 'iv';
35
    public const PARAM_AUTHENTICATION_TAG = 'tag';
36
    public const PARAM_PBES2_SALT_INPUT = 'p2s';
37
    public const PARAM_PBES2_COUNT = 'p2c';
38
    public const PARAM_BASE64URL_ENCODE_PAYLOAD = 'b64';
39
40
    // shorthand aliases for parameter names
41
    public const P_ALG = self::PARAM_ALGORITHM;
42
    public const P_JKU = self::PARAM_JWK_SET_URL;
43
    public const P_JWK = self::PARAM_JSON_WEB_KEY;
44
    public const P_KID = self::PARAM_KEY_ID;
45
    public const P_X5U = self::PARAM_X509_URL;
46
    public const P_X5C = self::PARAM_X509_CERTIFICATE_CHAIN;
47
    public const P_X5T = self::PARAM_X509_CERTIFICATE_SHA1_THUMBPRINT;
48
    public const P_X5TS256 = self::PARAM_X509_CERTIFICATE_SHA256_THUMBPRINT;
49
    public const P_TYP = self::PARAM_TYPE;
50
    public const P_CTY = self::PARAM_CONTENT_TYPE;
51
    public const P_CRIT = self::PARAM_CRITICAL;
52
    public const P_ENC = self::PARAM_ENCRYPTION_ALGORITHM;
53
    public const P_ZIP = self::PARAM_COMPRESSION_ALGORITHM;
54
    public const P_EPK = self::PARAM_EPHEMERAL_PUBLIC_KEY;
55
    public const P_APU = self::PARAM_AGREEMENT_PARTYUINFO;
56
    public const P_APV = self::PARAM_AGREEMENT_PARTYVINFO;
57
    public const P_IV = self::PARAM_INITIALIZATION_VECTOR;
58
    public const P_TAG = self::PARAM_AUTHENTICATION_TAG;
59
    public const P_P2S = self::PARAM_PBES2_SALT_INPUT;
60
    public const P_P2C = self::PARAM_PBES2_COUNT;
61
    public 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
    public 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 169
    public function __construct(string $name, $value)
98
    {
99 169
        $this->_name = $name;
100 169
        $this->_value = $value;
101 169
    }
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 54
    public static function fromNameAndValue(string $name, $value): self
112
    {
113 54
        if (array_key_exists($name, self::MAP_NAME_TO_CLASS)) {
114 53
            $cls = self::MAP_NAME_TO_CLASS[$name];
115 53
            return $cls::fromJSONValue($value);
116
        }
117 1
        return new self($name, $value);
118
    }
119
120
    /**
121
     * Initialize from a JSON value.
122
     *
123
     * @param mixed $value
124
     *
125
     * @return JWTParameter
126
     */
127 1
    public static function fromJSONValue($value): Parameter
128
    {
129 1
        throw new \BadMethodCallException(
130 1
            __FUNCTION__ . ' must be implemented in a derived class.');
131
    }
132
}
133