the middle of the idiots
This commit is contained in:
		
							
								
								
									
										80
									
								
								qwen/php/vendor/league/oauth2-client/src/Grant/AbstractGrant.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								qwen/php/vendor/league/oauth2-client/src/Grant/AbstractGrant.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Grant;
 | 
			
		||||
 | 
			
		||||
use League\OAuth2\Client\Tool\RequiredParameterTrait;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Represents a type of authorization grant.
 | 
			
		||||
 *
 | 
			
		||||
 * An authorization grant is a credential representing the resource
 | 
			
		||||
 * owner's authorization (to access its protected resources) used by the
 | 
			
		||||
 * client to obtain an access token.  OAuth 2.0 defines four
 | 
			
		||||
 * grant types -- authorization code, implicit, resource owner password
 | 
			
		||||
 * credentials, and client credentials -- as well as an extensibility
 | 
			
		||||
 * mechanism for defining additional types.
 | 
			
		||||
 *
 | 
			
		||||
 * @link http://tools.ietf.org/html/rfc6749#section-1.3 Authorization Grant (RFC 6749, §1.3)
 | 
			
		||||
 */
 | 
			
		||||
abstract class AbstractGrant
 | 
			
		||||
{
 | 
			
		||||
    use RequiredParameterTrait;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the name of this grant, eg. 'grant_name', which is used as the
 | 
			
		||||
     * grant type when encoding URL query parameters.
 | 
			
		||||
     *
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    abstract protected function getName();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a list of all required request parameters.
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    abstract protected function getRequiredRequestParameters();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns this grant's name as its string representation. This allows for
 | 
			
		||||
     * string interpolation when building URL query parameters.
 | 
			
		||||
     *
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    public function __toString()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->getName();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Prepares an access token request's parameters by checking that all
 | 
			
		||||
     * required parameters are set, then merging with any given defaults.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  array $defaults
 | 
			
		||||
     * @param  array $options
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function prepareRequestParameters(array $defaults, array $options)
 | 
			
		||||
    {
 | 
			
		||||
        $defaults['grant_type'] = $this->getName();
 | 
			
		||||
 | 
			
		||||
        $required = $this->getRequiredRequestParameters();
 | 
			
		||||
        $provided = array_merge($defaults, $options);
 | 
			
		||||
 | 
			
		||||
        $this->checkRequiredParameters($required, $provided);
 | 
			
		||||
 | 
			
		||||
        return $provided;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								qwen/php/vendor/league/oauth2-client/src/Grant/AuthorizationCode.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								qwen/php/vendor/league/oauth2-client/src/Grant/AuthorizationCode.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Grant;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Represents an authorization code grant.
 | 
			
		||||
 *
 | 
			
		||||
 * @link http://tools.ietf.org/html/rfc6749#section-1.3.1 Authorization Code (RFC 6749, §1.3.1)
 | 
			
		||||
 */
 | 
			
		||||
class AuthorizationCode extends AbstractGrant
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    protected function getName()
 | 
			
		||||
    {
 | 
			
		||||
        return 'authorization_code';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    protected function getRequiredRequestParameters()
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'code',
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								qwen/php/vendor/league/oauth2-client/src/Grant/ClientCredentials.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								qwen/php/vendor/league/oauth2-client/src/Grant/ClientCredentials.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Grant;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Represents a client credentials grant.
 | 
			
		||||
 *
 | 
			
		||||
 * @link http://tools.ietf.org/html/rfc6749#section-1.3.4 Client Credentials (RFC 6749, §1.3.4)
 | 
			
		||||
 */
 | 
			
		||||
class ClientCredentials extends AbstractGrant
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    protected function getName()
 | 
			
		||||
    {
 | 
			
		||||
        return 'client_credentials';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    protected function getRequiredRequestParameters()
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								qwen/php/vendor/league/oauth2-client/src/Grant/Exception/InvalidGrantException.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								qwen/php/vendor/league/oauth2-client/src/Grant/Exception/InvalidGrantException.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Grant\Exception;
 | 
			
		||||
 | 
			
		||||
use InvalidArgumentException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Exception thrown if the grant does not extend from AbstractGrant.
 | 
			
		||||
 *
 | 
			
		||||
 * @see League\OAuth2\Client\Grant\AbstractGrant
 | 
			
		||||
 */
 | 
			
		||||
class InvalidGrantException extends InvalidArgumentException
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										104
									
								
								qwen/php/vendor/league/oauth2-client/src/Grant/GrantFactory.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								qwen/php/vendor/league/oauth2-client/src/Grant/GrantFactory.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,104 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Grant;
 | 
			
		||||
 | 
			
		||||
use League\OAuth2\Client\Grant\Exception\InvalidGrantException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Represents a factory used when retrieving an authorization grant type.
 | 
			
		||||
 */
 | 
			
		||||
class GrantFactory
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var array
 | 
			
		||||
     */
 | 
			
		||||
    protected $registry = [];
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Defines a grant singleton in the registry.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  string $name
 | 
			
		||||
     * @param  AbstractGrant $grant
 | 
			
		||||
     * @return self
 | 
			
		||||
     */
 | 
			
		||||
    public function setGrant($name, AbstractGrant $grant)
 | 
			
		||||
    {
 | 
			
		||||
        $this->registry[$name] = $grant;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a grant singleton by name.
 | 
			
		||||
     *
 | 
			
		||||
     * If the grant has not be registered, a default grant will be loaded.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  string $name
 | 
			
		||||
     * @return AbstractGrant
 | 
			
		||||
     */
 | 
			
		||||
    public function getGrant($name)
 | 
			
		||||
    {
 | 
			
		||||
        if (empty($this->registry[$name])) {
 | 
			
		||||
            $this->registerDefaultGrant($name);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this->registry[$name];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Registers a default grant singleton by name.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  string $name
 | 
			
		||||
     * @return self
 | 
			
		||||
     */
 | 
			
		||||
    protected function registerDefaultGrant($name)
 | 
			
		||||
    {
 | 
			
		||||
        // PascalCase the grant. E.g: 'authorization_code' becomes 'AuthorizationCode'
 | 
			
		||||
        $class = str_replace(' ', '', ucwords(str_replace(['-', '_'], ' ', $name)));
 | 
			
		||||
        $class = 'League\\OAuth2\\Client\\Grant\\' . $class;
 | 
			
		||||
 | 
			
		||||
        $this->checkGrant($class);
 | 
			
		||||
 | 
			
		||||
        return $this->setGrant($name, new $class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Determines if a variable is a valid grant.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  mixed $class
 | 
			
		||||
     * @return boolean
 | 
			
		||||
     */
 | 
			
		||||
    public function isGrant($class)
 | 
			
		||||
    {
 | 
			
		||||
        return is_subclass_of($class, AbstractGrant::class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks if a variable is a valid grant.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws InvalidGrantException
 | 
			
		||||
     * @param  mixed $class
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function checkGrant($class)
 | 
			
		||||
    {
 | 
			
		||||
        if (!$this->isGrant($class)) {
 | 
			
		||||
            throw new InvalidGrantException(sprintf(
 | 
			
		||||
                'Grant "%s" must extend AbstractGrant',
 | 
			
		||||
                is_object($class) ? get_class($class) : $class
 | 
			
		||||
            ));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										42
									
								
								qwen/php/vendor/league/oauth2-client/src/Grant/Password.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								qwen/php/vendor/league/oauth2-client/src/Grant/Password.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Grant;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Represents a resource owner password credentials grant.
 | 
			
		||||
 *
 | 
			
		||||
 * @link http://tools.ietf.org/html/rfc6749#section-1.3.3 Resource Owner Password Credentials (RFC 6749, §1.3.3)
 | 
			
		||||
 */
 | 
			
		||||
class Password extends AbstractGrant
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    protected function getName()
 | 
			
		||||
    {
 | 
			
		||||
        return 'password';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    protected function getRequiredRequestParameters()
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'username',
 | 
			
		||||
            'password',
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								qwen/php/vendor/league/oauth2-client/src/Grant/RefreshToken.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								qwen/php/vendor/league/oauth2-client/src/Grant/RefreshToken.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Grant;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Represents a refresh token grant.
 | 
			
		||||
 *
 | 
			
		||||
 * @link http://tools.ietf.org/html/rfc6749#section-6 Refreshing an Access Token (RFC 6749, §6)
 | 
			
		||||
 */
 | 
			
		||||
class RefreshToken extends AbstractGrant
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    protected function getName()
 | 
			
		||||
    {
 | 
			
		||||
        return 'refresh_token';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    protected function getRequiredRequestParameters()
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'refresh_token',
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										42
									
								
								qwen/php/vendor/league/oauth2-client/src/OptionProvider/HttpBasicAuthOptionProvider.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								qwen/php/vendor/league/oauth2-client/src/OptionProvider/HttpBasicAuthOptionProvider.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\OptionProvider;
 | 
			
		||||
 | 
			
		||||
use InvalidArgumentException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Add http basic auth into access token request options
 | 
			
		||||
 * @link https://tools.ietf.org/html/rfc6749#section-2.3.1
 | 
			
		||||
 */
 | 
			
		||||
class HttpBasicAuthOptionProvider extends PostAuthOptionProvider
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    public function getAccessTokenOptions($method, array $params)
 | 
			
		||||
    {
 | 
			
		||||
        if (empty($params['client_id']) || empty($params['client_secret'])) {
 | 
			
		||||
            throw new InvalidArgumentException('clientId and clientSecret are required for http basic auth');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $encodedCredentials = base64_encode(sprintf('%s:%s', $params['client_id'], $params['client_secret']));
 | 
			
		||||
        unset($params['client_id'], $params['client_secret']);
 | 
			
		||||
 | 
			
		||||
        $options = parent::getAccessTokenOptions($method, $params);
 | 
			
		||||
        $options['headers']['Authorization'] = 'Basic ' . $encodedCredentials;
 | 
			
		||||
 | 
			
		||||
        return $options;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										30
									
								
								qwen/php/vendor/league/oauth2-client/src/OptionProvider/OptionProviderInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								qwen/php/vendor/league/oauth2-client/src/OptionProvider/OptionProviderInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\OptionProvider;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Interface for access token options provider
 | 
			
		||||
 */
 | 
			
		||||
interface OptionProviderInterface
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Builds request options used for requesting an access token.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $method
 | 
			
		||||
     * @param  array $params
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function getAccessTokenOptions($method, array $params);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										51
									
								
								qwen/php/vendor/league/oauth2-client/src/OptionProvider/PostAuthOptionProvider.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								qwen/php/vendor/league/oauth2-client/src/OptionProvider/PostAuthOptionProvider.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\OptionProvider;
 | 
			
		||||
 | 
			
		||||
use League\OAuth2\Client\Provider\AbstractProvider;
 | 
			
		||||
use League\OAuth2\Client\Tool\QueryBuilderTrait;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Provide options for access token
 | 
			
		||||
 */
 | 
			
		||||
class PostAuthOptionProvider implements OptionProviderInterface
 | 
			
		||||
{
 | 
			
		||||
    use QueryBuilderTrait;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    public function getAccessTokenOptions($method, array $params)
 | 
			
		||||
    {
 | 
			
		||||
        $options = ['headers' => ['content-type' => 'application/x-www-form-urlencoded']];
 | 
			
		||||
 | 
			
		||||
        if ($method === AbstractProvider::METHOD_POST) {
 | 
			
		||||
            $options['body'] = $this->getAccessTokenBody($params);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $options;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the request body for requesting an access token.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  array $params
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    protected function getAccessTokenBody(array $params)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->buildQueryString($params);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										961
									
								
								qwen/php/vendor/league/oauth2-client/src/Provider/AbstractProvider.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										961
									
								
								qwen/php/vendor/league/oauth2-client/src/Provider/AbstractProvider.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,961 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Provider;
 | 
			
		||||
 | 
			
		||||
use GuzzleHttp\Client as HttpClient;
 | 
			
		||||
use GuzzleHttp\ClientInterface as HttpClientInterface;
 | 
			
		||||
use GuzzleHttp\Exception\BadResponseException;
 | 
			
		||||
use GuzzleHttp\Exception\GuzzleException;
 | 
			
		||||
use InvalidArgumentException;
 | 
			
		||||
use League\OAuth2\Client\Grant\AbstractGrant;
 | 
			
		||||
use League\OAuth2\Client\Grant\GrantFactory;
 | 
			
		||||
use League\OAuth2\Client\OptionProvider\OptionProviderInterface;
 | 
			
		||||
use League\OAuth2\Client\OptionProvider\PostAuthOptionProvider;
 | 
			
		||||
use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
 | 
			
		||||
use League\OAuth2\Client\Token\AccessToken;
 | 
			
		||||
use League\OAuth2\Client\Token\AccessTokenInterface;
 | 
			
		||||
use League\OAuth2\Client\Tool\ArrayAccessorTrait;
 | 
			
		||||
use League\OAuth2\Client\Tool\GuardedPropertyTrait;
 | 
			
		||||
use League\OAuth2\Client\Tool\QueryBuilderTrait;
 | 
			
		||||
use League\OAuth2\Client\Tool\RequestFactory;
 | 
			
		||||
use Psr\Http\Message\RequestInterface;
 | 
			
		||||
use Psr\Http\Message\ResponseInterface;
 | 
			
		||||
use UnexpectedValueException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Represents a service provider (authorization server).
 | 
			
		||||
 *
 | 
			
		||||
 * @link http://tools.ietf.org/html/rfc6749#section-1.1 Roles (RFC 6749, §1.1)
 | 
			
		||||
 */
 | 
			
		||||
abstract class AbstractProvider
 | 
			
		||||
{
 | 
			
		||||
    use ArrayAccessorTrait;
 | 
			
		||||
    use GuardedPropertyTrait;
 | 
			
		||||
    use QueryBuilderTrait;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string|null Key used in a token response to identify the resource owner.
 | 
			
		||||
     */
 | 
			
		||||
    const ACCESS_TOKEN_RESOURCE_OWNER_ID = null;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string HTTP method used to fetch access tokens.
 | 
			
		||||
     */
 | 
			
		||||
    const METHOD_GET = 'GET';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string HTTP method used to fetch access tokens.
 | 
			
		||||
     */
 | 
			
		||||
    const METHOD_POST = 'POST';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string PKCE method used to fetch authorization token.
 | 
			
		||||
     * The PKCE code challenge will be hashed with sha256 (recommended).
 | 
			
		||||
     */
 | 
			
		||||
    const PKCE_METHOD_S256 = 'S256';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string PKCE method used to fetch authorization token.
 | 
			
		||||
     * The PKCE code challenge will be sent as plain text, this is NOT recommended.
 | 
			
		||||
     * Only use `plain` if no other option is possible.
 | 
			
		||||
     */
 | 
			
		||||
    const PKCE_METHOD_PLAIN = 'plain';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    protected $clientId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    protected $clientSecret;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    protected $redirectUri;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    protected $state;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string|null
 | 
			
		||||
     */
 | 
			
		||||
    protected $pkceCode = null;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var GrantFactory
 | 
			
		||||
     */
 | 
			
		||||
    protected $grantFactory;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var RequestFactory
 | 
			
		||||
     */
 | 
			
		||||
    protected $requestFactory;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var HttpClientInterface
 | 
			
		||||
     */
 | 
			
		||||
    protected $httpClient;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var OptionProviderInterface
 | 
			
		||||
     */
 | 
			
		||||
    protected $optionProvider;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructs an OAuth 2.0 service provider.
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $options An array of options to set on this provider.
 | 
			
		||||
     *     Options include `clientId`, `clientSecret`, `redirectUri`, and `state`.
 | 
			
		||||
     *     Individual providers may introduce more options, as needed.
 | 
			
		||||
     * @param array $collaborators An array of collaborators that may be used to
 | 
			
		||||
     *     override this provider's default behavior. Collaborators include
 | 
			
		||||
     *     `grantFactory`, `requestFactory`, and `httpClient`.
 | 
			
		||||
     *     Individual providers may introduce more collaborators, as needed.
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(array $options = [], array $collaborators = [])
 | 
			
		||||
    {
 | 
			
		||||
        // We'll let the GuardedPropertyTrait handle mass assignment of incoming
 | 
			
		||||
        // options, skipping any blacklisted properties defined in the provider
 | 
			
		||||
        $this->fillProperties($options);
 | 
			
		||||
 | 
			
		||||
        if (empty($collaborators['grantFactory'])) {
 | 
			
		||||
            $collaborators['grantFactory'] = new GrantFactory();
 | 
			
		||||
        }
 | 
			
		||||
        $this->setGrantFactory($collaborators['grantFactory']);
 | 
			
		||||
 | 
			
		||||
        if (empty($collaborators['requestFactory'])) {
 | 
			
		||||
            $collaborators['requestFactory'] = new RequestFactory();
 | 
			
		||||
        }
 | 
			
		||||
        $this->setRequestFactory($collaborators['requestFactory']);
 | 
			
		||||
 | 
			
		||||
        if (empty($collaborators['httpClient'])) {
 | 
			
		||||
            $client_options = $this->getAllowedClientOptions($options);
 | 
			
		||||
 | 
			
		||||
            $collaborators['httpClient'] = new HttpClient(
 | 
			
		||||
                array_intersect_key($options, array_flip($client_options))
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        $this->setHttpClient($collaborators['httpClient']);
 | 
			
		||||
 | 
			
		||||
        if (empty($collaborators['optionProvider'])) {
 | 
			
		||||
            $collaborators['optionProvider'] = new PostAuthOptionProvider();
 | 
			
		||||
        }
 | 
			
		||||
        $this->setOptionProvider($collaborators['optionProvider']);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the list of options that can be passed to the HttpClient
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $options An array of options to set on this provider.
 | 
			
		||||
     *     Options include `clientId`, `clientSecret`, `redirectUri`, and `state`.
 | 
			
		||||
     *     Individual providers may introduce more options, as needed.
 | 
			
		||||
     * @return array The options to pass to the HttpClient constructor
 | 
			
		||||
     */
 | 
			
		||||
    protected function getAllowedClientOptions(array $options)
 | 
			
		||||
    {
 | 
			
		||||
        $client_options = ['timeout', 'proxy'];
 | 
			
		||||
 | 
			
		||||
        // Only allow turning off ssl verification if it's for a proxy
 | 
			
		||||
        if (!empty($options['proxy'])) {
 | 
			
		||||
            $client_options[] = 'verify';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $client_options;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the grant factory instance.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  GrantFactory $factory
 | 
			
		||||
     * @return self
 | 
			
		||||
     */
 | 
			
		||||
    public function setGrantFactory(GrantFactory $factory)
 | 
			
		||||
    {
 | 
			
		||||
        $this->grantFactory = $factory;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the current grant factory instance.
 | 
			
		||||
     *
 | 
			
		||||
     * @return GrantFactory
 | 
			
		||||
     */
 | 
			
		||||
    public function getGrantFactory()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->grantFactory;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the request factory instance.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  RequestFactory $factory
 | 
			
		||||
     * @return self
 | 
			
		||||
     */
 | 
			
		||||
    public function setRequestFactory(RequestFactory $factory)
 | 
			
		||||
    {
 | 
			
		||||
        $this->requestFactory = $factory;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the request factory instance.
 | 
			
		||||
     *
 | 
			
		||||
     * @return RequestFactory
 | 
			
		||||
     */
 | 
			
		||||
    public function getRequestFactory()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->requestFactory;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the HTTP client instance.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  HttpClientInterface $client
 | 
			
		||||
     * @return self
 | 
			
		||||
     */
 | 
			
		||||
    public function setHttpClient(HttpClientInterface $client)
 | 
			
		||||
    {
 | 
			
		||||
        $this->httpClient = $client;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the HTTP client instance.
 | 
			
		||||
     *
 | 
			
		||||
     * @return HttpClientInterface
 | 
			
		||||
     */
 | 
			
		||||
    public function getHttpClient()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->httpClient;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the option provider instance.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  OptionProviderInterface $provider
 | 
			
		||||
     * @return self
 | 
			
		||||
     */
 | 
			
		||||
    public function setOptionProvider(OptionProviderInterface $provider)
 | 
			
		||||
    {
 | 
			
		||||
        $this->optionProvider = $provider;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the option provider instance.
 | 
			
		||||
     *
 | 
			
		||||
     * @return OptionProviderInterface
 | 
			
		||||
     */
 | 
			
		||||
    public function getOptionProvider()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->optionProvider;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the current value of the state parameter.
 | 
			
		||||
     *
 | 
			
		||||
     * This can be accessed by the redirect handler during authorization.
 | 
			
		||||
     *
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    public function getState()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->state;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of the pkceCode parameter.
 | 
			
		||||
     *
 | 
			
		||||
     * When using PKCE this should be set before requesting an access token.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $pkceCode
 | 
			
		||||
     * @return self
 | 
			
		||||
     */
 | 
			
		||||
    public function setPkceCode($pkceCode)
 | 
			
		||||
    {
 | 
			
		||||
        $this->pkceCode = $pkceCode;
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the current value of the pkceCode parameter.
 | 
			
		||||
     *
 | 
			
		||||
     * This can be accessed by the redirect handler during authorization.
 | 
			
		||||
     *
 | 
			
		||||
     * @return string|null
 | 
			
		||||
     */
 | 
			
		||||
    public function getPkceCode()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->pkceCode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the base URL for authorizing a client.
 | 
			
		||||
     *
 | 
			
		||||
     * Eg. https://oauth.service.com/authorize
 | 
			
		||||
     *
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    abstract public function getBaseAuthorizationUrl();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the base URL for requesting an access token.
 | 
			
		||||
     *
 | 
			
		||||
     * Eg. https://oauth.service.com/token
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $params
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    abstract public function getBaseAccessTokenUrl(array $params);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the URL for requesting the resource owner's details.
 | 
			
		||||
     *
 | 
			
		||||
     * @param AccessToken $token
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    abstract public function getResourceOwnerDetailsUrl(AccessToken $token);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a new random string to use as the state parameter in an
 | 
			
		||||
     * authorization flow.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  int $length Length of the random string to be generated.
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    protected function getRandomState($length = 32)
 | 
			
		||||
    {
 | 
			
		||||
        // Converting bytes to hex will always double length. Hence, we can reduce
 | 
			
		||||
        // the amount of bytes by half to produce the correct length.
 | 
			
		||||
        return bin2hex(random_bytes($length / 2));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a new random string to use as PKCE code_verifier and
 | 
			
		||||
     * hashed as code_challenge parameters in an authorization flow.
 | 
			
		||||
     * Must be between 43 and 128 characters long.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  int $length Length of the random string to be generated.
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    protected function getRandomPkceCode($length = 64)
 | 
			
		||||
    {
 | 
			
		||||
        return substr(
 | 
			
		||||
            strtr(
 | 
			
		||||
                base64_encode(random_bytes($length)),
 | 
			
		||||
                '+/',
 | 
			
		||||
                '-_'
 | 
			
		||||
            ),
 | 
			
		||||
            0,
 | 
			
		||||
            $length
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the default scopes used by this provider.
 | 
			
		||||
     *
 | 
			
		||||
     * This should only be the scopes that are required to request the details
 | 
			
		||||
     * of the resource owner, rather than all the available scopes.
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    abstract protected function getDefaultScopes();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the string that should be used to separate scopes when building
 | 
			
		||||
     * the URL for requesting an access token.
 | 
			
		||||
     *
 | 
			
		||||
     * @return string Scope separator, defaults to ','
 | 
			
		||||
     */
 | 
			
		||||
    protected function getScopeSeparator()
 | 
			
		||||
    {
 | 
			
		||||
        return ',';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return string|null
 | 
			
		||||
     */
 | 
			
		||||
    protected function getPkceMethod()
 | 
			
		||||
    {
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns authorization parameters based on provided options.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  array $options
 | 
			
		||||
     * @return array Authorization parameters
 | 
			
		||||
     * @throws InvalidArgumentException
 | 
			
		||||
     */
 | 
			
		||||
    protected function getAuthorizationParameters(array $options)
 | 
			
		||||
    {
 | 
			
		||||
        if (empty($options['state'])) {
 | 
			
		||||
            $options['state'] = $this->getRandomState();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (empty($options['scope'])) {
 | 
			
		||||
            $options['scope'] = $this->getDefaultScopes();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $options += [
 | 
			
		||||
            'response_type'   => 'code',
 | 
			
		||||
            'approval_prompt' => 'auto'
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        if (is_array($options['scope'])) {
 | 
			
		||||
            $separator = $this->getScopeSeparator();
 | 
			
		||||
            $options['scope'] = implode($separator, $options['scope']);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Store the state as it may need to be accessed later on.
 | 
			
		||||
        $this->state = $options['state'];
 | 
			
		||||
 | 
			
		||||
        $pkceMethod = $this->getPkceMethod();
 | 
			
		||||
        if (!empty($pkceMethod)) {
 | 
			
		||||
            $this->pkceCode = $this->getRandomPkceCode();
 | 
			
		||||
            if ($pkceMethod === static::PKCE_METHOD_S256) {
 | 
			
		||||
                $options['code_challenge'] = trim(
 | 
			
		||||
                    strtr(
 | 
			
		||||
                        base64_encode(hash('sha256', $this->pkceCode, true)),
 | 
			
		||||
                        '+/',
 | 
			
		||||
                        '-_'
 | 
			
		||||
                    ),
 | 
			
		||||
                    '='
 | 
			
		||||
                );
 | 
			
		||||
            } elseif ($pkceMethod === static::PKCE_METHOD_PLAIN) {
 | 
			
		||||
                $options['code_challenge'] = $this->pkceCode;
 | 
			
		||||
            } else {
 | 
			
		||||
                throw new InvalidArgumentException('Unknown PKCE method "' . $pkceMethod . '".');
 | 
			
		||||
            }
 | 
			
		||||
            $options['code_challenge_method'] = $pkceMethod;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Business code layer might set a different redirect_uri parameter
 | 
			
		||||
        // depending on the context, leave it as-is
 | 
			
		||||
        if (!isset($options['redirect_uri'])) {
 | 
			
		||||
            $options['redirect_uri'] = $this->redirectUri;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $options['client_id'] = $this->clientId;
 | 
			
		||||
 | 
			
		||||
        return $options;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Builds the authorization URL's query string.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  array $params Query parameters
 | 
			
		||||
     * @return string Query string
 | 
			
		||||
     */
 | 
			
		||||
    protected function getAuthorizationQuery(array $params)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->buildQueryString($params);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Builds the authorization URL.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  array $options
 | 
			
		||||
     * @return string Authorization URL
 | 
			
		||||
     * @throws InvalidArgumentException
 | 
			
		||||
     */
 | 
			
		||||
    public function getAuthorizationUrl(array $options = [])
 | 
			
		||||
    {
 | 
			
		||||
        $base   = $this->getBaseAuthorizationUrl();
 | 
			
		||||
        $params = $this->getAuthorizationParameters($options);
 | 
			
		||||
        $query  = $this->getAuthorizationQuery($params);
 | 
			
		||||
 | 
			
		||||
        return $this->appendQuery($base, $query);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Redirects the client for authorization.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  array $options
 | 
			
		||||
     * @param  callable|null $redirectHandler
 | 
			
		||||
     * @return mixed
 | 
			
		||||
     * @throws InvalidArgumentException
 | 
			
		||||
     */
 | 
			
		||||
    public function authorize(
 | 
			
		||||
        array $options = [],
 | 
			
		||||
        ?callable $redirectHandler = null
 | 
			
		||||
    ) {
 | 
			
		||||
        $url = $this->getAuthorizationUrl($options);
 | 
			
		||||
        if ($redirectHandler) {
 | 
			
		||||
            return $redirectHandler($url, $this);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // @codeCoverageIgnoreStart
 | 
			
		||||
        header('Location: ' . $url);
 | 
			
		||||
        exit;
 | 
			
		||||
        // @codeCoverageIgnoreEnd
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Appends a query string to a URL.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  string $url The URL to append the query to
 | 
			
		||||
     * @param  string $query The HTTP query string
 | 
			
		||||
     * @return string The resulting URL
 | 
			
		||||
     */
 | 
			
		||||
    protected function appendQuery($url, $query)
 | 
			
		||||
    {
 | 
			
		||||
        $query = trim($query, '?&');
 | 
			
		||||
 | 
			
		||||
        if ($query) {
 | 
			
		||||
            $glue = strstr($url, '?') === false ? '?' : '&';
 | 
			
		||||
            return $url . $glue . $query;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $url;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the method to use when requesting an access token.
 | 
			
		||||
     *
 | 
			
		||||
     * @return string HTTP method
 | 
			
		||||
     */
 | 
			
		||||
    protected function getAccessTokenMethod()
 | 
			
		||||
    {
 | 
			
		||||
        return self::METHOD_POST;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the key used in the access token response to identify the resource owner.
 | 
			
		||||
     *
 | 
			
		||||
     * @return string|null Resource owner identifier key
 | 
			
		||||
     */
 | 
			
		||||
    protected function getAccessTokenResourceOwnerId()
 | 
			
		||||
    {
 | 
			
		||||
        return static::ACCESS_TOKEN_RESOURCE_OWNER_ID;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Builds the access token URL's query string.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  array $params Query parameters
 | 
			
		||||
     * @return string Query string
 | 
			
		||||
     */
 | 
			
		||||
    protected function getAccessTokenQuery(array $params)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->buildQueryString($params);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks that a provided grant is valid, or attempts to produce one if the
 | 
			
		||||
     * provided grant is a string.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  AbstractGrant|string $grant
 | 
			
		||||
     * @return AbstractGrant
 | 
			
		||||
     */
 | 
			
		||||
    protected function verifyGrant($grant)
 | 
			
		||||
    {
 | 
			
		||||
        if (is_string($grant)) {
 | 
			
		||||
            return $this->grantFactory->getGrant($grant);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $this->grantFactory->checkGrant($grant);
 | 
			
		||||
        return $grant;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the full URL to use when requesting an access token.
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $params Query parameters
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    protected function getAccessTokenUrl(array $params)
 | 
			
		||||
    {
 | 
			
		||||
        $url = $this->getBaseAccessTokenUrl($params);
 | 
			
		||||
 | 
			
		||||
        if ($this->getAccessTokenMethod() === self::METHOD_GET) {
 | 
			
		||||
            $query = $this->getAccessTokenQuery($params);
 | 
			
		||||
            return $this->appendQuery($url, $query);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $url;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a prepared request for requesting an access token.
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $params Query string parameters
 | 
			
		||||
     * @return RequestInterface
 | 
			
		||||
     */
 | 
			
		||||
    protected function getAccessTokenRequest(array $params)
 | 
			
		||||
    {
 | 
			
		||||
        $method  = $this->getAccessTokenMethod();
 | 
			
		||||
        $url     = $this->getAccessTokenUrl($params);
 | 
			
		||||
        $options = $this->optionProvider->getAccessTokenOptions($this->getAccessTokenMethod(), $params);
 | 
			
		||||
 | 
			
		||||
        return $this->getRequest($method, $url, $options);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Requests an access token using a specified grant and option set.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  mixed                $grant
 | 
			
		||||
     * @param  array<string, mixed> $options
 | 
			
		||||
     * @return AccessTokenInterface
 | 
			
		||||
     * @throws IdentityProviderException
 | 
			
		||||
     * @throws UnexpectedValueException
 | 
			
		||||
     * @throws GuzzleException
 | 
			
		||||
     */
 | 
			
		||||
    public function getAccessToken($grant, array $options = [])
 | 
			
		||||
    {
 | 
			
		||||
        $grant = $this->verifyGrant($grant);
 | 
			
		||||
 | 
			
		||||
        if (isset($options['scope']) && is_array($options['scope'])) {
 | 
			
		||||
            $separator = $this->getScopeSeparator();
 | 
			
		||||
            $options['scope'] = implode($separator, $options['scope']);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $params = [
 | 
			
		||||
            'client_id'     => $this->clientId,
 | 
			
		||||
            'client_secret' => $this->clientSecret,
 | 
			
		||||
            'redirect_uri'  => $this->redirectUri,
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        if (!empty($this->pkceCode)) {
 | 
			
		||||
            $params['code_verifier'] = $this->pkceCode;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $params   = $grant->prepareRequestParameters($params, $options);
 | 
			
		||||
        $request  = $this->getAccessTokenRequest($params);
 | 
			
		||||
        $response = $this->getParsedResponse($request);
 | 
			
		||||
        if (false === is_array($response)) {
 | 
			
		||||
            throw new UnexpectedValueException(
 | 
			
		||||
                'Invalid response received from Authorization Server. Expected JSON.'
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        $prepared = $this->prepareAccessTokenResponse($response);
 | 
			
		||||
        $token    = $this->createAccessToken($prepared, $grant);
 | 
			
		||||
 | 
			
		||||
        return $token;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a PSR-7 request instance that is not authenticated.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  string $method
 | 
			
		||||
     * @param  string $url
 | 
			
		||||
     * @param  array $options
 | 
			
		||||
     * @return RequestInterface
 | 
			
		||||
     */
 | 
			
		||||
    public function getRequest($method, $url, array $options = [])
 | 
			
		||||
    {
 | 
			
		||||
        return $this->createRequest($method, $url, null, $options);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns an authenticated PSR-7 request instance.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  string $method
 | 
			
		||||
     * @param  string $url
 | 
			
		||||
     * @param  AccessTokenInterface|string|null $token
 | 
			
		||||
     * @param  array $options Any of "headers", "body", and "protocolVersion".
 | 
			
		||||
     * @return RequestInterface
 | 
			
		||||
     */
 | 
			
		||||
    public function getAuthenticatedRequest($method, $url, $token, array $options = [])
 | 
			
		||||
    {
 | 
			
		||||
        return $this->createRequest($method, $url, $token, $options);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates a PSR-7 request instance.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  string $method
 | 
			
		||||
     * @param  string $url
 | 
			
		||||
     * @param  AccessTokenInterface|string|null $token
 | 
			
		||||
     * @param  array $options
 | 
			
		||||
     * @return RequestInterface
 | 
			
		||||
     */
 | 
			
		||||
    protected function createRequest($method, $url, $token, array $options)
 | 
			
		||||
    {
 | 
			
		||||
        $defaults = [
 | 
			
		||||
            'headers' => $this->getHeaders($token),
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        $options = array_merge_recursive($defaults, $options);
 | 
			
		||||
        $factory = $this->getRequestFactory();
 | 
			
		||||
 | 
			
		||||
        return $factory->getRequestWithOptions($method, $url, $options);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sends a request instance and returns a response instance.
 | 
			
		||||
     *
 | 
			
		||||
     * WARNING: This method does not attempt to catch exceptions caused by HTTP
 | 
			
		||||
     * errors! It is recommended to wrap this method in a try/catch block.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  RequestInterface $request
 | 
			
		||||
     * @return ResponseInterface
 | 
			
		||||
     * @throws GuzzleException
 | 
			
		||||
     */
 | 
			
		||||
    public function getResponse(RequestInterface $request)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->getHttpClient()->send($request);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sends a request and returns the parsed response.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  RequestInterface $request
 | 
			
		||||
     * @return mixed
 | 
			
		||||
     * @throws IdentityProviderException
 | 
			
		||||
     * @throws UnexpectedValueException
 | 
			
		||||
     * @throws GuzzleException
 | 
			
		||||
     */
 | 
			
		||||
    public function getParsedResponse(RequestInterface $request)
 | 
			
		||||
    {
 | 
			
		||||
        try {
 | 
			
		||||
            $response = $this->getResponse($request);
 | 
			
		||||
        } catch (BadResponseException $e) {
 | 
			
		||||
            $response = $e->getResponse();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $parsed = $this->parseResponse($response);
 | 
			
		||||
 | 
			
		||||
        $this->checkResponse($response, $parsed);
 | 
			
		||||
 | 
			
		||||
        return $parsed;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Attempts to parse a JSON response.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  string $content JSON content from response body
 | 
			
		||||
     * @return array Parsed JSON data
 | 
			
		||||
     * @throws UnexpectedValueException if the content could not be parsed
 | 
			
		||||
     */
 | 
			
		||||
    protected function parseJson($content)
 | 
			
		||||
    {
 | 
			
		||||
        $content = json_decode($content, true);
 | 
			
		||||
 | 
			
		||||
        if (json_last_error() !== JSON_ERROR_NONE) {
 | 
			
		||||
            throw new UnexpectedValueException(sprintf(
 | 
			
		||||
                "Failed to parse JSON response: %s",
 | 
			
		||||
                json_last_error_msg()
 | 
			
		||||
            ));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $content;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the content type header of a response.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  ResponseInterface $response
 | 
			
		||||
     * @return string Semi-colon separated join of content-type headers.
 | 
			
		||||
     */
 | 
			
		||||
    protected function getContentType(ResponseInterface $response)
 | 
			
		||||
    {
 | 
			
		||||
        return implode(';', $response->getHeader('content-type'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Parses the response according to its content-type header.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws UnexpectedValueException
 | 
			
		||||
     * @param  ResponseInterface $response
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    protected function parseResponse(ResponseInterface $response)
 | 
			
		||||
    {
 | 
			
		||||
        $content = (string) $response->getBody();
 | 
			
		||||
        $type = $this->getContentType($response);
 | 
			
		||||
 | 
			
		||||
        if (strpos($type, 'urlencoded') !== false) {
 | 
			
		||||
            parse_str($content, $parsed);
 | 
			
		||||
            return $parsed;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Attempt to parse the string as JSON regardless of content type,
 | 
			
		||||
        // since some providers use non-standard content types. Only throw an
 | 
			
		||||
        // exception if the JSON could not be parsed when it was expected to.
 | 
			
		||||
        try {
 | 
			
		||||
            return $this->parseJson($content);
 | 
			
		||||
        } catch (UnexpectedValueException $e) {
 | 
			
		||||
            if (strpos($type, 'json') !== false) {
 | 
			
		||||
                throw $e;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ($response->getStatusCode() == 500) {
 | 
			
		||||
                throw new UnexpectedValueException(
 | 
			
		||||
                    'An OAuth server error was encountered that did not contain a JSON body',
 | 
			
		||||
                    0,
 | 
			
		||||
                    $e
 | 
			
		||||
                );
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return $content;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks a provider response for errors.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws IdentityProviderException
 | 
			
		||||
     * @param  ResponseInterface $response
 | 
			
		||||
     * @param  array|string $data Parsed response data
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    abstract protected function checkResponse(ResponseInterface $response, $data);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Prepares an parsed access token response for a grant.
 | 
			
		||||
     *
 | 
			
		||||
     * Custom mapping of expiration, etc should be done here. Always call the
 | 
			
		||||
     * parent method when overloading this method.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  array<string, mixed> $result
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    protected function prepareAccessTokenResponse(array $result)
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->getAccessTokenResourceOwnerId() !== null) {
 | 
			
		||||
            $result['resource_owner_id'] = $this->getValueByKey(
 | 
			
		||||
                $result,
 | 
			
		||||
                $this->getAccessTokenResourceOwnerId()
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        return $result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates an access token from a response.
 | 
			
		||||
     *
 | 
			
		||||
     * The grant that was used to fetch the response can be used to provide
 | 
			
		||||
     * additional context.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  array $response
 | 
			
		||||
     * @param  AbstractGrant $grant
 | 
			
		||||
     * @return AccessTokenInterface
 | 
			
		||||
     */
 | 
			
		||||
    protected function createAccessToken(array $response, AbstractGrant $grant)
 | 
			
		||||
    {
 | 
			
		||||
        return new AccessToken($response);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Generates a resource owner object from a successful resource owner
 | 
			
		||||
     * details request.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  array $response
 | 
			
		||||
     * @param  AccessToken $token
 | 
			
		||||
     * @return ResourceOwnerInterface
 | 
			
		||||
     */
 | 
			
		||||
    abstract protected function createResourceOwner(array $response, AccessToken $token);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Requests and returns the resource owner of given access token.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  AccessToken $token
 | 
			
		||||
     * @return ResourceOwnerInterface
 | 
			
		||||
     * @throws IdentityProviderException
 | 
			
		||||
     * @throws UnexpectedValueException
 | 
			
		||||
     * @throws GuzzleException
 | 
			
		||||
     */
 | 
			
		||||
    public function getResourceOwner(AccessToken $token)
 | 
			
		||||
    {
 | 
			
		||||
        $response = $this->fetchResourceOwnerDetails($token);
 | 
			
		||||
 | 
			
		||||
        return $this->createResourceOwner($response, $token);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Requests resource owner details.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  AccessToken $token
 | 
			
		||||
     * @return mixed
 | 
			
		||||
     * @throws IdentityProviderException
 | 
			
		||||
     * @throws UnexpectedValueException
 | 
			
		||||
     * @throws GuzzleException
 | 
			
		||||
     */
 | 
			
		||||
    protected function fetchResourceOwnerDetails(AccessToken $token)
 | 
			
		||||
    {
 | 
			
		||||
        $url = $this->getResourceOwnerDetailsUrl($token);
 | 
			
		||||
 | 
			
		||||
        $request = $this->getAuthenticatedRequest(self::METHOD_GET, $url, $token);
 | 
			
		||||
 | 
			
		||||
        $response = $this->getParsedResponse($request);
 | 
			
		||||
 | 
			
		||||
        if (false === is_array($response)) {
 | 
			
		||||
            throw new UnexpectedValueException(
 | 
			
		||||
                'Invalid response received from Authorization Server. Expected JSON.'
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $response;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the default headers used by this provider.
 | 
			
		||||
     *
 | 
			
		||||
     * Typically this is used to set 'Accept' or 'Content-Type' headers.
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    protected function getDefaultHeaders()
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the authorization headers used by this provider.
 | 
			
		||||
     *
 | 
			
		||||
     * Typically this is "Bearer" or "MAC". For more information see:
 | 
			
		||||
     * http://tools.ietf.org/html/rfc6749#section-7.1
 | 
			
		||||
     *
 | 
			
		||||
     * No default is provided, providers must overload this method to activate
 | 
			
		||||
     * authorization headers.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  mixed|null $token Either a string or an access token instance
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    protected function getAuthorizationHeaders($token = null)
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns all headers used by this provider for a request.
 | 
			
		||||
     *
 | 
			
		||||
     * The request will be authenticated if an access token is provided.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  mixed|null $token object or string
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function getHeaders($token = null)
 | 
			
		||||
    {
 | 
			
		||||
        if ($token) {
 | 
			
		||||
            return array_merge(
 | 
			
		||||
                $this->getDefaultHeaders(),
 | 
			
		||||
                $this->getAuthorizationHeaders($token)
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this->getDefaultHeaders();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										48
									
								
								qwen/php/vendor/league/oauth2-client/src/Provider/Exception/IdentityProviderException.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								qwen/php/vendor/league/oauth2-client/src/Provider/Exception/IdentityProviderException.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Provider\Exception;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Exception thrown if the provider response contains errors.
 | 
			
		||||
 */
 | 
			
		||||
class IdentityProviderException extends \Exception
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var mixed
 | 
			
		||||
     */
 | 
			
		||||
    protected $response;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $message
 | 
			
		||||
     * @param int $code
 | 
			
		||||
     * @param mixed $response The response body
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct($message, $code, $response)
 | 
			
		||||
    {
 | 
			
		||||
        $this->response = $response;
 | 
			
		||||
 | 
			
		||||
        parent::__construct($message, $code);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the exception's response body.
 | 
			
		||||
     *
 | 
			
		||||
     * @return mixed
 | 
			
		||||
     */
 | 
			
		||||
    public function getResponseBody()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->response;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										247
									
								
								qwen/php/vendor/league/oauth2-client/src/Provider/GenericProvider.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										247
									
								
								qwen/php/vendor/league/oauth2-client/src/Provider/GenericProvider.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,247 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Provider;
 | 
			
		||||
 | 
			
		||||
use InvalidArgumentException;
 | 
			
		||||
use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
 | 
			
		||||
use League\OAuth2\Client\Token\AccessToken;
 | 
			
		||||
use League\OAuth2\Client\Tool\BearerAuthorizationTrait;
 | 
			
		||||
use Psr\Http\Message\ResponseInterface;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Represents a generic service provider that may be used to interact with any
 | 
			
		||||
 * OAuth 2.0 service provider, using Bearer token authentication.
 | 
			
		||||
 */
 | 
			
		||||
class GenericProvider extends AbstractProvider
 | 
			
		||||
{
 | 
			
		||||
    use BearerAuthorizationTrait;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    private $urlAuthorize;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    private $urlAccessToken;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    private $urlResourceOwnerDetails;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    private $accessTokenMethod;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    private $accessTokenResourceOwnerId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var array|null
 | 
			
		||||
     */
 | 
			
		||||
    private $scopes = null;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    private $scopeSeparator;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    private $responseError = 'error';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    private $responseCode;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    private $responseResourceOwnerId = 'id';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string|null
 | 
			
		||||
     */
 | 
			
		||||
    private $pkceMethod = null;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param array $options
 | 
			
		||||
     * @param array $collaborators
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(array $options = [], array $collaborators = [])
 | 
			
		||||
    {
 | 
			
		||||
        $this->assertRequiredOptions($options);
 | 
			
		||||
 | 
			
		||||
        $possible   = $this->getConfigurableOptions();
 | 
			
		||||
        $configured = array_intersect_key($options, array_flip($possible));
 | 
			
		||||
 | 
			
		||||
        foreach ($configured as $key => $value) {
 | 
			
		||||
            $this->$key = $value;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Remove all options that are only used locally
 | 
			
		||||
        $options = array_diff_key($options, $configured);
 | 
			
		||||
 | 
			
		||||
        parent::__construct($options, $collaborators);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns all options that can be configured.
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    protected function getConfigurableOptions()
 | 
			
		||||
    {
 | 
			
		||||
        return array_merge($this->getRequiredOptions(), [
 | 
			
		||||
            'accessTokenMethod',
 | 
			
		||||
            'accessTokenResourceOwnerId',
 | 
			
		||||
            'scopeSeparator',
 | 
			
		||||
            'responseError',
 | 
			
		||||
            'responseCode',
 | 
			
		||||
            'responseResourceOwnerId',
 | 
			
		||||
            'scopes',
 | 
			
		||||
            'pkceMethod',
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns all options that are required.
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    protected function getRequiredOptions()
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'urlAuthorize',
 | 
			
		||||
            'urlAccessToken',
 | 
			
		||||
            'urlResourceOwnerDetails',
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Verifies that all required options have been passed.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  array $options
 | 
			
		||||
     * @return void
 | 
			
		||||
     * @throws InvalidArgumentException
 | 
			
		||||
     */
 | 
			
		||||
    private function assertRequiredOptions(array $options)
 | 
			
		||||
    {
 | 
			
		||||
        $missing = array_diff_key(array_flip($this->getRequiredOptions()), $options);
 | 
			
		||||
 | 
			
		||||
        if (!empty($missing)) {
 | 
			
		||||
            throw new InvalidArgumentException(
 | 
			
		||||
                'Required options not defined: ' . implode(', ', array_keys($missing))
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    public function getBaseAuthorizationUrl()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->urlAuthorize;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    public function getBaseAccessTokenUrl(array $params)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->urlAccessToken;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    public function getResourceOwnerDetailsUrl(AccessToken $token)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->urlResourceOwnerDetails;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    public function getDefaultScopes()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->scopes;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    protected function getAccessTokenMethod()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->accessTokenMethod ?: parent::getAccessTokenMethod();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    protected function getAccessTokenResourceOwnerId()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->accessTokenResourceOwnerId ?: parent::getAccessTokenResourceOwnerId();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    protected function getScopeSeparator()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->scopeSeparator ?: parent::getScopeSeparator();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    protected function getPkceMethod()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->pkceMethod ?: parent::getPkceMethod();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    protected function checkResponse(ResponseInterface $response, $data)
 | 
			
		||||
    {
 | 
			
		||||
        if (!empty($data[$this->responseError])) {
 | 
			
		||||
            $error = $data[$this->responseError];
 | 
			
		||||
            if (!is_string($error)) {
 | 
			
		||||
                $error = var_export($error, true);
 | 
			
		||||
            }
 | 
			
		||||
            $code  = $this->responseCode && !empty($data[$this->responseCode])? $data[$this->responseCode] : 0;
 | 
			
		||||
            if (!is_int($code)) {
 | 
			
		||||
                $code = intval($code);
 | 
			
		||||
            }
 | 
			
		||||
            throw new IdentityProviderException($error, $code, $data);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    protected function createResourceOwner(array $response, AccessToken $token)
 | 
			
		||||
    {
 | 
			
		||||
        return new GenericResourceOwner($response, $this->responseResourceOwnerId);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										61
									
								
								qwen/php/vendor/league/oauth2-client/src/Provider/GenericResourceOwner.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								qwen/php/vendor/league/oauth2-client/src/Provider/GenericResourceOwner.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Provider;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Represents a generic resource owner for use with the GenericProvider.
 | 
			
		||||
 */
 | 
			
		||||
class GenericResourceOwner implements ResourceOwnerInterface
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var array
 | 
			
		||||
     */
 | 
			
		||||
    protected $response;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    protected $resourceOwnerId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param array $response
 | 
			
		||||
     * @param string $resourceOwnerId
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(array $response, $resourceOwnerId)
 | 
			
		||||
    {
 | 
			
		||||
        $this->response = $response;
 | 
			
		||||
        $this->resourceOwnerId = $resourceOwnerId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the identifier of the authorized resource owner.
 | 
			
		||||
     *
 | 
			
		||||
     * @return mixed
 | 
			
		||||
     */
 | 
			
		||||
    public function getId()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->response[$this->resourceOwnerId];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the raw resource owner response.
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function toArray()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->response;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										36
									
								
								qwen/php/vendor/league/oauth2-client/src/Provider/ResourceOwnerInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								qwen/php/vendor/league/oauth2-client/src/Provider/ResourceOwnerInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Provider;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Classes implementing `ResourceOwnerInterface` may be used to represent
 | 
			
		||||
 * the resource owner authenticated with a service provider.
 | 
			
		||||
 */
 | 
			
		||||
interface ResourceOwnerInterface
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the identifier of the authorized resource owner.
 | 
			
		||||
     *
 | 
			
		||||
     * @return mixed
 | 
			
		||||
     */
 | 
			
		||||
    public function getId();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Return all of the owner details available as an array.
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function toArray();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										251
									
								
								qwen/php/vendor/league/oauth2-client/src/Token/AccessToken.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										251
									
								
								qwen/php/vendor/league/oauth2-client/src/Token/AccessToken.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,251 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Token;
 | 
			
		||||
 | 
			
		||||
use InvalidArgumentException;
 | 
			
		||||
use RuntimeException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Represents an access token.
 | 
			
		||||
 *
 | 
			
		||||
 * @link http://tools.ietf.org/html/rfc6749#section-1.4 Access Token (RFC 6749, §1.4)
 | 
			
		||||
 */
 | 
			
		||||
class AccessToken implements AccessTokenInterface, ResourceOwnerAccessTokenInterface, SettableRefreshTokenInterface
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    protected $accessToken;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var int
 | 
			
		||||
     */
 | 
			
		||||
    protected $expires;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    protected $refreshToken;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    protected $resourceOwnerId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var array
 | 
			
		||||
     */
 | 
			
		||||
    protected $values = [];
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var int
 | 
			
		||||
     */
 | 
			
		||||
    private static $timeNow;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the time now. This should only be used for testing purposes.
 | 
			
		||||
     *
 | 
			
		||||
     * @param int $timeNow the time in seconds since epoch
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public static function setTimeNow($timeNow)
 | 
			
		||||
    {
 | 
			
		||||
        self::$timeNow = $timeNow;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Reset the time now if it was set for test purposes.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public static function resetTimeNow()
 | 
			
		||||
    {
 | 
			
		||||
        self::$timeNow = null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return int
 | 
			
		||||
     */
 | 
			
		||||
    public function getTimeNow()
 | 
			
		||||
    {
 | 
			
		||||
        return self::$timeNow ? self::$timeNow : time();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructs an access token.
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $options An array of options returned by the service provider
 | 
			
		||||
     *     in the access token request. The `access_token` option is required.
 | 
			
		||||
     * @throws InvalidArgumentException if `access_token` is not provided in `$options`.
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(array $options = [])
 | 
			
		||||
    {
 | 
			
		||||
        if (empty($options['access_token'])) {
 | 
			
		||||
            throw new InvalidArgumentException('Required option not passed: "access_token"');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $this->accessToken = $options['access_token'];
 | 
			
		||||
 | 
			
		||||
        if (!empty($options['resource_owner_id'])) {
 | 
			
		||||
            $this->resourceOwnerId = $options['resource_owner_id'];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        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 (isset($options['expires_in'])) {
 | 
			
		||||
            if (!is_numeric($options['expires_in'])) {
 | 
			
		||||
                throw new \InvalidArgumentException('expires_in value must be an integer');
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $this->expires = $options['expires_in'] != 0 ? $this->getTimeNow() + $options['expires_in'] : 0;
 | 
			
		||||
        } 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 = (int) $options['expires'];
 | 
			
		||||
 | 
			
		||||
            if (!$this->isExpirationTimestamp($expires)) {
 | 
			
		||||
                $expires += $this->getTimeNow();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $this->expires = $expires;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Capture any additional values that might exist in the token but are
 | 
			
		||||
        // not part of the standard response. Vendors will sometimes pass
 | 
			
		||||
        // additional user data this way.
 | 
			
		||||
        $this->values = array_diff_key($options, array_flip([
 | 
			
		||||
            'access_token',
 | 
			
		||||
            'resource_owner_id',
 | 
			
		||||
            'refresh_token',
 | 
			
		||||
            'expires_in',
 | 
			
		||||
            'expires',
 | 
			
		||||
        ]));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Check if a value is an expiration timestamp or second value.
 | 
			
		||||
     *
 | 
			
		||||
     * @param integer $value
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    protected function isExpirationTimestamp($value)
 | 
			
		||||
    {
 | 
			
		||||
        // If the given value is larger than the original OAuth 2 draft date,
 | 
			
		||||
        // assume that it is meant to be a (possible expired) timestamp.
 | 
			
		||||
        $oauth2InceptionDate = 1349067600; // 2012-10-01
 | 
			
		||||
        return ($value > $oauth2InceptionDate);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    public function getToken()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->accessToken;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    public function getRefreshToken()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->refreshToken;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    public function setRefreshToken($refreshToken)
 | 
			
		||||
    {
 | 
			
		||||
        $this->refreshToken = $refreshToken;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    public function getExpires()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->expires;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    public function getResourceOwnerId()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->resourceOwnerId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    public function hasExpired()
 | 
			
		||||
    {
 | 
			
		||||
        $expires = $this->getExpires();
 | 
			
		||||
 | 
			
		||||
        if (empty($expires)) {
 | 
			
		||||
            throw new RuntimeException('"expires" is not set on the token');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $expires < $this->getTimeNow();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    public function getValues()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->values;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    public function __toString()
 | 
			
		||||
    {
 | 
			
		||||
        return (string) $this->getToken();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    public function jsonSerialize()
 | 
			
		||||
    {
 | 
			
		||||
        $parameters = $this->values;
 | 
			
		||||
 | 
			
		||||
        if ($this->accessToken) {
 | 
			
		||||
            $parameters['access_token'] = $this->accessToken;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($this->refreshToken) {
 | 
			
		||||
            $parameters['refresh_token'] = $this->refreshToken;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($this->expires) {
 | 
			
		||||
            $parameters['expires'] = $this->expires;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($this->resourceOwnerId) {
 | 
			
		||||
            $parameters['resource_owner_id'] = $this->resourceOwnerId;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $parameters;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										74
									
								
								qwen/php/vendor/league/oauth2-client/src/Token/AccessTokenInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								qwen/php/vendor/league/oauth2-client/src/Token/AccessTokenInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,74 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Token;
 | 
			
		||||
 | 
			
		||||
use JsonSerializable;
 | 
			
		||||
use ReturnTypeWillChange;
 | 
			
		||||
use RuntimeException;
 | 
			
		||||
 | 
			
		||||
interface AccessTokenInterface extends JsonSerializable
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the access token string of this instance.
 | 
			
		||||
     *
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    public function getToken();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the refresh token, if defined.
 | 
			
		||||
     *
 | 
			
		||||
     * @return string|null
 | 
			
		||||
     */
 | 
			
		||||
    public function getRefreshToken();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the expiration timestamp in seconds, if defined.
 | 
			
		||||
     *
 | 
			
		||||
     * @return integer|null
 | 
			
		||||
     */
 | 
			
		||||
    public function getExpires();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks if this token has expired.
 | 
			
		||||
     *
 | 
			
		||||
     * @return boolean true if the token has expired, false otherwise.
 | 
			
		||||
     * @throws RuntimeException if 'expires' is not set on the token.
 | 
			
		||||
     */
 | 
			
		||||
    public function hasExpired();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns additional vendor values stored in the token.
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function getValues();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a string representation of the access token
 | 
			
		||||
     *
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    public function __toString();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns an array of parameters to serialize when this is serialized with
 | 
			
		||||
     * json_encode().
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    #[ReturnTypeWillChange]
 | 
			
		||||
    public function jsonSerialize();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										25
									
								
								qwen/php/vendor/league/oauth2-client/src/Token/ResourceOwnerAccessTokenInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								qwen/php/vendor/league/oauth2-client/src/Token/ResourceOwnerAccessTokenInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Token;
 | 
			
		||||
 | 
			
		||||
interface ResourceOwnerAccessTokenInterface extends AccessTokenInterface
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the resource owner identifier, if defined.
 | 
			
		||||
     *
 | 
			
		||||
     * @return string|null
 | 
			
		||||
     */
 | 
			
		||||
    public function getResourceOwnerId();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								qwen/php/vendor/league/oauth2-client/src/Token/SettableRefreshTokenInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								qwen/php/vendor/league/oauth2-client/src/Token/SettableRefreshTokenInterface.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Token;
 | 
			
		||||
 | 
			
		||||
interface SettableRefreshTokenInterface
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets or replaces the refresh token with the provided refresh token.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $refreshToken
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function setRefreshToken($refreshToken);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										52
									
								
								qwen/php/vendor/league/oauth2-client/src/Tool/ArrayAccessorTrait.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								qwen/php/vendor/league/oauth2-client/src/Tool/ArrayAccessorTrait.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Tool;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Provides generic array navigation tools.
 | 
			
		||||
 */
 | 
			
		||||
trait ArrayAccessorTrait
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a value by key using dot notation.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  array      $data
 | 
			
		||||
     * @param  string     $key
 | 
			
		||||
     * @param  mixed|null $default
 | 
			
		||||
     * @return mixed
 | 
			
		||||
     */
 | 
			
		||||
    private function getValueByKey(array $data, $key, $default = null)
 | 
			
		||||
    {
 | 
			
		||||
        if (!is_string($key) || empty($key) || !count($data)) {
 | 
			
		||||
            return $default;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (strpos($key, '.') !== false) {
 | 
			
		||||
            $keys = explode('.', $key);
 | 
			
		||||
 | 
			
		||||
            foreach ($keys as $innerKey) {
 | 
			
		||||
                if (!is_array($data) || !array_key_exists($innerKey, $data)) {
 | 
			
		||||
                    return $default;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                $data = $data[$innerKey];
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return $data;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return array_key_exists($key, $data) ? $data[$key] : $default;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										36
									
								
								qwen/php/vendor/league/oauth2-client/src/Tool/BearerAuthorizationTrait.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								qwen/php/vendor/league/oauth2-client/src/Tool/BearerAuthorizationTrait.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Tool;
 | 
			
		||||
 | 
			
		||||
use League\OAuth2\Client\Token\AccessTokenInterface;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Enables `Bearer` header authorization for providers.
 | 
			
		||||
 *
 | 
			
		||||
 * @link http://tools.ietf.org/html/rfc6750 Bearer Token Usage (RFC 6750)
 | 
			
		||||
 */
 | 
			
		||||
trait BearerAuthorizationTrait
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns authorization headers for the 'bearer' grant.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  AccessTokenInterface|string|null $token Either a string or an access token instance
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    protected function getAuthorizationHeaders($token = null)
 | 
			
		||||
    {
 | 
			
		||||
        return ['Authorization' => 'Bearer ' . $token];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										70
									
								
								qwen/php/vendor/league/oauth2-client/src/Tool/GuardedPropertyTrait.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								qwen/php/vendor/league/oauth2-client/src/Tool/GuardedPropertyTrait.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,70 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Tool;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Provides support for blacklisting explicit properties from the
 | 
			
		||||
 * mass assignment behavior.
 | 
			
		||||
 */
 | 
			
		||||
trait GuardedPropertyTrait
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * The properties that aren't mass assignable.
 | 
			
		||||
     *
 | 
			
		||||
     * @var array
 | 
			
		||||
     */
 | 
			
		||||
    protected $guarded = [];
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Attempts to mass assign the given options to explicitly defined properties,
 | 
			
		||||
     * skipping over any properties that are defined in the guarded array.
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $options
 | 
			
		||||
     * @return mixed
 | 
			
		||||
     */
 | 
			
		||||
    protected function fillProperties(array $options = [])
 | 
			
		||||
    {
 | 
			
		||||
        if (isset($options['guarded'])) {
 | 
			
		||||
            unset($options['guarded']);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        foreach ($options as $option => $value) {
 | 
			
		||||
            if (property_exists($this, $option) && !$this->isGuarded($option)) {
 | 
			
		||||
                $this->{$option} = $value;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns current guarded properties.
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function getGuarded()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->guarded;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Determines if the given property is guarded.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  string  $property
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function isGuarded($property)
 | 
			
		||||
    {
 | 
			
		||||
        return in_array($property, $this->getGuarded());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										83
									
								
								qwen/php/vendor/league/oauth2-client/src/Tool/MacAuthorizationTrait.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								qwen/php/vendor/league/oauth2-client/src/Tool/MacAuthorizationTrait.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Tool;
 | 
			
		||||
 | 
			
		||||
use League\OAuth2\Client\Token\AccessToken;
 | 
			
		||||
use League\OAuth2\Client\Token\AccessTokenInterface;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Enables `MAC` header authorization for providers.
 | 
			
		||||
 *
 | 
			
		||||
 * @link http://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-05 Message Authentication Code (MAC) Tokens
 | 
			
		||||
 */
 | 
			
		||||
trait MacAuthorizationTrait
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the id of this token for MAC generation.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  AccessToken $token
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    abstract protected function getTokenId(AccessToken $token);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the MAC signature for the current request.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  string $id
 | 
			
		||||
     * @param  integer $ts
 | 
			
		||||
     * @param  string $nonce
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    abstract protected function getMacSignature($id, $ts, $nonce);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a new random string to use as the state parameter in an
 | 
			
		||||
     * authorization flow.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  int $length Length of the random string to be generated.
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    abstract protected function getRandomState($length = 32);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the authorization headers for the 'mac' grant.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  AccessTokenInterface|string|null $token Either a string or an access token instance
 | 
			
		||||
     * @return array
 | 
			
		||||
     * @codeCoverageIgnore
 | 
			
		||||
     *
 | 
			
		||||
     * @todo This is currently untested and provided only as an example. If you
 | 
			
		||||
     * complete the implementation, please create a pull request for
 | 
			
		||||
     * https://github.com/thephpleague/oauth2-client
 | 
			
		||||
     */
 | 
			
		||||
    protected function getAuthorizationHeaders($token = null)
 | 
			
		||||
    {
 | 
			
		||||
        if ($token === null) {
 | 
			
		||||
            return [];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $ts    = time();
 | 
			
		||||
        $id    = $this->getTokenId($token);
 | 
			
		||||
        $nonce = $this->getRandomState(16);
 | 
			
		||||
        $mac   = $this->getMacSignature($id, $ts, $nonce);
 | 
			
		||||
 | 
			
		||||
        $parts = [];
 | 
			
		||||
        foreach (compact('id', 'ts', 'nonce', 'mac') as $key => $value) {
 | 
			
		||||
            $parts[] = sprintf('%s="%s"', $key, $value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return ['Authorization' => 'MAC ' . implode(', ', $parts)];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										122
									
								
								qwen/php/vendor/league/oauth2-client/src/Tool/ProviderRedirectTrait.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								qwen/php/vendor/league/oauth2-client/src/Tool/ProviderRedirectTrait.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,122 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Tool;
 | 
			
		||||
 | 
			
		||||
use GuzzleHttp\Exception\BadResponseException;
 | 
			
		||||
use GuzzleHttp\Psr7\Uri;
 | 
			
		||||
use InvalidArgumentException;
 | 
			
		||||
use Psr\Http\Message\RequestInterface;
 | 
			
		||||
use Psr\Http\Message\ResponseInterface;
 | 
			
		||||
 | 
			
		||||
trait ProviderRedirectTrait
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Maximum number of times to follow provider initiated redirects
 | 
			
		||||
     *
 | 
			
		||||
     * @var integer
 | 
			
		||||
     */
 | 
			
		||||
    protected $redirectLimit = 2;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Retrieves a response for a given request and retrieves subsequent
 | 
			
		||||
     * responses, with authorization headers, if a redirect is detected.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  RequestInterface $request
 | 
			
		||||
     * @return ResponseInterface
 | 
			
		||||
     * @throws BadResponseException
 | 
			
		||||
     */
 | 
			
		||||
    protected function followRequestRedirects(RequestInterface $request)
 | 
			
		||||
    {
 | 
			
		||||
        $response = null;
 | 
			
		||||
        $attempts = 0;
 | 
			
		||||
 | 
			
		||||
        while ($attempts < $this->redirectLimit) {
 | 
			
		||||
            $attempts++;
 | 
			
		||||
            $response = $this->getHttpClient()->send($request, [
 | 
			
		||||
                'allow_redirects' => false
 | 
			
		||||
            ]);
 | 
			
		||||
 | 
			
		||||
            if ($this->isRedirect($response)) {
 | 
			
		||||
                $redirectUrl = new Uri($response->getHeader('Location')[0]);
 | 
			
		||||
                $request = $request->withUri($redirectUrl);
 | 
			
		||||
            } else {
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $response;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns the HTTP client instance.
 | 
			
		||||
     *
 | 
			
		||||
     * @return GuzzleHttp\ClientInterface
 | 
			
		||||
     */
 | 
			
		||||
    abstract public function getHttpClient();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Retrieves current redirect limit.
 | 
			
		||||
     *
 | 
			
		||||
     * @return integer
 | 
			
		||||
     */
 | 
			
		||||
    public function getRedirectLimit()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->redirectLimit;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Determines if a given response is a redirect.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  ResponseInterface  $response
 | 
			
		||||
     *
 | 
			
		||||
     * @return boolean
 | 
			
		||||
     */
 | 
			
		||||
    protected function isRedirect(ResponseInterface $response)
 | 
			
		||||
    {
 | 
			
		||||
        $statusCode = $response->getStatusCode();
 | 
			
		||||
 | 
			
		||||
        return $statusCode > 300 && $statusCode < 400 && $response->hasHeader('Location');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sends a request instance and returns a response instance.
 | 
			
		||||
     *
 | 
			
		||||
     * WARNING: This method does not attempt to catch exceptions caused by HTTP
 | 
			
		||||
     * errors! It is recommended to wrap this method in a try/catch block.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  RequestInterface $request
 | 
			
		||||
     * @return ResponseInterface
 | 
			
		||||
     */
 | 
			
		||||
    public function getResponse(RequestInterface $request)
 | 
			
		||||
    {
 | 
			
		||||
        try {
 | 
			
		||||
            $response = $this->followRequestRedirects($request);
 | 
			
		||||
        } catch (BadResponseException $e) {
 | 
			
		||||
            $response = $e->getResponse();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $response;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Updates the redirect limit.
 | 
			
		||||
     *
 | 
			
		||||
     * @param integer $limit
 | 
			
		||||
     * @return League\OAuth2\Client\Provider\AbstractProvider
 | 
			
		||||
     * @throws InvalidArgumentException
 | 
			
		||||
     */
 | 
			
		||||
    public function setRedirectLimit($limit)
 | 
			
		||||
    {
 | 
			
		||||
        if (!is_int($limit)) {
 | 
			
		||||
            throw new InvalidArgumentException('redirectLimit must be an integer.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($limit < 1) {
 | 
			
		||||
            throw new InvalidArgumentException('redirectLimit must be greater than or equal to one.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $this->redirectLimit = $limit;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										33
									
								
								qwen/php/vendor/league/oauth2-client/src/Tool/QueryBuilderTrait.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								qwen/php/vendor/league/oauth2-client/src/Tool/QueryBuilderTrait.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Tool;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Provides a standard way to generate query strings.
 | 
			
		||||
 */
 | 
			
		||||
trait QueryBuilderTrait
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Build a query string from an array.
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $params
 | 
			
		||||
     *
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    protected function buildQueryString(array $params)
 | 
			
		||||
    {
 | 
			
		||||
        return http_build_query($params, '', '&', \PHP_QUERY_RFC3986);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										87
									
								
								qwen/php/vendor/league/oauth2-client/src/Tool/RequestFactory.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								qwen/php/vendor/league/oauth2-client/src/Tool/RequestFactory.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,87 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Tool;
 | 
			
		||||
 | 
			
		||||
use GuzzleHttp\Psr7\Request;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Used to produce PSR-7 Request instances.
 | 
			
		||||
 *
 | 
			
		||||
 * @link https://github.com/guzzle/guzzle/pull/1101
 | 
			
		||||
 */
 | 
			
		||||
class RequestFactory
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates a PSR-7 Request instance.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  null|string $method HTTP method for the request.
 | 
			
		||||
     * @param  null|string $uri URI for the request.
 | 
			
		||||
     * @param  array $headers Headers for the message.
 | 
			
		||||
     * @param  string|resource|StreamInterface $body Message body.
 | 
			
		||||
     * @param  string $version HTTP protocol version.
 | 
			
		||||
     *
 | 
			
		||||
     * @return Request
 | 
			
		||||
     */
 | 
			
		||||
    public function getRequest(
 | 
			
		||||
        $method,
 | 
			
		||||
        $uri,
 | 
			
		||||
        array $headers = [],
 | 
			
		||||
        $body = null,
 | 
			
		||||
        $version = '1.1'
 | 
			
		||||
    ) {
 | 
			
		||||
        return new Request($method, $uri, $headers, $body, $version);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Parses simplified options.
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $options Simplified options.
 | 
			
		||||
     *
 | 
			
		||||
     * @return array Extended options for use with getRequest.
 | 
			
		||||
     */
 | 
			
		||||
    protected function parseOptions(array $options)
 | 
			
		||||
    {
 | 
			
		||||
        // Should match default values for getRequest
 | 
			
		||||
        $defaults = [
 | 
			
		||||
            'headers' => [],
 | 
			
		||||
            'body'    => null,
 | 
			
		||||
            'version' => '1.1',
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        return array_merge($defaults, $options);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates a request using a simplified array of options.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  null|string $method
 | 
			
		||||
     * @param  null|string $uri
 | 
			
		||||
     * @param  array $options
 | 
			
		||||
     *
 | 
			
		||||
     * @return Request
 | 
			
		||||
     */
 | 
			
		||||
    public function getRequestWithOptions($method, $uri, array $options = [])
 | 
			
		||||
    {
 | 
			
		||||
        $options = $this->parseOptions($options);
 | 
			
		||||
 | 
			
		||||
        return $this->getRequest(
 | 
			
		||||
            $method,
 | 
			
		||||
            $uri,
 | 
			
		||||
            $options['headers'],
 | 
			
		||||
            $options['body'],
 | 
			
		||||
            $options['version']
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										56
									
								
								qwen/php/vendor/league/oauth2-client/src/Tool/RequiredParameterTrait.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								qwen/php/vendor/league/oauth2-client/src/Tool/RequiredParameterTrait.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * This file is part of the league/oauth2-client library
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view the LICENSE
 | 
			
		||||
 * file that was distributed with this source code.
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>
 | 
			
		||||
 * @license http://opensource.org/licenses/MIT MIT
 | 
			
		||||
 * @link http://thephpleague.com/oauth2-client/ Documentation
 | 
			
		||||
 * @link https://packagist.org/packages/league/oauth2-client Packagist
 | 
			
		||||
 * @link https://github.com/thephpleague/oauth2-client GitHub
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace League\OAuth2\Client\Tool;
 | 
			
		||||
 | 
			
		||||
use BadMethodCallException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Provides functionality to check for required parameters.
 | 
			
		||||
 */
 | 
			
		||||
trait RequiredParameterTrait
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks for a required parameter in a hash.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws BadMethodCallException
 | 
			
		||||
     * @param  string $name
 | 
			
		||||
     * @param  array  $params
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    private function checkRequiredParameter($name, array $params)
 | 
			
		||||
    {
 | 
			
		||||
        if (!isset($params[$name])) {
 | 
			
		||||
            throw new BadMethodCallException(sprintf(
 | 
			
		||||
                'Required parameter not passed: "%s"',
 | 
			
		||||
                $name
 | 
			
		||||
            ));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks for multiple required parameters in a hash.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws InvalidArgumentException
 | 
			
		||||
     * @param  array $names
 | 
			
		||||
     * @param  array $params
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    private function checkRequiredParameters(array $names, array $params)
 | 
			
		||||
    {
 | 
			
		||||
        foreach ($names as $name) {
 | 
			
		||||
            $this->checkRequiredParameter($name, $params);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user