diff options
Diffstat (limited to 'vendor/league/oauth2-client/src')
18 files changed, 1504 insertions, 0 deletions
diff --git a/vendor/league/oauth2-client/src/Entity/User.php b/vendor/league/oauth2-client/src/Entity/User.php new file mode 100644 index 0000000..756e09a --- /dev/null +++ b/vendor/league/oauth2-client/src/Entity/User.php @@ -0,0 +1,117 @@ +<?php + +namespace League\OAuth2\Client\Entity; + +class User +{ + protected $uid; + protected $nickname; + protected $name; + protected $firstName; + protected $lastName; + protected $email; + protected $location; + protected $description; + protected $imageUrl; + protected $urls; + protected $gender; + protected $locale; + + public function __get($name) + { + if (!property_exists($this, $name)) { + throw new \OutOfRangeException(sprintf( + '%s does not contain a property by the name of "%s"', + __CLASS__, + $name + )); + } + + return $this->{$name}; + } + + public function __set($property, $value) + { + if (!property_exists($this, $property)) { + throw new \OutOfRangeException(sprintf( + '%s does not contain a property by the name of "%s"', + __CLASS__, + $property + )); + } + + $this->$property = $value; + + return $this; + } + + public function __isset($name) + { + return (property_exists($this, $name)); + } + + public function getArrayCopy() + { + return [ + 'uid' => $this->uid, + 'nickname' => $this->nickname, + 'name' => $this->name, + 'firstName' => $this->firstName, + 'lastName' => $this->lastName, + 'email' => $this->email, + 'location' => $this->location, + 'description' => $this->description, + 'imageUrl' => $this->imageUrl, + 'urls' => $this->urls, + 'gender' => $this->gender, + 'locale' => $this->locale, + ]; + } + + public function exchangeArray(array $data) + { + foreach ($data as $key => $value) { + $key = strtolower($key); + switch ($key) { + case 'uid': + $this->uid = $value; + break; + case 'nickname': + $this->nickname = $value; + break; + case 'name': + $this->name = $value; + break; + case 'firstname': + $this->firstName = $value; + break; + case 'lastname': + $this->lastName = $value; + break; + case 'email': + $this->email = $value; + break; + case 'location': + $this->location = $value; + break; + case 'description': + $this->description = $value; + break; + case 'imageurl': + $this->imageUrl = $value; + break; + case 'urls': + $this->urls = $value; + break; + case 'gender': + $this->gender = $value; + break; + case 'locale': + $this->locale = $value; + break; + } + } + + return $this; + } +} diff --git a/vendor/league/oauth2-client/src/Exception/IDPException.php b/vendor/league/oauth2-client/src/Exception/IDPException.php new file mode 100644 index 0000000..668a7e7 --- /dev/null +++ b/vendor/league/oauth2-client/src/Exception/IDPException.php @@ -0,0 +1,69 @@ +<?php + +namespace League\OAuth2\Client\Exception; + +class IDPException extends \Exception +{ + protected $result; + + public function __construct($result) + { + if (!empty($result['error']) && is_array($result['error'])) { + // Error response is wrapped in a top entity type, JSON:API style. + $result = $result['error']; + } + + $this->result = $result; + + $code = isset($result['code']) ? $result['code'] : 0; + + if (isset($result['error']) && $result['error'] !== '') { + // OAuth 2.0 Draft 10 style + $message = $result['error']; + } elseif (isset($result['message']) && $result['message'] !== '') { + // cURL style + $message = $result['message']; + } else { + $message = 'Unknown Error.'; + } + + parent::__construct($message, $code); + } + + public function getResponseBody() + { + return $this->result; + } + + public function getType() + { + $result = 'Exception'; + + if (isset($this->result['error'])) { + $message = $this->result['error']; + + if (is_string($message)) { + // OAuth 2.0 Draft 10 style + $result = $message; + } + } + + return $result; + } + + /** + * To make debugging easier. + * + * @return string The string representation of the error. + */ + public function __toString() + { + $str = $this->getType().': '; + + if ($this->code != 0) { + $str .= $this->code.': '; + } + + return $str.$this->message; + } +} diff --git a/vendor/league/oauth2-client/src/Grant/AuthorizationCode.php b/vendor/league/oauth2-client/src/Grant/AuthorizationCode.php new file mode 100644 index 0000000..bda0965 --- /dev/null +++ b/vendor/league/oauth2-client/src/Grant/AuthorizationCode.php @@ -0,0 +1,27 @@ +<?php + +namespace League\OAuth2\Client\Grant; + +use League\OAuth2\Client\Token\AccessToken; + +class AuthorizationCode implements GrantInterface +{ + public function __toString() + { + return 'authorization_code'; + } + + public function prepRequestParams($defaultParams, $params) + { + if (! isset($params['code']) || empty($params['code'])) { + throw new \BadMethodCallException('Missing authorization code'); + } + + return array_merge($defaultParams, $params); + } + + public function handleResponse($response = []) + { + return new AccessToken($response); + } +} diff --git a/vendor/league/oauth2-client/src/Grant/ClientCredentials.php b/vendor/league/oauth2-client/src/Grant/ClientCredentials.php new file mode 100644 index 0000000..7a73a79 --- /dev/null +++ b/vendor/league/oauth2-client/src/Grant/ClientCredentials.php @@ -0,0 +1,25 @@ +<?php + +namespace League\OAuth2\Client\Grant; + +use League\OAuth2\Client\Token\AccessToken; + +class ClientCredentials implements GrantInterface +{ + public function __toString() + { + return 'client_credentials'; + } + + public function prepRequestParams($defaultParams, $params) + { + $params['grant_type'] = 'client_credentials'; + + return array_merge($defaultParams, $params); + } + + public function handleResponse($response = array()) + { + return new AccessToken($response); + } +} diff --git a/vendor/league/oauth2-client/src/Grant/GrantInterface.php b/vendor/league/oauth2-client/src/Grant/GrantInterface.php new file mode 100644 index 0000000..a744ea9 --- /dev/null +++ b/vendor/league/oauth2-client/src/Grant/GrantInterface.php @@ -0,0 +1,12 @@ +<?php + +namespace League\OAuth2\Client\Grant; + +interface GrantInterface +{ + public function __toString(); + + public function handleResponse($response = []); + + public function prepRequestParams($defaultParams, $params); +} diff --git a/vendor/league/oauth2-client/src/Grant/Password.php b/vendor/league/oauth2-client/src/Grant/Password.php new file mode 100644 index 0000000..b124b34 --- /dev/null +++ b/vendor/league/oauth2-client/src/Grant/Password.php @@ -0,0 +1,33 @@ +<?php + +namespace League\OAuth2\Client\Grant; + +use League\OAuth2\Client\Token\AccessToken; + +class Password implements GrantInterface +{ + public function __toString() + { + return 'password'; + } + + public function prepRequestParams($defaultParams, $params) + { + if (! isset($params['username']) || empty($params['username'])) { + throw new \BadMethodCallException('Missing username'); + } + + if (! isset($params['password']) || empty($params['password'])) { + throw new \BadMethodCallException('Missing password'); + } + + $params['grant_type'] = 'password'; + + return array_merge($defaultParams, $params); + } + + public function handleResponse($response = array()) + { + return new AccessToken($response); + } +} diff --git a/vendor/league/oauth2-client/src/Grant/RefreshToken.php b/vendor/league/oauth2-client/src/Grant/RefreshToken.php new file mode 100644 index 0000000..86e7f6e --- /dev/null +++ b/vendor/league/oauth2-client/src/Grant/RefreshToken.php @@ -0,0 +1,29 @@ +<?php + +namespace League\OAuth2\Client\Grant; + +use League\OAuth2\Client\Token\AccessToken as AccessToken; + +class RefreshToken implements GrantInterface +{ + public function __toString() + { + return 'refresh_token'; + } + + public function prepRequestParams($defaultParams, $params) + { + if (! isset($params['refresh_token']) || empty($params['refresh_token'])) { + throw new \BadMethodCallException('Missing refresh_token'); + } + + $params['grant_type'] = 'refresh_token'; + + return array_merge($defaultParams, $params); + } + + public function handleResponse($response = []) + { + return new AccessToken($response); + } +} diff --git a/vendor/league/oauth2-client/src/Provider/AbstractProvider.php b/vendor/league/oauth2-client/src/Provider/AbstractProvider.php new file mode 100644 index 0000000..a200013 --- /dev/null +++ b/vendor/league/oauth2-client/src/Provider/AbstractProvider.php @@ -0,0 +1,399 @@ +<?php + +namespace League\OAuth2\Client\Provider; + +use Closure; +use Guzzle\Http\Exception\BadResponseException; +use Guzzle\Service\Client as GuzzleClient; +use League\OAuth2\Client\Exception\IDPException as IDPException; +use League\OAuth2\Client\Grant\GrantInterface; +use League\OAuth2\Client\Token\AccessToken as AccessToken; + +abstract class AbstractProvider implements ProviderInterface +{ + public $clientId = ''; + + public $clientSecret = ''; + + public $redirectUri = ''; + + public $state; + + public $name; + + public $uidKey = 'uid'; + + public $scopes = []; + + public $method = 'post'; + + public $scopeSeparator = ','; + + public $responseType = 'json'; + + public $headers = []; + + public $authorizationHeader; + + /** + * @var GuzzleClient + */ + protected $httpClient; + + protected $redirectHandler; + + /** + * @var int This represents: PHP_QUERY_RFC1738, which is the default value for php 5.4 + * and the default encoding type for the http_build_query setup + */ + protected $httpBuildEncType = 1; + + public function __construct($options = []) + { + foreach ($options as $option => $value) { + if (property_exists($this, $option)) { + $this->{$option} = $value; + } + } + + $this->setHttpClient(new GuzzleClient()); + } + + public function setHttpClient(GuzzleClient $client) + { + $this->httpClient = $client; + + return $this; + } + + public function getHttpClient() + { + $client = clone $this->httpClient; + + return $client; + } + + /** + * Get the URL that this provider uses to begin authorization. + * + * @return string + */ + abstract public function urlAuthorize(); + + /** + * Get the URL that this provider uses to request an access token. + * + * @return string + */ + abstract public function urlAccessToken(); + + /** + * Get the URL that this provider uses to request user details. + * + * Since this URL is typically an authorized route, most providers will require you to pass the access_token as + * a parameter to the request. For example, the google url is: + * + * 'https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token='.$token + * + * @param AccessToken $token + * @return string + */ + abstract public function urlUserDetails(AccessToken $token); + + /** + * Given an object response from the server, process the user details into a format expected by the user + * of the client. + * + * @param object $response + * @param AccessToken $token + * @return mixed + */ + abstract public function userDetails($response, AccessToken $token); + + public function getScopes() + { + return $this->scopes; + } + + public function setScopes(array $scopes) + { + $this->scopes = $scopes; + } + + public function getAuthorizationUrl($options = []) + { + $this->state = isset($options['state']) ? $options['state'] : md5(uniqid(rand(), true)); + + $params = [ + 'client_id' => $this->clientId, + 'redirect_uri' => $this->redirectUri, + 'state' => $this->state, + 'scope' => is_array($this->scopes) ? implode($this->scopeSeparator, $this->scopes) : $this->scopes, + 'response_type' => isset($options['response_type']) ? $options['response_type'] : 'code', + 'approval_prompt' => isset($options['approval_prompt']) ? $options['approval_prompt'] : 'auto', + ]; + + return $this->urlAuthorize().'?'.$this->httpBuildQuery($params, '', '&'); + } + + // @codeCoverageIgnoreStart + public function authorize($options = []) + { + $url = $this->getAuthorizationUrl($options); + if ($this->redirectHandler) { + $handler = $this->redirectHandler; + return $handler($url); + } + // @codeCoverageIgnoreStart + header('Location: ' . $url); + exit; + // @codeCoverageIgnoreEnd + } + + public function getAccessToken($grant = 'authorization_code', $params = []) + { + if (is_string($grant)) { + // PascalCase the grant. E.g: 'authorization_code' becomes 'AuthorizationCode' + $className = str_replace(' ', '', ucwords(str_replace(['-', '_'], ' ', $grant))); + $grant = 'League\\OAuth2\\Client\\Grant\\'.$className; + if (! class_exists($grant)) { + throw new \InvalidArgumentException('Unknown grant "'.$grant.'"'); + } + $grant = new $grant(); + } elseif (! $grant instanceof GrantInterface) { + $message = get_class($grant).' is not an instance of League\OAuth2\Client\Grant\GrantInterface'; + throw new \InvalidArgumentException($message); + } + + $defaultParams = [ + 'client_id' => $this->clientId, + 'client_secret' => $this->clientSecret, + 'redirect_uri' => $this->redirectUri, + 'grant_type' => $grant, + ]; + + $requestParams = $grant->prepRequestParams($defaultParams, $params); + + try { + switch (strtoupper($this->method)) { + case 'GET': + // @codeCoverageIgnoreStart + // No providers included with this library use get but 3rd parties may + $client = $this->getHttpClient(); + $client->setBaseUrl($this->urlAccessToken() . '?' . $this->httpBuildQuery($requestParams, '', '&')); + $request = $client->get(null, $this->getHeaders(), $requestParams)->send(); + $response = $request->getBody(); + break; + // @codeCoverageIgnoreEnd + case 'POST': + $client = $this->getHttpClient(); + $client->setBaseUrl($this->urlAccessToken()); + $request = $client->post(null, $this->getHeaders(), $requestParams)->send(); + $response = $request->getBody(); + break; + // @codeCoverageIgnoreStart + default: + throw new \InvalidArgumentException('Neither GET nor POST is specified for request'); + // @codeCoverageIgnoreEnd + } + } catch (BadResponseException $e) { + // @codeCoverageIgnoreStart + $response = $e->getResponse()->getBody(); + // @codeCoverageIgnoreEnd + } + + $result = $this->prepareResponse($response); + + if (isset($result['error']) && ! empty($result['error'])) { + // @codeCoverageIgnoreStart + throw new IDPException($result); + // @codeCoverageIgnoreEnd + } + + $result = $this->prepareAccessTokenResult($result); + + return $grant->handleResponse($result); + } + + /** + * Prepare the response, parsing according to configuration and returning + * the response as an array. + * + * @param string $response + * @return array + */ + protected function prepareResponse($response) + { + $result = []; + + switch ($this->responseType) { + case 'json': + $json = json_decode($response, true); + + if (JSON_ERROR_NONE === json_last_error()) { + $result = $json; + } + + break; + case 'string': + parse_str($response, $result); + break; + } + + return $result; + } + + /** + * Prepare the access token response for the grant. Custom mapping of + * expirations, etc should be done here. + * + * @param array $result + * @return array + */ + protected function prepareAccessTokenResult(array $result) + { + $this->setResultUid($result); + return $result; + } + + /** + * Sets any result keys we've received matching our provider-defined uidKey to the key "uid". + * + * @param array $result + */ + protected function setResultUid(array &$result) + { + // If we're operating with the default uidKey there's nothing to do. + if ($this->uidKey === "uid") { + return; + } + + if (isset($result[$this->uidKey])) { + // The AccessToken expects a "uid" to have the key "uid". + $result['uid'] = $result[$this->uidKey]; + } + } + + public function getUserDetails(AccessToken $token) + { + $response = $this->fetchUserDetails($token); + + return $this->userDetails(json_decode($response), $token); + } + + public function getUserUid(AccessToken $token) + { + $response = $this->fetchUserDetails($token, true); + + return $this->userUid(json_decode($response), $token); + } + + public function getUserEmail(AccessToken $token) + { + $response = $this->fetchUserDetails($token, true); + + return $this->userEmail(json_decode($response), $token); + } + + public function getUserScreenName(AccessToken $token) + { + $response = $this->fetchUserDetails($token, true); + + return $this->userScreenName(json_decode($response), $token); + } + + public function userUid($response, AccessToken $token) + { + return isset($response->id) && $response->id ? $response->id : null; + } + + public function userEmail($response, AccessToken $token) + { + return isset($response->email) && $response->email ? $response->email : null; + } + + public function userScreenName($response, AccessToken $token) + { + return isset($response->name) && $response->name ? $response->name : null; + } + + /** + * Build HTTP the HTTP query, handling PHP version control options + * + * @param array $params + * @param integer $numeric_prefix + * @param string $arg_separator + * @param null|integer $enc_type + * + * @return string + * @codeCoverageIgnoreStart + */ + protected function httpBuildQuery($params, $numeric_prefix = 0, $arg_separator = '&', $enc_type = null) + { + if (version_compare(PHP_VERSION, '5.4.0', '>=') && !defined('HHVM_VERSION')) { + if ($enc_type === null) { + $enc_type = $this->httpBuildEncType; + } + $url = http_build_query($params, $numeric_prefix, $arg_separator, $enc_type); + } else { + $url = http_build_query($params, $numeric_prefix, $arg_separator); + } + + return $url; + } + + protected function fetchUserDetails(AccessToken $token) + { + $url = $this->urlUserDetails($token); + + $headers = $this->getHeaders($token); + + return $this->fetchProviderData($url, $headers); + } + + protected function fetchProviderData($url, array $headers = []) + { + try { + $client = $this->getHttpClient(); + $client->setBaseUrl($url); + + if ($headers) { + $client->setDefaultOption('headers', $headers); + } + + $request = $client->get()->send(); + $response = $request->getBody(); + } catch (BadResponseException $e) { + // @codeCoverageIgnoreStart + $response = $e->getResponse()->getBody(); + $result = $this->prepareResponse($response); + throw new IDPException($result); + // @codeCoverageIgnoreEnd + } + + return $response; + } + + protected function getAuthorizationHeaders($token) + { + $headers = []; + if ($this->authorizationHeader) { + $headers['Authorization'] = $this->authorizationHeader . ' ' . $token; + } + return $headers; + } + + public function getHeaders($token = null) + { + $headers = $this->headers; + if ($token) { + $headers = array_merge($headers, $this->getAuthorizationHeaders($token)); + } + return $headers; + } + + public function setRedirectHandler(Closure $handler) + { + $this->redirectHandler = $handler; + } +} diff --git a/vendor/league/oauth2-client/src/Provider/Eventbrite.php b/vendor/league/oauth2-client/src/Provider/Eventbrite.php new file mode 100644 index 0000000..116051f --- /dev/null +++ b/vendor/league/oauth2-client/src/Provider/Eventbrite.php @@ -0,0 +1,51 @@ +<?php + +namespace League\OAuth2\Client\Provider; + +use League\OAuth2\Client\Entity\User; + +class Eventbrite extends AbstractProvider +{ + public $authorizationHeader = 'Bearer'; + + public function urlAuthorize() + { + return 'https://www.eventbrite.com/oauth/authorize'; + } + + public function urlAccessToken() + { + return 'https://www.eventbrite.com/oauth/token'; + } + + public function urlUserDetails(\League\OAuth2\Client\Token\AccessToken $token) + { + return 'https://www.eventbrite.com/json/user_get'; + } + + public function userDetails($response, \League\OAuth2\Client\Token\AccessToken $token) + { + $user = new User(); + $user->exchangeArray([ + 'uid' => $response->user->user_id, + 'email' => $response->user->email, + ]); + + return $user; + } + + public function userUid($response, \League\OAuth2\Client\Token\AccessToken $token) + { + return $response->user->user_id; + } + + public function userEmail($response, \League\OAuth2\Client\Token\AccessToken $token) + { + return isset($response->user->email) && $response->user->email ? $response->user->email : null; + } + + public function userScreenName($response, \League\OAuth2\Client\Token\AccessToken $token) + { + return $response->user->user_id; + } +} diff --git a/vendor/league/oauth2-client/src/Provider/Facebook.php b/vendor/league/oauth2-client/src/Provider/Facebook.php new file mode 100644 index 0000000..9155836 --- /dev/null +++ b/vendor/league/oauth2-client/src/Provider/Facebook.php @@ -0,0 +1,103 @@ +<?php + +namespace League\OAuth2\Client\Provider; + +use League\OAuth2\Client\Entity\User; + +class Facebook extends AbstractProvider +{ + /** + * @const string The fallback Graph API version to use for requests. + */ + const DEFAULT_GRAPH_VERSION = 'v2.2'; + + /** + * @var string The Graph API version to use for requests. + */ + protected $graphApiVersion; + + public $scopes = ['public_profile', 'email']; + + public $responseType = 'string'; + + public function __construct($options) + { + parent::__construct($options); + $this->graphApiVersion = (isset($options['graphApiVersion'])) + ? $options['graphApiVersion'] + : static::DEFAULT_GRAPH_VERSION; + } + + public function urlAuthorize() + { + return 'https://www.facebook.com/'.$this->graphApiVersion.'/dialog/oauth'; + } + + public function urlAccessToken() + { + return 'https://graph.facebook.com/'.$this->graphApiVersion.'/oauth/access_token'; + } + + public function urlUserDetails(\League\OAuth2\Client\Token\AccessToken $token) + { + $fields = implode(',', [ + 'id', + 'name', + 'first_name', + 'last_name', + 'email', + 'hometown', + 'bio', + 'picture.type(large){url}', + 'gender', + 'locale', + 'link', + ]); + + return 'https://graph.facebook.com/'.$this->graphApiVersion.'/me?fields='.$fields.'&access_token='.$token; + } + + public function userDetails($response, \League\OAuth2\Client\Token\AccessToken $token) + { + $user = new User(); + + $email = (isset($response->email)) ? $response->email : null; + // The "hometown" field will only be returned if you ask for the `user_hometown` permission. + $location = (isset($response->hometown->name)) ? $response->hometown->name : null; + $description = (isset($response->bio)) ? $response->bio : null; + $imageUrl = (isset($response->picture->data->url)) ? $response->picture->data->url : null; + $gender = (isset($response->gender)) ? $response->gender : null; + $locale = (isset($response->locale)) ? $response->locale : null; + + $user->exchangeArray([ + 'uid' => $response->id, + 'name' => $response->name, + 'firstname' => $response->first_name, + 'lastname' => $response->last_name, + 'email' => $email, + 'location' => $location, + 'description' => $description, + 'imageurl' => $imageUrl, + 'gender' => $gender, + 'locale' => $locale, + 'urls' => [ 'Facebook' => $response->link ], + ]); + + return $user; + } + + public function userUid($response, \League\OAuth2\Client\Token\AccessToken $token) + { + return $response->id; + } + + public function userEmail($response, \League\OAuth2\Client\Token\AccessToken $token) + { + return isset($response->email) && $response->email ? $response->email : null; + } + + public function userScreenName($response, \League\OAuth2\Client\Token\AccessToken $token) + { + return [$response->first_name, $response->last_name]; + } +} diff --git a/vendor/league/oauth2-client/src/Provider/Github.php b/vendor/league/oauth2-client/src/Provider/Github.php new file mode 100644 index 0000000..8182a4e --- /dev/null +++ b/vendor/league/oauth2-client/src/Provider/Github.php @@ -0,0 +1,99 @@ +<?php + +namespace League\OAuth2\Client\Provider; + +use League\OAuth2\Client\Entity\User; +use League\OAuth2\Client\Token\AccessToken; + +class Github extends AbstractProvider +{ + public $responseType = 'string'; + + public $authorizationHeader = 'token'; + + public $domain = 'https://github.com'; + + public $apiDomain = 'https://api.github.com'; + + public function urlAuthorize() + { + return $this->domain.'/login/oauth/authorize'; + } + + public function urlAccessToken() + { + return $this->domain.'/login/oauth/access_token'; + } + + public function urlUserDetails(AccessToken $token) + { + if ($this->domain === 'https://github.com') { + return $this->apiDomain.'/user'; + } + return $this->domain.'/api/v3/user'; + } + + public function urlUserEmails(AccessToken $token) + { + if ($this->domain === 'https://github.com') { + return $this->apiDomain.'/user/emails'; + } + return $this->domain.'/api/v3/user/emails'; + } + + public function userDetails($response, AccessToken $token) + { + $user = new User(); + + $name = (isset($response->name)) ? $response->name : null; + $email = (isset($response->email)) ? $response->email : null; + + $user->exchangeArray([ + 'uid' => $response->id, + 'nickname' => $response->login, + 'name' => $name, + 'email' => $email, + 'urls' => [ + 'GitHub' => $this->domain.'/'.$response->login, + ], + ]); + + return $user; + } + + public function userUid($response, AccessToken $token) + { + return $response->id; + } + + public function getUserEmails(AccessToken $token) + { + $response = $this->fetchUserEmails($token); + + return $this->userEmails(json_decode($response), $token); + } + + public function userEmail($response, AccessToken $token) + { + return isset($response->email) && $response->email ? $response->email : null; + } + + public function userEmails($response, AccessToken $token) + { + return $response; + } + + public function userScreenName($response, AccessToken $token) + { + return $response->name; + } + + protected function fetchUserEmails(AccessToken $token) + { + $url = $this->urlUserEmails($token); + + $headers = $this->getHeaders($token); + + return $this->fetchProviderData($url, $headers); + } +} diff --git a/vendor/league/oauth2-client/src/Provider/Google.php b/vendor/league/oauth2-client/src/Provider/Google.php new file mode 100644 index 0000000..87393ee --- /dev/null +++ b/vendor/league/oauth2-client/src/Provider/Google.php @@ -0,0 +1,124 @@ +<?php + +namespace League\OAuth2\Client\Provider; + +use League\OAuth2\Client\Entity\User; + +class Google extends AbstractProvider +{ + public $scopeSeparator = ' '; + + public $scopes = [ + 'profile', + 'email', + ]; + + public $authorizationHeader = 'OAuth'; + + /** + * @var string If set, this will be sent to google as the "hd" parameter. + * @link https://developers.google.com/accounts/docs/OAuth2Login#hd-param + */ + public $hostedDomain = ''; + + public function setHostedDomain($hd) + { + $this->hostedDomain = $hd; + } + + public function getHostedDomain() + { + return $this->hostedDomain; + } + + /** + * @var string If set, this will be sent to google as the "access_type" parameter. + * @link https://developers.google.com/accounts/docs/OAuth2WebServer#offline + */ + public $accessType = ''; + + public function setAccessType($accessType) + { + $this->accessType = $accessType; + } + + public function getAccessType() + { + return $this->accessType; + } + + public function urlAuthorize() + { + return 'https://accounts.google.com/o/oauth2/auth'; + } + + public function urlAccessToken() + { + return 'https://accounts.google.com/o/oauth2/token'; + } + + public function urlUserDetails(\League\OAuth2\Client\Token\AccessToken $token) + { + return + 'https://www.googleapis.com/plus/v1/people/me?'. + 'fields=id%2Cname(familyName%2CgivenName)%2CdisplayName%2C'. + 'emails%2Fvalue%2Cimage%2Furl&alt=json'; + } + + public function userDetails($response, \League\OAuth2\Client\Token\AccessToken $token) + { + $response = (array) $response; + + $user = new User(); + + $imageUrl = (isset($response['image']) && + $response['image']->url) ? $response['image']->url : null; + $email = + (isset($response['emails']) && + count($response['emails']) && + $response['emails'][0]->value)? $response['emails'][0]->value : null; + + $user->exchangeArray([ + 'uid' => $response['id'], + 'name' => $response['displayName'], + 'firstname' => $response['name']->givenName, + 'lastName' => $response['name']->familyName, + 'email' => $email, + 'imageUrl' => $imageUrl, + ]); + + return $user; + } + + public function userUid($response, \League\OAuth2\Client\Token\AccessToken $token) + { + return $response->id; + } + + public function userEmail($response, \League\OAuth2\Client\Token\AccessToken $token) + { + return ($response->emails && + count($response->emails) && + $response->emails[0]->value) ? $response->emails[0]->value : null; + } + + public function userScreenName($response, \League\OAuth2\Client\Token\AccessToken $token) + { + return [$response->name->givenName, $response->name->familyName]; + } + + public function getAuthorizationUrl($options = array()) + { + $url = parent::getAuthorizationUrl($options); + + if (!empty($this->hostedDomain)) { + $url .= '&' . $this->httpBuildQuery(['hd' => $this->hostedDomain]); + } + + if (!empty($this->accessType)) { + $url .= '&' . $this->httpBuildQuery(['access_type'=> $this->accessType]); + } + + return $url; + } +} diff --git a/vendor/league/oauth2-client/src/Provider/Instagram.php b/vendor/league/oauth2-client/src/Provider/Instagram.php new file mode 100644 index 0000000..0377c8a --- /dev/null +++ b/vendor/league/oauth2-client/src/Provider/Instagram.php @@ -0,0 +1,59 @@ +<?php + +namespace League\OAuth2\Client\Provider; + +use League\OAuth2\Client\Entity\User; + +class Instagram extends AbstractProvider +{ + public $scopeSeparator = ' '; + public $scopes = ['basic']; + public $responseType = 'json'; + + public function urlAuthorize() + { + return 'https://api.instagram.com/oauth/authorize'; + } + + public function urlAccessToken() + { + return 'https://api.instagram.com/oauth/access_token'; + } + + public function urlUserDetails(\League\OAuth2\Client\Token\AccessToken $token) + { + return 'https://api.instagram.com/v1/users/self?access_token='.$token; + } + + public function userDetails($response, \League\OAuth2\Client\Token\AccessToken $token) + { + $user = new User(); + + $description = (isset($response->data->bio)) ? $response->data->bio : null; + + $user->exchangeArray([ + 'uid' => $response->data->id, + 'nickname' => $response->data->username, + 'name' => $response->data->full_name, + 'description' => $description, + 'imageUrl' => $response->data->profile_picture, + ]); + + return $user; + } + + public function userUid($response, \League\OAuth2\Client\Token\AccessToken $token) + { + return $response->data->id; + } + + public function userEmail($response, \League\OAuth2\Client\Token\AccessToken $token) + { + return; + } + + public function userScreenName($response, \League\OAuth2\Client\Token\AccessToken $token) + { + return $response->data->full_name; + } +} diff --git a/vendor/league/oauth2-client/src/Provider/LinkedIn.php b/vendor/league/oauth2-client/src/Provider/LinkedIn.php new file mode 100644 index 0000000..c790ddf --- /dev/null +++ b/vendor/league/oauth2-client/src/Provider/LinkedIn.php @@ -0,0 +1,76 @@ +<?php + +namespace League\OAuth2\Client\Provider; + +use League\OAuth2\Client\Entity\User; +use League\OAuth2\Client\Token\AccessToken; + +class LinkedIn extends AbstractProvider +{ + public $scopes = []; + public $scopeSeparator = ' '; + public $responseType = 'json'; + public $authorizationHeader = 'Bearer'; + public $fields = [ + 'id', 'email-address', 'first-name', 'last-name', 'headline', + 'location', 'industry', 'picture-url', 'public-profile-url', + ]; + + public function urlAuthorize() + { + return 'https://www.linkedin.com/uas/oauth2/authorization'; + } + + public function urlAccessToken() + { + return 'https://www.linkedin.com/uas/oauth2/accessToken'; + } + + public function urlUserDetails(AccessToken $token) + { + $fields = implode(',', $this->fields); + return 'https://api.linkedin.com/v1/people/~:(' . $fields . ')?format=json'; + } + + public function userDetails($response, AccessToken $token) + { + $user = new User(); + + $email = (isset($response->emailAddress)) ? $response->emailAddress : null; + $location = (isset($response->location->name)) ? $response->location->name : null; + $description = (isset($response->headline)) ? $response->headline : null; + $pictureUrl = (isset($response->pictureUrl)) ? $response->pictureUrl : null; + $publicProfileUrl = (isset($response->publicProfileUrl)) ? $response->publicProfileUrl : null; + + $user->exchangeArray([ + 'uid' => $response->id, + 'name' => $response->firstName.' '.$response->lastName, + 'firstname' => $response->firstName, + 'lastname' => $response->lastName, + 'email' => $email, + 'location' => $location, + 'description' => $description, + 'imageurl' => $pictureUrl, + 'urls' => $publicProfileUrl, + ]); + + return $user; + } + + public function userUid($response, AccessToken $token) + { + return $response->id; + } + + public function userEmail($response, AccessToken $token) + { + return isset($response->emailAddress) && $response->emailAddress + ? $response->emailAddress + : null; + } + + public function userScreenName($response, AccessToken $token) + { + return [$response->firstName, $response->lastName]; + } +} diff --git a/vendor/league/oauth2-client/src/Provider/Microsoft.php b/vendor/league/oauth2-client/src/Provider/Microsoft.php new file mode 100644 index 0000000..d0ed12e --- /dev/null +++ b/vendor/league/oauth2-client/src/Provider/Microsoft.php @@ -0,0 +1,69 @@ +<?php + +namespace League\OAuth2\Client\Provider; + +use League\OAuth2\Client\Entity\User; +use League\OAuth2\Client\Token\AccessToken; + +class Microsoft extends AbstractProvider +{ + public $scopes = ['wl.basic', 'wl.emails']; + public $responseType = 'json'; + + public function urlAuthorize() + { + return 'https://login.live.com/oauth20_authorize.srf'; + } + + public function urlAccessToken() + { + return 'https://login.live.com/oauth20_token.srf'; + } + + public function urlUserDetails(AccessToken $token) + { + return 'https://apis.live.net/v5.0/me?access_token='.$token; + } + + public function userDetails($response, AccessToken $token) + { + $client = $this->getHttpClient(); + $client->setBaseUrl('https://apis.live.net/v5.0/'.$response->id.'/picture'); + $request = $client->get()->send(); + $info = $request->getInfo(); + $imageUrl = $info['url']; + + $user = new User(); + + $email = (isset($response->emails->preferred)) ? $response->emails->preferred : null; + + $user->exchangeArray([ + 'uid' => $response->id, + 'name' => $response->name, + 'firstname' => $response->first_name, + 'lastname' => $response->last_name, + 'email' => $email, + 'imageurl' => $imageUrl, + 'urls' => $response->link.'/cid-'.$response->id, + ]); + + return $user; + } + + public function userUid($response, AccessToken $token) + { + return $response->id; + } + + public function userEmail($response, AccessToken $token) + { + return isset($response->emails->preferred) && $response->emails->preferred + ? $response->emails->preferred + : null; + } + + public function userScreenName($response, AccessToken $token) + { + return [$response->first_name, $response->last_name]; + } +} diff --git a/vendor/league/oauth2-client/src/Provider/ProviderInterface.php b/vendor/league/oauth2-client/src/Provider/ProviderInterface.php new file mode 100644 index 0000000..efe6087 --- /dev/null +++ b/vendor/league/oauth2-client/src/Provider/ProviderInterface.php @@ -0,0 +1,36 @@ +<?php + +namespace League\OAuth2\Client\Provider; + +use League\OAuth2\Client\Token\AccessToken as AccessToken; + +interface ProviderInterface +{ + public function urlAuthorize(); + + public function urlAccessToken(); + + public function urlUserDetails(AccessToken $token); + + public function userDetails($response, AccessToken $token); + + public function getScopes(); + + public function setScopes(array $scopes); + + public function getAuthorizationUrl($options = []); + + public function authorize($options = []); + + public function getAccessToken($grant = 'authorization_code', $params = []); + + public function getHeaders($token = null); + + public function getUserDetails(AccessToken $token); + + public function getUserUid(AccessToken $token); + + public function getUserEmail(AccessToken $token); + + public function getUserScreenName(AccessToken $token); +} diff --git a/vendor/league/oauth2-client/src/Provider/Vkontakte.php b/vendor/league/oauth2-client/src/Provider/Vkontakte.php new file mode 100644 index 0000000..da44ae2 --- /dev/null +++ b/vendor/league/oauth2-client/src/Provider/Vkontakte.php @@ -0,0 +1,99 @@ +<?php + +namespace League\OAuth2\Client\Provider; + +use League\OAuth2\Client\Entity\User; +use League\OAuth2\Client\Token\AccessToken; + +class Vkontakte extends AbstractProvider +{ + public $uidKey = 'user_id'; + + public function urlAuthorize() + { + return 'https://oauth.vk.com/authorize'; + } + + public function urlAccessToken() + { + return 'https://oauth.vk.com/access_token'; + } + + public function urlUserDetails(AccessToken $token) + { + $fields = ['nickname', + 'screen_name', + 'sex', + 'bdate', + 'city', + 'country', + 'timezone', + 'photo_50', + 'photo_100', + 'photo_200_orig', + 'has_mobile', + 'contacts', + 'education', + 'online', + 'counters', + 'relation', + 'last_seen', + 'status', + 'can_write_private_message', + 'can_see_all_posts', + 'can_see_audio', + 'can_post', + 'universities', + 'schools', + 'verified', ]; + + return "https://api.vk.com/method/users.get?user_id={$token->uid}&fields=" + .implode(",", $fields)."&access_token={$token}"; + } + + public function userDetails($response, AccessToken $token) + { + $response = $response->response[0]; + + $user = new User(); + + $email = (isset($response->email)) ? $response->email : null; + $location = (isset($response->country)) ? $response->country : null; + $description = (isset($response->status)) ? $response->status : null; + + $user->exchangeArray([ + 'uid' => $response->uid, + 'nickname' => $response->nickname, + 'name' => $response->screen_name, + 'firstname' => $response->first_name, + 'lastname' => $response->last_name, + 'email' => $email, + 'location' => $location, + 'description' => $description, + 'imageUrl' => $response->photo_200_orig, + ]); + + return $user; + } + + public function userUid($response, AccessToken $token) + { + $response = $response->response[0]; + + return $response->uid; + } + + public function userEmail($response, AccessToken $token) + { + $response = $response->response[0]; + + return isset($response->email) && $response->email ? $response->email : null; + } + + public function userScreenName($response, AccessToken $token) + { + $response = $response->response[0]; + + return [$response->first_name, $response->last_name]; + } +} diff --git a/vendor/league/oauth2-client/src/Token/AccessToken.php b/vendor/league/oauth2-client/src/Token/AccessToken.php new file mode 100755 index 0000000..bcfbfb1 --- /dev/null +++ b/vendor/league/oauth2-client/src/Token/AccessToken.php @@ -0,0 +1,77 @@ +<?php + +namespace League\OAuth2\Client\Token; + +use InvalidArgumentException; + +class AccessToken +{ + /** + * @var string accessToken + */ + public $accessToken; + + /** + * @var int expires + */ + public $expires; + + /** + * @var string refreshToken + */ + public $refreshToken; + + /** + * @var string uid + */ + public $uid; + + /** + * Sets the token, expiry, etc values. + * + * @param array $options token options + * @return void + */ + public function __construct(array $options = null) + { + if (! isset($options['access_token'])) { + throw new \InvalidArgumentException( + 'Required option not passed: access_token'.PHP_EOL + .print_r($options, true) + ); + } + + $this->accessToken = $options['access_token']; + + if (!empty($options['uid'])) { + $this->uid = $options['uid']; + } + + if (!empty($options['refresh_token'])) { + $this->refreshToken = $options['refresh_token']; + } + + // We need to know when the token expires. Show preference to + // 'expires_in' since it is defined in RFC6749 Section 5.1. + // Defer to 'expires' if it is provided instead. + if (!empty($options['expires_in'])) { + $this->expires = time() + ((int) $options['expires_in']); + } elseif (!empty($options['expires'])) { + // Some providers supply the seconds until expiration rather than + // the exact timestamp. Take a best guess at which we received. + $expires = $options['expires']; + $expiresInFuture = $expires > time(); + $this->expires = $expiresInFuture ? $expires : time() + ((int) $expires); + } + } + + /** + * Returns the token key. + * + * @return string + */ + public function __toString() + { + return (string) $this->accessToken; + } +} |