diff options
| author | EoleDev <EoleDev@outlook.fr> | 2016-04-14 16:28:25 +0200 |
|---|---|---|
| committer | EoleDev <EoleDev@outlook.fr> | 2016-04-14 16:28:25 +0200 |
| commit | 31d2d0c158ad4daa3dde7a905f3c2e312c194f2e (patch) | |
| tree | 43d761d2aec8265a22c0fdedcc365bacc10dc814 /server/vendor/php-opencloud/common/src/Common/Service/Builder.php | |
| parent | 27730911d8c9253a4f5aa90450c57cdeca9d5d26 (diff) | |
| parent | b348dbc2266a3e8070a3951fb0bd8c19b852ec47 (diff) | |
Merge branch 'compute'
Conflicts:
server/core/LibOverride/genTokenOptions.php
Diffstat (limited to 'server/vendor/php-opencloud/common/src/Common/Service/Builder.php')
| -rwxr-xr-x | server/vendor/php-opencloud/common/src/Common/Service/Builder.php | 168 |
1 files changed, 0 insertions, 168 deletions
diff --git a/server/vendor/php-opencloud/common/src/Common/Service/Builder.php b/server/vendor/php-opencloud/common/src/Common/Service/Builder.php deleted file mode 100755 index 9ccd90d..0000000 --- a/server/vendor/php-opencloud/common/src/Common/Service/Builder.php +++ /dev/null @@ -1,168 +0,0 @@ -<?php declare(strict_types = 1); - -namespace OpenCloud\Common\Service; - -use GuzzleHttp\Client; -use GuzzleHttp\ClientInterface; -use GuzzleHttp\Middleware as GuzzleMiddleware; -use OpenCloud\Common\Auth\IdentityService; -use OpenCloud\Common\Auth\Token; -use OpenCloud\Common\Transport\HandlerStack; -use OpenCloud\Common\Transport\Middleware; -use OpenCloud\Common\Transport\Utils; - -/** - * A Builder for easily creating OpenCloud services. - * - * @package OpenCloud\Common\Service - */ -class Builder -{ - /** - * Global options that will be applied to every service created by this builder. - * - * @var array - */ - private $globalOptions = []; - - /** @var string */ - private $rootNamespace; - - /** - * Defaults that will be applied to options if no values are provided by the user. - * - * @var array - */ - private $defaults = ['urlType' => 'publicURL']; - - /** - * @param array $globalOptions Options that will be applied to every service created by this builder. - * Eventually they will be merged (and if necessary overridden) by the - * service-specific options passed in. - */ - public function __construct(array $globalOptions = [], $rootNamespace = 'OpenCloud') - { - $this->globalOptions = $globalOptions; - $this->rootNamespace = $rootNamespace; - } - - /** - * Internal method which resolves the API and Service classes for a service. - * - * @param string $serviceName The name of the service, e.g. Compute - * @param int $serviceVersion The major version of the service, e.g. 2 - * - * @return array - */ - private function getClasses(string $serviceName, int $serviceVersion) - { - $rootNamespace = sprintf("%s\\%s\\v%d", $this->rootNamespace, $serviceName, $serviceVersion); - - return [ - sprintf("%s\\Api", $rootNamespace), - sprintf("%s\\Service", $rootNamespace), - ]; - } - - /** - * This method will return an OpenCloud service ready fully built and ready for use. There is - * some initial setup that may prohibit users from directly instantiating the service class - * directly - this setup includes the configuration of the HTTP client's base URL, and the - * attachment of an authentication handler. - * - * @param string $serviceName The name of the service as it appears in the OpenCloud\* namespace - * @param int $serviceVersion The major version of the service - * @param array $serviceOptions The service-specific options to use - * - * @return \OpenCloud\Common\Service\ServiceInterface - * - * @throws \Exception - */ - public function createService(string $serviceName, int $serviceVersion, array $serviceOptions = []): ServiceInterface - { - $options = $this->mergeOptions($serviceOptions); - - $this->stockAuthHandler($options); - $this->stockHttpClient($options, $serviceName); - - list($apiClass, $serviceClass) = $this->getClasses($serviceName, $serviceVersion); - - return new $serviceClass($options['httpClient'], new $apiClass()); - } - - private function stockHttpClient(array &$options, string $serviceName) - { - if (!isset($options['httpClient']) || !($options['httpClient'] instanceof ClientInterface)) { - if (strcasecmp($serviceName, 'identity') === 0) { - $baseUrl = $options['authUrl']; - $stack = $this->getStack($options['authHandler']); - } else { - list($token, $baseUrl) = $options['identityService']->authenticate($options); - $stack = $this->getStack($options['authHandler'], $token); - } - - $this->addDebugMiddleware($options, $stack); - - $options['httpClient'] = $this->httpClient($baseUrl, $stack); - } - } - - /** - * @codeCoverageIgnore - */ - private function addDebugMiddleware(array $options, HandlerStack &$stack) - { - if (!empty($options['debugLog']) - && !empty($options['logger']) - && !empty($options['messageFormatter']) - ) { - $stack->push(GuzzleMiddleware::log($options['logger'], $options['messageFormatter'])); - } - } - - /** - * @param array $options - * - * @codeCoverageIgnore - */ - private function stockAuthHandler(array &$options) - { - if (!isset($options['authHandler'])) { - $options['authHandler'] = function () use ($options) { - return $options['identityService']->generateToken($options); - }; - } - } - - private function getStack(callable $authHandler, Token $token = null): HandlerStack - { - $stack = HandlerStack::create(); - $stack->push(Middleware::authHandler($authHandler, $token)); - return $stack; - } - - private function httpClient(string $baseUrl, HandlerStack $stack): ClientInterface - { - return new Client([ - 'base_uri' => Utils::normalizeUrl($baseUrl), - 'handler' => $stack, - ]); - } - - private function mergeOptions(array $serviceOptions): array - { - $options = array_merge($this->defaults, $this->globalOptions, $serviceOptions); - - if (!isset($options['authUrl'])) { - throw new \InvalidArgumentException('"authUrl" is a required option'); - } - - if (!isset($options['identityService']) || !($options['identityService'] instanceof IdentityService)) { - throw new \InvalidArgumentException(sprintf( - '"identityService" must be specified and implement %s', IdentityService::class - )); - } - - return $options; - } -}
\ No newline at end of file |
