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.
 
 
 
 
 
 
datatable.directory/sideload/socialnorm/stackoverflow/src/StackOverflowProvider.php

100 lines
2.3 KiB

<?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;
}
}