new appraoch
This commit is contained in:
21
pancake/system/vendor/league/oauth2-google/LICENSE
vendored
Executable file
21
pancake/system/vendor/league/oauth2-google/LICENSE
vendored
Executable file
@@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Woody Gilk <woody.gilk@gmail.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
44
pancake/system/vendor/league/oauth2-google/composer.json
vendored
Executable file
44
pancake/system/vendor/league/oauth2-google/composer.json
vendored
Executable file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"name": "league/oauth2-google",
|
||||
"description": "Google OAuth 2.0 Client Provider for The PHP League OAuth2-Client",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Woody Gilk",
|
||||
"email": "woody.gilk@gmail.com",
|
||||
"homepage": "http://shadowhand.me"
|
||||
}
|
||||
],
|
||||
"keywords": [
|
||||
"oauth",
|
||||
"oauth2",
|
||||
"client",
|
||||
"authorization",
|
||||
"authentication",
|
||||
"google"
|
||||
],
|
||||
"minimum-stability": "stable",
|
||||
"require": {
|
||||
"league/oauth2-client": "^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"eloquent/phony": "^0.14.6",
|
||||
"phpunit/phpunit": "^5.7",
|
||||
"satooshi/php-coveralls": "^2.0",
|
||||
"squizlabs/php_codesniffer": "^2.0"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"League\\OAuth2\\Client\\": "src/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"League\\OAuth2\\Client\\Test\\": "tests/src/"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"test": "phpunit",
|
||||
"check": "phpcs src --standard=psr2 -sp"
|
||||
}
|
||||
}
|
||||
15
pancake/system/vendor/league/oauth2-google/src/Exception/HostedDomainException.php
vendored
Executable file
15
pancake/system/vendor/league/oauth2-google/src/Exception/HostedDomainException.php
vendored
Executable file
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace League\OAuth2\Client\Exception;
|
||||
|
||||
/**
|
||||
* Exception thrown if the Google Provider is configured with a hosted domain that the user doesn't belong to
|
||||
*/
|
||||
class HostedDomainException extends \Exception
|
||||
{
|
||||
|
||||
public static function notMatchingDomain($configuredDomain)
|
||||
{
|
||||
return new static("User is not part of domain '$configuredDomain''");
|
||||
}
|
||||
}
|
||||
138
pancake/system/vendor/league/oauth2-google/src/Provider/Google.php
vendored
Executable file
138
pancake/system/vendor/league/oauth2-google/src/Provider/Google.php
vendored
Executable file
@@ -0,0 +1,138 @@
|
||||
<?php
|
||||
|
||||
namespace League\OAuth2\Client\Provider;
|
||||
|
||||
use League\OAuth2\Client\Exception\HostedDomainException;
|
||||
use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
|
||||
use League\OAuth2\Client\Token\AccessToken;
|
||||
use League\OAuth2\Client\Tool\BearerAuthorizationTrait;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
class Google extends AbstractProvider
|
||||
{
|
||||
use BearerAuthorizationTrait;
|
||||
|
||||
const ACCESS_TOKEN_RESOURCE_OWNER_ID = 'id';
|
||||
|
||||
/**
|
||||
* @var string If set, this will be sent to google as the "access_type" parameter.
|
||||
* @link https://developers.google.com/accounts/docs/OAuth2WebServer#offline
|
||||
*/
|
||||
protected $accessType;
|
||||
|
||||
/**
|
||||
* @var string If set, this will be sent to google as the "hd" parameter.
|
||||
* @link https://developers.google.com/accounts/docs/OAuth2Login#hd-param
|
||||
*/
|
||||
protected $hostedDomain;
|
||||
|
||||
/**
|
||||
* @var array Default fields to be requested from the user profile.
|
||||
* @link https://developers.google.com/+/web/api/rest/latest/people
|
||||
*/
|
||||
protected $defaultUserFields = [
|
||||
'id',
|
||||
'name(familyName,givenName)',
|
||||
'displayName',
|
||||
'emails/value',
|
||||
'image/url',
|
||||
];
|
||||
/**
|
||||
* @var array Additional fields to be requested from the user profile.
|
||||
* If set, these values will be included with the defaults.
|
||||
*/
|
||||
protected $userFields = [];
|
||||
|
||||
/**
|
||||
* Use OpenID Connect endpoints for getting the user info/resource owner
|
||||
* @var bool
|
||||
*/
|
||||
protected $useOidcMode = false;
|
||||
|
||||
public function getBaseAuthorizationUrl()
|
||||
{
|
||||
return 'https://accounts.google.com/o/oauth2/auth';
|
||||
}
|
||||
|
||||
public function getBaseAccessTokenUrl(array $params)
|
||||
{
|
||||
return 'https://www.googleapis.com/oauth2/v4/token';
|
||||
}
|
||||
|
||||
public function getResourceOwnerDetailsUrl(AccessToken $token)
|
||||
{
|
||||
if ($this->useOidcMode) {
|
||||
// OIDC endpoints can be found https://accounts.google.com/.well-known/openid-configuration
|
||||
return 'https://www.googleapis.com/oauth2/v3/userinfo';
|
||||
}
|
||||
// fields that are required based on other configuration options
|
||||
$configurationUserFields = [];
|
||||
if (isset($this->hostedDomain)) {
|
||||
$configurationUserFields[] = 'domain';
|
||||
}
|
||||
$fields = array_merge($this->defaultUserFields, $this->userFields, $configurationUserFields);
|
||||
return 'https://www.googleapis.com/plus/v1/people/me?' . http_build_query([
|
||||
'fields' => implode(',', $fields),
|
||||
'alt' => 'json',
|
||||
]);
|
||||
}
|
||||
|
||||
protected function getAuthorizationParameters(array $options)
|
||||
{
|
||||
$params = array_merge(
|
||||
parent::getAuthorizationParameters($options),
|
||||
array_filter([
|
||||
'hd' => $this->hostedDomain,
|
||||
'access_type' => $this->accessType,
|
||||
// if the user is logged in with more than one account ask which one to use for the login!
|
||||
'authuser' => '-1'
|
||||
])
|
||||
);
|
||||
|
||||
return $params;
|
||||
}
|
||||
|
||||
protected function getDefaultScopes()
|
||||
{
|
||||
return [
|
||||
'email',
|
||||
'openid',
|
||||
'profile',
|
||||
];
|
||||
}
|
||||
|
||||
protected function getScopeSeparator()
|
||||
{
|
||||
return ' ';
|
||||
}
|
||||
|
||||
protected function checkResponse(ResponseInterface $response, $data)
|
||||
{
|
||||
if (!empty($data['error'])) {
|
||||
$code = 0;
|
||||
$error = $data['error'];
|
||||
|
||||
if (is_array($error)) {
|
||||
$code = $error['code'];
|
||||
$error = $error['message'];
|
||||
}
|
||||
|
||||
throw new IdentityProviderException($error, $code, $data);
|
||||
}
|
||||
}
|
||||
|
||||
protected function createResourceOwner(array $response, AccessToken $token)
|
||||
{
|
||||
$user = new GoogleUser($response);
|
||||
// Validate hosted domain incase the user edited the initial authorization code grant request
|
||||
if ($this->hostedDomain === '*') {
|
||||
if (empty($user->getHostedDomain())) {
|
||||
throw HostedDomainException::notMatchingDomain($this->hostedDomain);
|
||||
}
|
||||
} elseif (!empty($this->hostedDomain) && $this->hostedDomain !== $user->getHostedDomain()) {
|
||||
throw HostedDomainException::notMatchingDomain($this->hostedDomain);
|
||||
}
|
||||
|
||||
return $user;
|
||||
}
|
||||
}
|
||||
125
pancake/system/vendor/league/oauth2-google/src/Provider/GoogleUser.php
vendored
Executable file
125
pancake/system/vendor/league/oauth2-google/src/Provider/GoogleUser.php
vendored
Executable file
@@ -0,0 +1,125 @@
|
||||
<?php
|
||||
|
||||
namespace League\OAuth2\Client\Provider;
|
||||
|
||||
class GoogleUser implements ResourceOwnerInterface
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $response;
|
||||
|
||||
/**
|
||||
* @param array $response
|
||||
*/
|
||||
public function __construct(array $response)
|
||||
{
|
||||
$this->response = $response;
|
||||
}
|
||||
|
||||
public function getId()
|
||||
{
|
||||
if (array_key_exists('sub', $this->response)) {
|
||||
return $this->response['sub'];
|
||||
}
|
||||
return $this->response['id'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get preferred display name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
if (array_key_exists('name', $this->response) && is_string($this->response['name'])) {
|
||||
return $this->response['name'];
|
||||
}
|
||||
return $this->response['displayName'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get preferred first name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getFirstName()
|
||||
{
|
||||
if (array_key_exists('given_name', $this->response)) {
|
||||
return $this->response['given_name'];
|
||||
}
|
||||
return $this->response['name']['givenName'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get preferred last name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLastName()
|
||||
{
|
||||
if (array_key_exists('family_name', $this->response)) {
|
||||
return $this->response['family_name'];
|
||||
}
|
||||
return $this->response['name']['familyName'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get email address.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getEmail()
|
||||
{
|
||||
if (array_key_exists('email', $this->response)) {
|
||||
return $this->response['email'];
|
||||
}
|
||||
if (!empty($this->response['emails'])) {
|
||||
return $this->response['emails'][0]['value'];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get hosted domain.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getHostedDomain()
|
||||
{
|
||||
if (array_key_exists('hd', $this->response)) {
|
||||
return $this->response['hd'];
|
||||
}
|
||||
if (array_key_exists('domain', $this->response)) {
|
||||
return $this->response['domain'];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get avatar image URL.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getAvatar()
|
||||
{
|
||||
if (array_key_exists('picture', $this->response)) {
|
||||
return $this->response['picture'];
|
||||
}
|
||||
if (!empty($this->response['image']['url'])) {
|
||||
return $this->response['image']['url'];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user data as an array.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function toArray()
|
||||
{
|
||||
return $this->response;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user