SuperJob   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 110
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 96.55%

Importance

Changes 0
Metric Value
wmc 12
lcom 1
cbo 4
dl 0
loc 110
ccs 28
cts 29
cp 0.9655
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
A getBaseAuthorizationUrl() 0 4 1
A getBaseAccessTokenUrl() 0 13 3
A getResourceOwnerDetailsUrl() 0 7 1
A getDefaultScopes() 0 4 1
A getAuthorizationParameters() 0 15 3
A checkResponse() 0 6 2
A createResourceOwner() 0 4 1
1
<?php
2
declare(strict_types=1);
3
4
namespace AlexMasterov\OAuth2\Client\Provider;
5
6
use AlexMasterov\OAuth2\Client\Provider\{
7
    SuperJobException,
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, AlexMasterov\OAuth2\Clie...vider\SuperJobException.

Let’s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let’s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
8
    SuperJobResourceOwner
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, AlexMasterov\OAuth2\Clie...r\SuperJobResourceOwner.

Let’s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let’s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
9
};
10
use League\OAuth2\Client\{
11
    Provider\AbstractProvider,
12
    Token\AccessToken,
13
    Tool\BearerAuthorizationTrait
14
};
15
use Psr\Http\Message\ResponseInterface;
16
17
class SuperJob extends AbstractProvider
18
{
19
    use BearerAuthorizationTrait;
20
21
    /**
22
     * @var string
23
     */
24
    protected $urlApi = 'https://api.superjob.ru/2.0/';
25
26
    /**
27
     * @var string
28
     */
29
    protected $urlAuthorize = 'https://www.superjob.ru/authorize/';
30
31
    /**
32
     * @var string
33
     */
34
    protected $urlAccessToken = 'https://api.superjob.ru/2.0/oauth2/access_token/';
35
36
    /**
37
     * @var string
38
     */
39
    protected $state;
40
41
    /**
42
     * @var string
43
     */
44
    protected $redirectUri;
45
46
    /**
47
     * @inheritDoc
48
     */
49 1
    public function getBaseAuthorizationUrl()
50
    {
51 1
        return $this->urlAuthorize;
52
    }
53
54
    /**
55
     * @inheritDoc
56
     */
57 1
    public function getBaseAccessTokenUrl(array $params)
58
    {
59 1
        if (empty($params['code'])) {
60 1
            $params['code'] = '';
61
        }
62
63 1
        if (empty($params['redirect_uri'])) {
64 1
            $params['redirect_uri'] = $this->redirectUri;
65
        }
66
67 1
        return $this->urlAccessToken . '?' .
68 1
            $this->buildQueryString($params);
69
    }
70
71
    /**
72
     * @inheritDoc
73
     */
74 1
    public function getResourceOwnerDetailsUrl(AccessToken $token)
75
    {
76 1
        return $this->urlApi . 'user/current/?' .
77 1
            $this->buildQueryString([
78 1
                'access_token' => (string) $token,
79
            ]);
80
    }
81
82
    /**
83
     * @inheritDoc
84
     */
85 1
    protected function getDefaultScopes()
86
    {
87 1
        return [];
88
    }
89
90
    /**
91
     * @inheritDoc
92
     */
93 1
    protected function getAuthorizationParameters(array $options)
94
    {
95 1
        $options['response_type'] = 'code';
96 1
        $options['client_id'] = $this->clientId;
97
98 1
        if (empty($options['state'])) {
99 1
            $options['state'] = $this->state;
100
        }
101
102 1
        if (empty($options['redirect_uri'])) {
103 1
            $options['redirect_uri'] = $this->redirectUri;
104
        }
105
106 1
        return $options;
107
    }
108
109
    /**
110
     * @inheritDoc
111
     */
112 1
    protected function checkResponse(ResponseInterface $response, $data)
113
    {
114 1
        if (isset($data['error'])) {
115 1
            throw SuperJobException::errorResponse($response, $data);
116
        }
117
    }
118
119
    /**
120
     * @inheritDoc
121
     */
122 1
    protected function createResourceOwner(array $response, AccessToken $token)
123
    {
124 1
        return new SuperJobResourceOwner($response);
125
    }
126
}
127