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/facebook/src/FacebookProvider.php

99 lines
2.5 KiB

<?php namespace SocialNorm\Facebook;
use GuzzleHttp\Exception\BadResponseException;
use SocialNorm\Exceptions\InvalidAuthorizationCodeException;
use SocialNorm\Providers\OAuth2Provider;
class FacebookProvider extends OAuth2Provider
{
protected $authorizeUrl = "https://www.facebook.com/dialog/oauth";
protected $accessTokenUrl = "https://graph.facebook.com/v2.4/oauth/access_token";
protected $userDataUrl = "https://graph.facebook.com/v2.4/me";
protected $scope = [
'email',
];
protected $fields = [
'email',
'name',
'first_name',
'last_name',
'age_range',
'timezone',
];
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}";
$url .= "&fields=" . implode(',', $this->fields);
return $url;
}
protected function requestAccessToken()
{
$url = $this->getAccessTokenBaseUrl();
try {
$response = $this->httpClient->get($url, [
'query' => [
'client_id' => $this->clientId,
'client_secret' => $this->clientSecret,
'redirect_uri' => $this->redirectUri(),
'code' => $this->request->authorizationCode(),
],
]);
} catch (BadResponseException $e) {
throw new InvalidAuthorizationCodeException((string) $e->getResponse());
}
return $this->parseTokenResponse((string) $response->getBody());
}
protected function parseTokenResponse($response)
{
return $this->parseJsonTokenResponse($response);
}
protected function parseUserDataResponse($response)
{
return json_decode($response, true);
}
protected function userId()
{
return $this->getProviderUserData('id');
}
protected function nickname()
{
return $this->getProviderUserData('name');
}
protected function fullName()
{
return $this->getProviderUserData('name');
}
protected function avatar()
{
return 'https://graph.facebook.com/v2.4/'.$this->userId().'/picture';
}
protected function email()
{
return $this->getProviderUserData('email');
}
}