Completed
Pull Request — master (#20)
by Дмитрий
09:49 queued 07:44
created

Google::getRequestTokenUri()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 0
cts 4
cp 0
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
crap 2
1
<?php
2
/**
3
 * SocialConnect project
4
 * @author: Patsura Dmitry https://github.com/ovr <[email protected]>
5
 * @author Alexander Fedyashov <[email protected]>
6
 */
7
8
namespace SocialConnect\OpenIDConnect\Provider;
9
10
use SocialConnect\Provider\AccessTokenInterface;
11
use SocialConnect\Provider\Exception\InvalidResponse;
12
use SocialConnect\OpenIDConnect\AbstractProvider;
13
use SocialConnect\Common\Entity\User;
14
use SocialConnect\Common\Hydrator\ObjectMap;
15
16
/**
17
 * Class Provider
18
 * @package SocialConnect\Google
19
 */
20
class Google extends AbstractProvider
21
{
22
    /**
23
     * @return array
24
     */
25
    public function getKeys()
26
    {
27
        return [
28
            [
29
                'kty' => 'RSA',
30
                'alg' => 'RS256',
31
                'use' => 'sig',
32
                'kid' => '80cb59bd57804cdfd86954b7412e0fe37a05e9e6',
33
                'n'   => 'tfi9-AYfQm6DfbYYGn_QYkmPhK7JagW3NQaChmbu2PCdQCq8qY4ZLyrXtZij3sX71FzqrKOPXN3FTuPWYgmSST6qluMPcPVp-IVvQKv2Zh6ecAMHyH4tgfvJ-chfwFS00zgaNqnMUSsz5LSo4GbiEtVnJOTH3CJM9zbe5xA2HhGUq5PX9uugFNgC2ruDGiSPFRb07_PUwklBmdqE_Mhz7KFyjPAuJenbacyomQEXg4k53VruXMzCquBeVQe77QcdboFPJBTKmMGZVFbOZO49voj_lq0pje3HDZvFK2HljALcuTVn3_6tIHgVbC5AY6CTmRzhLTYFcW0jtF-Cw0a-jQ',
34
                'e'   => 'AQAB'
35
            ],
36
            [
37
                'kty' => 'RSA',
38
                'alg' => 'RS256',
39
                'use' => 'sig',
40
                'kid' => '8fa17a75998155d5702b3715f559c513bb81bd1b',
41
                'n'   => '1K5pkvWNTBhYME97YmILhLPzEaR2v95XCXdCz1rpFNyQGy25nVriQI917VwUOPRI4NWwE8aBJ_-UjcrVO4r-4yiCWxiT9hKYH955RCjS5FcI5WeBszsl8DVzdE-50_3iHSBNZjuSAekqMWFS2W7Qj_CoACHc4Taq1z_S8vtsKjyghxleifqynprvFB2MatueaDEpoJ2znur-A2LcedYlrfzcWxoVelT83ruam50mfVJvMbtk-4s5LvQWu2I099Yuwnh_8hnr3vChtc2dLNP0bEMosVThldKcjkm2adFDg0kSSwRHDlOHPne1l1yzVPJ8hIeiKj30LTr_c0TUF5TQQw',
42
                'e'   => 'AQAB'
43
            ],
44
            [
45
                'kty' => 'RSA',
46
                'alg' => 'RS256',
47
                'use' => 'sig',
48
                'kid' => '11fe9f68d828d8533728984412a0116a828110f9',
49
                'n'   => 'zl1Rry4crEQpRvBIskbh-A5KO7aezkvx0TJxEk8rzLRpaNUjdRz_Tfq08vgC6usvG6n2PcOsQ3ka7hvIQvM4L5SkOiJN4xC9gGUq30F2jJTwYvSTFJtd-hYMmbd5K4Ghq12FgL9vIOXwCt-UXUkQTN1YNBBwHfrIAUJpnunHedpuAU1dykm8GYcR-yE2XWDNqGmBn7x8y3bOiGzuyY9ncmplFX-6tjwuOuplxS2M7cvJl0p7eIWsT4wsQsKVCRCaFq9hYADDm4HmmcGaZJMPdFG6bJOoHQW-2Jy9u7qrFy5DULnE8BTEsVLyMPAO5K63siFaIZT4IUMnEL2IfJwgeQ',
50
                'e'   => 'AQAB'
51
            ],
52
            [
53
                'kty' => 'RSA',
54
                'alg' => 'RS256',
55
                'use' => 'sig',
56
                'kid' => 'de97f30514c9e858bc0487763f73f7e0c5fa0ab1',
57
                'n'   => '1r8QOq8iQpMCjhLlF3w8SykIwWYiKBdchHbNIFszJGvNcVoOiHEe7dGNu8ByWXsyK0Sil3XgcDaXUCrIikH9DAxEMVewS37GO_qdFHpX29jOu398N4j2skSCgFvBFBZdihcD1LLkTYCMiUfGIPRZVrGOefn89uDGTHz9w912HiWcl-rhi8rxMfTXEpQ4thNRZNZOkD4j00XWfB5C6aVbYa2ry0T_S7biLu0NXiqKSUu5_8L3yWZBZesKZLZ76xDZZ_TWBhcrxrCLxwjG6id8dbM74BAAmLpOT93ortQaR8V4t5vOr3xKg04sgks9xN932C7KiGLr3jgMuuUzxxVDnQ',
58
                'e'   => 'AQAB'
59
            ],
60
        ];
61
    }
62
63
    /**
64
     * {@inheritdoc}
65
     */
66
    public function getBaseUri()
67
    {
68
        return 'https://www.googleapis.com/';
69
    }
70
71
    /**
72
     * {@inheritdoc}
73
     */
74
    public function getAuthorizeUri()
75
    {
76
        return 'https://accounts.google.com/o/oauth2/auth';
77
    }
78
79
    /**
80
     * {@inheritdoc}
81
     */
82
    public function getRequestTokenUri()
83
    {
84
        return 'https://accounts.google.com/o/oauth2/token';
85
    }
86
87
    /**
88
     * {@inheritdoc}
89
     */
90
    public function getName()
91
    {
92
        return 'google';
93
    }
94
95
    /**
96
     * {@inheritdoc}
97
     */
98
    public function getIdentity(AccessTokenInterface $accessToken)
99
    {
100
        $response = $this->httpClient->request(
101
            $this->getBaseUri() . 'oauth2/v1/userinfo',
102
            [
103
                'access_token' => $accessToken->getToken()
104
            ]
105
        );
106
107
        if (!$response->isSuccess()) {
108
            throw new InvalidResponse(
109
                'API response with error code',
110
                $response
111
            );
112
        }
113
114
        $body = $response->getBody();
115
        $result = json_decode($body);
116
117
        $hydrator = new ObjectMap(
118
            [
119
                'id' => 'id',
120
                'given_name' => 'firstname',
121
                'family_name' => 'lastname',
122
                'email' => 'email',
123
                'name' => 'fullname',
124
                'gender' => 'sex',
125
            ]
126
        );
127
128
        return $hydrator->hydrate(new User(), $result);
129
    }
130
}
131