Passed
Push — master ( 78880b...ac7e2f )
by Jens
20:00 queued 13s
created

CredentialTokenProvider   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 63
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 4
eloc 23
c 1
b 0
f 1
dl 0
loc 63
ccs 16
cts 16
cp 1
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A getToken() 0 17 2
A refreshToken() 0 3 1
1
<?php
2
3
namespace Commercetools\Core\Client\OAuth;
4
5
use GuzzleHttp\Client;
6
7
class CredentialTokenProvider implements RefreshTokenProvider
8
{
9
    const GRANT_TYPE = 'grant_type';
10
    const GRANT_TYPE_CLIENT_CREDENTIALS = 'client_credentials';
11
    const SCOPE = 'scope';
12
    const ACCESS_TOKEN = 'access_token';
13
    const EXPIRES_IN = 'expires_in';
14
15
    /**
16
     * @var Client
17
     */
18
    private $client;
19
20
    /**
21
     * @var ClientCredentials
22
     */
23
    private $credentials;
24
25
    /**
26
     * @var string
27
     */
28
    private $accessTokenUrl;
29
30
    /**
31
     * @param Client $client
32
     * @param string $accessTokenUrl
33
     * @param ClientCredentials $credentials
34
     */
35 9
    public function __construct(Client $client, $accessTokenUrl, ClientCredentials $credentials)
36
    {
37 9
        $this->accessTokenUrl = $accessTokenUrl;
38 9
        $this->client = $client;
39 9
        $this->credentials = $credentials;
40 9
    }
41
42
    /**
43
     * @return Token
44
     */
45 2
    public function getToken()
46
    {
47
        $data = [
48 2
            self::GRANT_TYPE => self::GRANT_TYPE_CLIENT_CREDENTIALS
49
        ];
50 2
        if (!empty($this->credentials->getScope())) {
51 2
            $data[self::SCOPE] = $this->credentials->getScope();
52
        }
53
        $options = [
54 2
            'form_params' => $data,
55 2
            'auth' => [$this->credentials->getClientId(), $this->credentials->getClientSecret()]
56
        ];
57
58 2
        $result = $this->client->post($this->accessTokenUrl, $options);
59
60 2
        $body = json_decode((string)$result->getBody(), true);
61 2
        return new Token((string)$body[self::ACCESS_TOKEN], (int)$body[self::EXPIRES_IN], $body[self::SCOPE]);
62
    }
63
64
    /**
65
     * @return Token
66
     */
67 2
    public function refreshToken()
68
    {
69 2
        return $this->getToken();
70
    }
71
}
72