OAuthTokenBodyException   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 166
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 7
lcom 0
cbo 1
dl 0
loc 166
ccs 18
cts 18
cp 1
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 26 2
A getErrorCode() 0 4 1
A getErrorDescription() 0 4 1
A getErrorUri() 0 4 1
A getHttpCode() 0 4 1
A getHttpHeaders() 0 4 1
1
<?php declare(strict_types=1);
2
3
namespace Limoncello\OAuthServer\Exceptions;
4
5
/**
6
 * Copyright 2015-2019 [email protected]
7
 *
8
 * Licensed under the Apache License, Version 2.0 (the "License");
9
 * you may not use this file except in compliance with the License.
10
 * You may obtain a copy of the License at
11
 *
12
 * http://www.apache.org/licenses/LICENSE-2.0
13
 *
14
 * Unless required by applicable law or agreed to in writing, software
15
 * distributed under the License is distributed on an "AS IS" BASIS,
16
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
 * See the License for the specific language governing permissions and
18
 * limitations under the License.
19
 */
20
21
use Exception;
22
23
/**
24
 * @package Limoncello\OAuthServer
25
 */
26
class OAuthTokenBodyException extends OAuthServerException
27
{
28
    /**
29
     * Error code.
30
     *
31
     * @link https://tools.ietf.org/html/rfc6749#section-5.2
32
     */
33
    const ERROR_INVALID_REQUEST = 'invalid_request';
34
35
    /**
36
     * Error code.
37
     *
38
     * @link https://tools.ietf.org/html/rfc6749#section-5.2
39
     */
40
    const ERROR_INVALID_CLIENT = 'invalid_client';
41
42
    /**
43
     * Error code.
44
     *
45
     * @link https://tools.ietf.org/html/rfc6749#section-5.2
46
     */
47
    const ERROR_INVALID_GRANT = 'invalid_grant';
48
49
    /**
50
     * Error code.
51
     *
52
     * @link https://tools.ietf.org/html/rfc6749#section-5.2
53
     */
54
    const ERROR_UNAUTHORIZED_CLIENT = 'unauthorized_client';
55
56
    /**
57
     * Error code.
58
     *
59
     * @link https://tools.ietf.org/html/rfc6749#section-5.2
60
     */
61
    const ERROR_UNSUPPORTED_GRANT_TYPE = 'unsupported_grant_type';
62
63
    /**
64
     * Error code.
65
     *
66
     * @link https://tools.ietf.org/html/rfc6749#section-5.2
67
     */
68
    const ERROR_INVALID_SCOPE = 'invalid_scope';
69
70
    /**
71
     * Default error messages.
72
     *
73
     * @link https://tools.ietf.org/html/rfc6749#section-5.2
74
     */
75
    const DEFAULT_MESSAGES = [
76
        self::ERROR_INVALID_REQUEST => 'The request is missing a required parameter, includes an unsupported ' .
77
            'parameter value (other than grant type), repeats a parameter, includes multiple credentials, utilizes ' .
78
            'more than one mechanism for authenticating the client, or is otherwise malformed.',
79
80
        self::ERROR_INVALID_CLIENT => 'Client authentication failed (e.g., unknown client, no client ' .
81
            'authentication included, or unsupported authentication method).',
82
83
        self::ERROR_INVALID_GRANT => 'The provided authorization grant (e.g., authorization code, resource owner ' .
84
            'credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in ' .
85
            'the authorization request, or was issued to another client.',
86
87
        self::ERROR_UNAUTHORIZED_CLIENT => 'The authenticated client is not authorized to use this ' .
88
            'authorization grant type.',
89
90
        self::ERROR_UNSUPPORTED_GRANT_TYPE => 'The authorization grant type is not supported by the ' .
91
            'authorization server.',
92
93
        self::ERROR_INVALID_SCOPE => 'The requested scope is invalid, unknown, malformed, or exceeds the scope ' .
94
            'granted by the resource owner.',
95
    ];
96
97
    /**
98
     * @var string
99
     */
100
    private $errorCode;
101
102
    /**
103
     * @var int
104
     */
105
    private $httpCode;
106
107
    /**
108
     * @var string[]
109
     */
110
    private $httpHeaders;
111
112
    /**
113
     * @var string|null
114
     */
115
    private $errorUri;
116
117
    /**
118
     * @param string         $errorCode
119
     * @param string|null    $errorUri
120
     * @param int            $httpCode
121
     * @param string[]       $httpHeaders
122
     * @param string[]|null  $descriptions
123 19
     * @param Exception|null $previous
124
     */
125
    public function __construct(
126
        string $errorCode,
127
        string $errorUri = null,
128
        int $httpCode = 400,
129
        array $httpHeaders = [],
130
        array $descriptions = null,
131 19
        Exception $previous = null
132
    ) {
133 19
        $descriptions = $descriptions === null ? self::DEFAULT_MESSAGES : $descriptions;
134
135
        parent::__construct($descriptions[$errorCode], 0, $previous);
136
137
        // @link https://tools.ietf.org/html/rfc6749#section-5.2
138
        //
139
        // The authorization server includes the HTTP "Cache-Control" response header field with a value of "no-store"
140 19
        // in response as well as the "Pragma" response header field with a value of "no-cache".
141
        $cacheHeaders = [
142
            'Cache-Control' => 'no-store',
143
            'Pragma'        => 'no-cache'
144 19
        ];
145 19
146 19
        $this->errorCode   = $errorCode;
147 19
        $this->errorUri    = $errorUri;
148
        $this->httpCode    = $httpCode;
149
        $this->httpHeaders = $httpHeaders + $cacheHeaders;
0 ignored issues
show
Documentation Bug introduced by
It seems like $httpHeaders + $cacheHeaders of type array<integer|string,string> is incompatible with the declared type array<integer,string> of property $httpHeaders.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
150
    }
151
152
    /**
153 19
     * @return string
154
     */
155 19
    public function getErrorCode(): string
156
    {
157
        return $this->errorCode;
158
    }
159
160
    /**
161 19
     * @return string
162
     */
163 19
    public function getErrorDescription(): string
164
    {
165
        return $this->getMessage();
166
    }
167
168
    /**
169 19
     * @return string|null
170
     */
171 19
    public function getErrorUri(): ?string
172
    {
173
        return $this->errorUri;
174
    }
175
176
    /**
177 19
     * @return int
178
     */
179 19
    public function getHttpCode(): int
180
    {
181
        return $this->httpCode;
182
    }
183
184
    /**
185 19
     * @return string[]
186
     */
187 19
    public function getHttpHeaders(): array
188
    {
189
        return $this->httpHeaders;
190
    }
191
}
192