Completed
Push — master ( bda8d5...d74c6d )
by Дмитрий
03:32 queued 01:52
created

Reddit::getName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 1
dl 0
loc 3
rs 10
c 1
b 0
f 0
ccs 2
cts 2
cp 1
cc 1
nc 1
nop 0
crap 1
1
<?php
2
/**
3
 * SocialConnect project
4
 * @author: Patsura Dmitry https://github.com/ovr <[email protected]>
5
 */
6
7
namespace SocialConnect\OAuth2\Provider;
8
9
use SocialConnect\Common\Http\Client\Client;
10
use SocialConnect\OAuth2\AccessToken;
11
use SocialConnect\Provider\AccessTokenInterface;
12
use SocialConnect\Provider\Exception\InvalidAccessToken;
13
use SocialConnect\Provider\Exception\InvalidResponse;
14
use SocialConnect\Common\Entity\User;
15
use SocialConnect\Common\Hydrator\ObjectMap;
16
17
class Reddit extends \SocialConnect\OAuth2\AbstractProvider
18
{
19
    const NAME = 'reddit';
20
21 3
    public function getBaseUri()
22
    {
23 3
        return 'https://oauth.reddit.com/api/v1/';
24
    }
25
26 2
    public function getAuthorizeUri()
27
    {
28 2
        return 'https://ssl.reddit.com/api/v1/authorize';
29
    }
30
31 2
    public function getRequestTokenUri()
32
    {
33 2
        return 'https://ssl.reddit.com/api/v1/access_token';
34
    }
35
36 3
    public function getName()
37
    {
38 3
        return self::NAME;
39
    }
40
41
    /**
42
     * @param string $code
43
     * @return \SocialConnect\Common\Http\Request
44
     */
45 1
    protected function makeAccessTokenRequest($code)
46
    {
47
        $parameters = [
48 1
            'code' => $code,
49 1
            'grant_type' => 'authorization_code',
50 1
            'redirect_uri' => $this->getRedirectUrl()
51
        ];
52
53 1
        return new \SocialConnect\Common\Http\Request(
54 1
            $this->getRequestTokenUri(),
55 1
            $parameters,
56 1
            $this->requestHttpMethod,
57
            [
58 1
                'Content-Type' => 'application/x-www-form-urlencoded',
59 1
                'Authorization' => 'Basic ' . base64_encode($this->consumer->getKey() . ':' . $this->consumer->getSecret())
60
            ]
61
        );
62
    }
63
64
    /**
65
     * @param $body
66
     * @return AccessToken
67
     * @throws InvalidAccessToken
68
     */
69 3
    public function parseToken($body)
70
    {
71 3
        $response = json_decode($body, true);
72 3
        if ($response) {
73 1
            return new AccessToken($response);
74
        }
75
76 2
        throw new InvalidAccessToken('AccessToken is not a valid JSON');
77
    }
78
79
    /**
80
     * {@inheritdoc}
81
     */
82 2
    public function getIdentity(AccessTokenInterface $accessToken)
83
    {
84 2
        $response = $this->httpClient->request(
85 2
            $this->getBaseUri() . 'me.json',
86 2
            [],
87 2
            Client::GET,
88
            [
89 2
                'Authorization' => 'Bearer ' . $accessToken->getToken()
90
            ]
91
        );
92
93 2
        if (!$response->isSuccess()) {
94 1
            throw new InvalidResponse(
95 1
                'API response with error code',
96 1
                $response
97
            );
98
        }
99
100 1
        $result = $response->json();
101 1
        if (!$result) {
102 1
            throw new InvalidResponse(
103 1
                'API response is not a valid JSON object',
104 1
                $response
105
            );
106
        }
107
108
        $hydrator = new ObjectMap([]);
109
110
        return $hydrator->hydrate(new User(), $result);
111
    }
112
}
113