-
Notifications
You must be signed in to change notification settings - Fork 12
/
Twitch.php
158 lines (140 loc) · 3.86 KB
/
Twitch.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
<?php
namespace Depotwarehouse\OAuth2\Client\Twitch\Provider;
use Depotwarehouse\OAuth2\Client\Twitch\Entity\TwitchUser;
use League\OAuth2\Client\Provider\AbstractProvider;
use Depotwarehouse\OAuth2\Client\Twitch\Provider\Exception\TwitchIdentityProviderException;
use League\OAuth2\Client\Token\AccessToken;
use Psr\Http\Message\ResponseInterface;
class Twitch extends AbstractProvider
{
/**
* Api domain
*
* @var string
*/
public $apiDomain = 'https://api.twitch.tv';
public $scopes = [ 'user_read' ];
/**
* Get authorization url to begin OAuth flow
*
* @return string
*/
public function getBaseAuthorizationUrl()
{
return $this->apiDomain.'/kraken/oauth2/authorize';
}
/**
* Get access token url to retrieve token
*
* @param array $params
*
* @return string
*/
public function getBaseAccessTokenUrl(array $params)
{
return $this->apiDomain.'/kraken/oauth2/token';
}
/**
* Get provider url to fetch user details
*
* @param AccessToken $token
*
* @return string
*/
public function getResourceOwnerDetailsUrl(AccessToken $token)
{
return $this->getAuthenticatedUrlForEndpoint('/kraken/user', $token);
}
/**
* Get the full uri with appended oauth_token query string
*
* @param string $endpoint | with leading slash
* @param AccessToken $token
* @return string
*/
public function getAuthenticatedUrlForEndpoint($endpoint, AccessToken $token)
{
return $this->apiDomain.$endpoint.'?oauth_token='.$token->getToken();
}
/**
* Get the full urls that do not require authentication
*
* @param $endpoint
* @return string
*/
public function getUrlForEndpoint($endpoint)
{
return $this->apiDomain.$endpoint;
}
/**
* Returns the string that should be used to separate scopes when building
* the URL for requesting an access token.
*
* @return string Scope separator
*/
protected function getScopeSeparator()
{
return ' ';
}
/**
* Get the default scopes used by this provider.
*
* This should not be a complete list of all scopes, but the minimum
* required for the provider user interface!
*
* @return array
*/
protected function getDefaultScopes()
{
return $this->scopes;
}
/**
* Checks response
*
* @param ResponseInterface $response
* @param array|string $data
* @throws \League\OAuth2\Client\Provider\Exception\IdentityProviderException
*/
protected function checkResponse(ResponseInterface $response, $data)
{
if ($response->getStatusCode() >= 400)
{
throw TwitchIdentityProviderException::clientException($response, $data);
}
elseif (isset($data['error']))
{
throw TwitchIdentityProviderException::oauthException($response, $data);
}
}
/**
* Generate a user object from a successful user details request.
*
* @param array $response
* @param AccessToken $token
* @return TwitchUser
*/
protected function createResourceOwner(array $response, AccessToken $token)
{
return new TwitchUser((array)$response);
}
/**
* Since August 8th, 2016 Kraken requires a Client-ID header to be sent
*
* @return array
*/
protected function getDefaultHeaders()
{
return ['Client-ID' => $this->clientId, 'Accept' => 'application/vnd.twitchtv.v5+json'];
}
/**
* Adds token to headers
*
* @param AccessToken $token
* @return array
*/
protected function getAuthorizationHeaders($token = null) {
if(isset($token))
return ['Authorization' => 'OAuth '.$token->getToken()];
return [];
}
}