datatable.directory codebase
https://datatable.directory/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.3 KiB
101 lines
2.3 KiB
6 years ago
|
<?php namespace SocialNorm\StackOverflow;
|
||
|
|
||
|
use SocialNorm\Providers\OAuth2Provider;
|
||
|
use GuzzleHttp\Client as HttpClient;
|
||
|
use SocialNorm\Request;
|
||
|
|
||
|
// https://stackapps.com/apps/oauth/view/12789
|
||
|
// https://api.stackexchange.com/docs/authentication
|
||
|
|
||
|
// This is entirely untested; it might work, but since we don't get e-mail from it,
|
||
|
// it's use as an auth method is problematic.
|
||
|
class StackOverflowProvider extends OAuth2Provider
|
||
|
{
|
||
|
protected $authorizeUrl = "https://stackoverflow.com/oauth";
|
||
|
protected $accessTokenUrl = "https://stackoverflow.com/oauth/access_token";
|
||
|
protected $userDataUrl = "https://api.stackexchange.com/2.2/me";
|
||
|
protected $scope = [];
|
||
|
|
||
|
private $key;
|
||
|
|
||
|
protected $headers = [
|
||
|
'authorize' => [],
|
||
|
'access_token' => [
|
||
|
'Content-Type' => 'application/x-www-form-urlencoded'
|
||
|
],
|
||
|
'user_details' => [],
|
||
|
];
|
||
|
|
||
|
public function __construct(array $config, HttpClient $httpClient, Request $request)
|
||
|
{
|
||
|
parent::__construct($config, $httpClient, $request);
|
||
|
$this->key = $config['key'];
|
||
|
}
|
||
|
|
||
|
protected function compileScopes()
|
||
|
{
|
||
|
return implode(' ', $this->scope);
|
||
|
}
|
||
|
|
||
|
protected function getAuthorizeUrl()
|
||
|
{
|
||
|
return $this->authorizeUrl;
|
||
|
}
|
||
|
|
||
|
protected function getAccessTokenBaseUrl()
|
||
|
{
|
||
|
return $this->accessTokenUrl;
|
||
|
}
|
||
|
|
||
|
protected function getUserDataUrl()
|
||
|
{
|
||
|
return $this->userDataUrl;
|
||
|
}
|
||
|
|
||
|
protected function buildUserDataUrl()
|
||
|
{
|
||
|
$url = $this->getUserDataUrl();
|
||
|
|
||
|
$url .= "?access_token=".$this->accessToken
|
||
|
. "&site=stackoverflow"
|
||
|
. "&key=".$this->key;
|
||
|
|
||
|
return $url;
|
||
|
}
|
||
|
|
||
|
protected function parseTokenResponse($response)
|
||
|
{
|
||
|
return $this->parseJsonTokenResponse($response);
|
||
|
}
|
||
|
|
||
|
protected function parseUserDataResponse($response)
|
||
|
{
|
||
|
return json_decode($response, true);
|
||
|
}
|
||
|
|
||
|
protected function userId()
|
||
|
{
|
||
|
return array_get($this->providerUserData, 'items.0.account_id');
|
||
|
}
|
||
|
|
||
|
protected function nickname()
|
||
|
{
|
||
|
return array_get($this->providerUserData, 'items.0.display_name');
|
||
|
}
|
||
|
|
||
|
protected function fullName()
|
||
|
{
|
||
|
return array_get($this->providerUserData, 'items.0.display_name');
|
||
|
}
|
||
|
|
||
|
protected function avatar()
|
||
|
{
|
||
|
return array_get($this->providerUserData, 'items.0.profile_image');
|
||
|
}
|
||
|
|
||
|
protected function email()
|
||
|
{
|
||
|
return null;
|
||
|
}
|
||
|
}
|