Completed
Push — add-pleio-mod ( 6d68a5 )
by
unknown
28:07
created

Provider   A

Complexity

Total Complexity 20

Size/Duplication

Total Lines 196
Duplicated Lines 0 %

Coupling/Cohesion

Components 5
Dependencies 1

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
dl 0
loc 196
rs 10
c 0
b 0
f 0
ccs 0
cts 76
cp 0
wmc 20
lcom 5
cbo 1

13 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 16 2
A getConfigurableOptions() 0 12 1
A getRequiredOptions() 0 4 1
A assertRequiredOptions() 0 10 2
A getBaseAuthorizationUrl() 0 4 1
A getBaseAccessTokenUrl() 0 4 1
A getResourceOwnerDetailsUrl() 0 4 1
A getDefaultScopes() 0 4 1
A getAccessTokenMethod() 0 4 2
A getAccessTokenResourceOwnerId() 0 4 2
A getScopeSeparator() 0 4 2
A checkResponse() 0 8 3
A createResourceOwner() 0 4 1
1
<?php
2
namespace ModPleio;
3
4
require_once(dirname(__FILE__) . "/../../vendor/autoload.php");
5
6
use InvalidArgumentException;
7
use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
8
use League\OAuth2\Client\Provider\AbstractProvider;
9
use League\OAuth2\Client\Token\AccessToken;
10
use League\OAuth2\Client\Tool\BearerAuthorizationTrait;
11
use Psr\Http\Message\ResponseInterface;
12
13
class Provider extends AbstractProvider {
14
    use BearerAuthorizationTrait;
15
16
    /**
17
     * @var string
18
     */
19
    private $urlAuthorize;
0 ignored issues
show
Unused Code introduced by
The property $urlAuthorize is not used and could be removed.

This check marks private properties in classes that are never used. Those properties can be removed.

Loading history...
20
21
    /**
22
     * @var string
23
     */
24
    private $urlAccessToken;
0 ignored issues
show
Unused Code introduced by
The property $urlAccessToken is not used and could be removed.

This check marks private properties in classes that are never used. Those properties can be removed.

Loading history...
25
26
    /**
27
     * @var string
28
     */
29
    private $urlResourceOwnerDetails;
0 ignored issues
show
Unused Code introduced by
The property $urlResourceOwnerDetails is not used and could be removed.

This check marks private properties in classes that are never used. Those properties can be removed.

Loading history...
30
31
    /**
32
     * @var string
33
     */
34
    private $accessTokenMethod;
35
36
    /**
37
     * @var string
38
     */
39
    private $accessTokenResourceOwnerId;
40
41
    /**
42
     * @var array|null
43
     */
44
    private $scopes = null;
45
46
    /**
47
     * @var string
48
     */
49
    private $scopeSeparator;
50
51
    /**
52
     * @var string
53
     */
54
    private $responseError = 'error';
55
56
    /**
57
     * @var string
58
     */
59
    private $responseCode;
60
61
    /**
62
     * @var string
63
     */
64
    private $responseResourceOwnerId = 'id';
65
66
    /**
67
     * @param array $options
68
     * @param array $collaborators
69
     */
70
    public function __construct(array $options = [], array $collaborators = [])
71
    {
72
        $this->assertRequiredOptions($options);
73
74
        $possible   = $this->getConfigurableOptions();
75
        $configured = array_intersect_key($options, array_flip($possible));
76
77
        foreach ($configured as $key => $value) {
78
            $this->$key = $value;
79
        }
80
81
        // Remove all options that are only used locally
82
        $options = array_diff_key($options, $configured);
83
84
        parent::__construct($options, $collaborators);
85
    }
86
87
    /**
88
     * Returns all options that can be configured.
89
     *
90
     * @return array
91
     */
92
    protected function getConfigurableOptions()
93
    {
94
        return array_merge($this->getRequiredOptions(), [
95
            'accessTokenMethod',
96
            'accessTokenResourceOwnerId',
97
            'scopeSeparator',
98
            'responseError',
99
            'responseCode',
100
            'responseResourceOwnerId',
101
            'scopes',
102
        ]);
103
    }
104
105
    /**
106
     * Returns all options that are required.
107
     *
108
     * @return array
109
     */
110
    protected function getRequiredOptions()
111
    {
112
        return ['url'];
113
    }
114
115
    /**
116
     * Verifies that all required options have been passed.
117
     *
118
     * @param  array $options
119
     * @return void
120
     * @throws InvalidArgumentException
121
     */
122
    private function assertRequiredOptions(array $options)
123
    {
124
        $missing = array_diff_key(array_flip($this->getRequiredOptions()), $options);
125
126
        if (!empty($missing)) {
127
            throw new InvalidArgumentException(
128
                'Required options not defined: ' . implode(', ', array_keys($missing))
129
            );
130
        }
131
    }
132
133
    /**
134
     * @inheritdoc
135
     */
136
    public function getBaseAuthorizationUrl()
137
    {
138
        return $this->url . "oauth/v2/authorize";
139
    }
140
141
    /**
142
     * @inheritdoc
143
     */
144
    public function getBaseAccessTokenUrl(array $params)
145
    {
146
        return $this->url . "oauth/v2/token";
147
    }
148
149
    /**
150
     * @inheritdoc
151
     */
152
    public function getResourceOwnerDetailsUrl(AccessToken $token)
153
    {
154
        return $this->url . "api/users/me";
155
    }
156
157
    /**
158
     * @inheritdoc
159
     */
160
    public function getDefaultScopes()
161
    {
162
        return $this->scopes;
163
    }
164
165
    /**
166
     * @inheritdoc
167
     */
168
    protected function getAccessTokenMethod()
169
    {
170
        return $this->accessTokenMethod ?: parent::getAccessTokenMethod();
171
    }
172
173
    /**
174
     * @inheritdoc
175
     */
176
    protected function getAccessTokenResourceOwnerId()
177
    {
178
        return $this->accessTokenResourceOwnerId ?: parent::getAccessTokenResourceOwnerId();
179
    }
180
181
    /**
182
     * @inheritdoc
183
     */
184
    protected function getScopeSeparator()
185
    {
186
        return $this->scopeSeparator ?: parent::getScopeSeparator();
187
    }
188
189
    /**
190
     * @inheritdoc
191
     */
192
    protected function checkResponse(ResponseInterface $response, $data)
193
    {
194
        if (!empty($data[$this->responseError])) {
195
            $error = $data[$this->responseError];
196
            $code  = $this->responseCode ? $data[$this->responseCode] : 0;
197
            throw new IdentityProviderException($error, $code, $data);
198
        }
199
    }
200
201
    /**
202
     * @inheritdoc
203
     */
204
    protected function createResourceOwner(array $response, AccessToken $token)
205
    {
206
        return new ResourceOwner($response, $this->responseResourceOwnerId);
207
    }
208
}
209