Add Google authentication
This commit is contained in:
229
vendor/OAuth/ServiceFactory.php
vendored
Executable file
229
vendor/OAuth/ServiceFactory.php
vendored
Executable file
@@ -0,0 +1,229 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* OAuth service factory.
|
||||
*
|
||||
* PHP version 5.4
|
||||
*
|
||||
* @category OAuth
|
||||
* @author David Desberg <david@daviddesberg.com>
|
||||
* @author Pieter Hordijk <info@pieterhordijk.com>
|
||||
* @copyright Copyright (c) 2013 The authors
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
*/
|
||||
|
||||
namespace OAuth;
|
||||
|
||||
use OAuth\Common\Service\ServiceInterface;
|
||||
use OAuth\Common\Consumer\CredentialsInterface;
|
||||
use OAuth\Common\Storage\TokenStorageInterface;
|
||||
use OAuth\Common\Http\Client\ClientInterface;
|
||||
use OAuth\Common\Http\Client\StreamClient;
|
||||
use OAuth\Common\Http\Uri\UriInterface;
|
||||
use OAuth\Common\Exception\Exception;
|
||||
use OAuth\OAuth1\Signature\Signature;
|
||||
|
||||
class ServiceFactory
|
||||
{
|
||||
/**
|
||||
*@var ClientInterface
|
||||
*/
|
||||
protected $httpClient;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $serviceClassMap = array(
|
||||
'OAuth1' => array(),
|
||||
'OAuth2' => array()
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $serviceBuilders = array(
|
||||
'OAuth2' => 'buildV2Service',
|
||||
'OAuth1' => 'buildV1Service',
|
||||
);
|
||||
|
||||
/**
|
||||
* @param ClientInterface $httpClient
|
||||
*
|
||||
* @return ServiceFactory
|
||||
*/
|
||||
public function setHttpClient(ClientInterface $httpClient)
|
||||
{
|
||||
$this->httpClient = $httpClient;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a custom service to classname mapping.
|
||||
*
|
||||
* @param string $serviceName Name of the service
|
||||
* @param string $className Class to instantiate
|
||||
*
|
||||
* @return ServiceFactory
|
||||
*
|
||||
* @throws Exception If the class is nonexistent or does not implement a valid ServiceInterface
|
||||
*/
|
||||
public function registerService($serviceName, $className)
|
||||
{
|
||||
if (!class_exists($className)) {
|
||||
throw new Exception(sprintf('Service class %s does not exist.', $className));
|
||||
}
|
||||
|
||||
$reflClass = new \ReflectionClass($className);
|
||||
|
||||
foreach (array('OAuth2', 'OAuth1') as $version) {
|
||||
if ($reflClass->implementsInterface('OAuth\\' . $version . '\\Service\\ServiceInterface')) {
|
||||
$this->serviceClassMap[$version][ucfirst($serviceName)] = $className;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Exception(sprintf('Service class %s must implement ServiceInterface.', $className));
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds and returns oauth services
|
||||
*
|
||||
* It will first try to build an OAuth2 service and if none found it will try to build an OAuth1 service
|
||||
*
|
||||
* @param string $serviceName Name of service to create
|
||||
* @param CredentialsInterface $credentials
|
||||
* @param TokenStorageInterface $storage
|
||||
* @param array|null $scopes If creating an oauth2 service, array of scopes
|
||||
* @param UriInterface|null $baseApiUri
|
||||
*
|
||||
* @return ServiceInterface
|
||||
*/
|
||||
public function createService(
|
||||
$serviceName,
|
||||
CredentialsInterface $credentials,
|
||||
TokenStorageInterface $storage,
|
||||
$scopes = array(),
|
||||
UriInterface $baseApiUri = null
|
||||
) {
|
||||
if (!$this->httpClient) {
|
||||
// for backwards compatibility.
|
||||
$this->httpClient = new StreamClient();
|
||||
}
|
||||
|
||||
foreach ($this->serviceBuilders as $version => $buildMethod) {
|
||||
$fullyQualifiedServiceName = $this->getFullyQualifiedServiceName($serviceName, $version);
|
||||
|
||||
if (class_exists($fullyQualifiedServiceName)) {
|
||||
return $this->$buildMethod($fullyQualifiedServiceName, $credentials, $storage, $scopes, $baseApiUri);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the fully qualified name of the service
|
||||
*
|
||||
* @param string $serviceName The name of the service of which to get the fully qualified name
|
||||
* @param string $type The type of the service to get (either OAuth1 or OAuth2)
|
||||
*
|
||||
* @return string The fully qualified name of the service
|
||||
*/
|
||||
private function getFullyQualifiedServiceName($serviceName, $type)
|
||||
{
|
||||
$serviceName = ucfirst($serviceName);
|
||||
|
||||
if (isset($this->serviceClassMap[$type][$serviceName])) {
|
||||
return $this->serviceClassMap[$type][$serviceName];
|
||||
}
|
||||
|
||||
return '\\OAuth\\' . $type . '\\Service\\' . $serviceName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds v2 services
|
||||
*
|
||||
* @param string $serviceName The fully qualified service name
|
||||
* @param CredentialsInterface $credentials
|
||||
* @param TokenStorageInterface $storage
|
||||
* @param array|null $scopes Array of scopes for the service
|
||||
* @param UriInterface|null $baseApiUri
|
||||
*
|
||||
* @return ServiceInterface
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
private function buildV2Service(
|
||||
$serviceName,
|
||||
CredentialsInterface $credentials,
|
||||
TokenStorageInterface $storage,
|
||||
array $scopes,
|
||||
UriInterface $baseApiUri = null
|
||||
) {
|
||||
return new $serviceName(
|
||||
$credentials,
|
||||
$this->httpClient,
|
||||
$storage,
|
||||
$this->resolveScopes($serviceName, $scopes),
|
||||
$baseApiUri
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves scopes for v2 services
|
||||
*
|
||||
* @param string $serviceName The fully qualified service name
|
||||
* @param array $scopes List of scopes for the service
|
||||
*
|
||||
* @return array List of resolved scopes
|
||||
*/
|
||||
private function resolveScopes($serviceName, array $scopes)
|
||||
{
|
||||
$reflClass = new \ReflectionClass($serviceName);
|
||||
$constants = $reflClass->getConstants();
|
||||
|
||||
$resolvedScopes = array();
|
||||
foreach ($scopes as $scope) {
|
||||
$key = strtoupper('SCOPE_' . $scope);
|
||||
|
||||
if (array_key_exists($key, $constants)) {
|
||||
$resolvedScopes[] = $constants[$key];
|
||||
} else {
|
||||
$resolvedScopes[] = $scope;
|
||||
}
|
||||
}
|
||||
|
||||
return $resolvedScopes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds v1 services
|
||||
*
|
||||
* @param string $serviceName The fully qualified service name
|
||||
* @param CredentialsInterface $credentials
|
||||
* @param TokenStorageInterface $storage
|
||||
* @param array $scopes
|
||||
* @param UriInterface $baseApiUri
|
||||
*
|
||||
* @return ServiceInterface
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
private function buildV1Service(
|
||||
$serviceName,
|
||||
CredentialsInterface $credentials,
|
||||
TokenStorageInterface $storage,
|
||||
$scopes,
|
||||
UriInterface $baseApiUri = null
|
||||
) {
|
||||
if (!empty($scopes)) {
|
||||
throw new Exception(
|
||||
'Scopes passed to ServiceFactory::createService but an OAuth1 service was requested.'
|
||||
);
|
||||
}
|
||||
|
||||
return new $serviceName($credentials, $this->httpClient, $storage, new Signature($credentials), $baseApiUri);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user