From 78e6e5787ce2df4ae55f5b4d64c792b8f20696d7 Mon Sep 17 00:00:00 2001 From: Eole Date: Sat, 30 Jan 2016 11:41:45 +0100 Subject: [PATCH] Begin of Identity Implementation, Begin of Token management for Identification --- server/config.inc.php | 3 + server/core/Identity.php | 20 ++- server/core/LibOverride/Builder.php | 169 ++++++++++++++++++++++++++ server/core/LibOverride/OpenStack.php | 43 +++++++ server/core/LibOverride/Test.php | 63 ++++++++++ server/core/Plugin_Api.php | 4 +- server/index.php | 13 +- server/init.php | 29 ++++- 8 files changed, 335 insertions(+), 9 deletions(-) create mode 100644 server/core/LibOverride/Builder.php create mode 100644 server/core/LibOverride/OpenStack.php create mode 100644 server/core/LibOverride/Test.php diff --git a/server/config.inc.php b/server/config.inc.php index 07adcbd..9767c72 100644 --- a/server/config.inc.php +++ b/server/config.inc.php @@ -1,7 +1,10 @@ diff --git a/server/core/Identity.php b/server/core/Identity.php index 8d1c8b6..343ed15 100644 --- a/server/core/Identity.php +++ b/server/core/Identity.php @@ -1 +1,19 @@ - +oidentity = $ostack->identityV3(); + $this->plugins = $apiP; + + } + + public function genToken(){ + global $Args; + $token = $this->oidentity->generateToken($Args); + return $token; + } +} diff --git a/server/core/LibOverride/Builder.php b/server/core/LibOverride/Builder.php new file mode 100644 index 0000000..30ea9d3 --- /dev/null +++ b/server/core/LibOverride/Builder.php @@ -0,0 +1,169 @@ + 'publicURL']; + + public function __construct(array $globalOptions = []) + { + $this->globalOptions = $globalOptions; + parent::__construct($globalOptions); + } + + public function getOptions() + { + return $this->globalOptions; + } + + public function setOptions($Options) + { + $this->globalOptions = $Options; + } + + /** + * 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($serviceName, $serviceVersion) + { + $rootNamespace = sprintf("OpenStack\\%s\\v%d", $serviceName, $serviceVersion); + + return [ + sprintf("%s\\Api", $rootNamespace), + sprintf("%s\\Service", $rootNamespace), + ]; + } + + /** + * This method will return an OpenStack 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 $serviceName The name of the service as it appears in the OpenStack\* namespace + * @param $serviceVersion The major version of the service + * @param array $serviceOptions The service-specific options to use + * + * @return \OpenStack\Common\Service\ServiceInterface + * + * @throws \Exception + */ + public function createService($serviceName, $serviceVersion, array $serviceOptions = []) + { + $options = $this->mergeOptions($serviceOptions); + + $this->stockIdentityService($options); + $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, $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'])); + } + } + + private function stockIdentityService(array &$options) + { + if (!isset($options['identityService'])) { + $httpClient = $this->httpClient($options['authUrl'], HandlerStack::create()); + $options['identityService'] = Service::factory($httpClient); + } + } + + /** + * @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) + { + $stack = HandlerStack::create(); + $stack->push(Middleware::authHandler($authHandler, $token)); + return $stack; + } + + private function httpClient($baseUrl, HandlerStack $stack) + { + return new Client([ + 'base_uri' => Utils::normalizeUrl($baseUrl), + 'handler' => $stack, + ]); + } + + private function mergeOptions(array $serviceOptions) + { + $options = array_merge($this->defaults, $this->globalOptions, $serviceOptions); + + if (!isset($options['authUrl'])) { + throw new \InvalidArgumentException('"authUrl" is a required option'); + } + + return $options; + } +} + diff --git a/server/core/LibOverride/OpenStack.php b/server/core/LibOverride/OpenStack.php new file mode 100644 index 0000000..2b3897a --- /dev/null +++ b/server/core/LibOverride/OpenStack.php @@ -0,0 +1,43 @@ +builder = $builder ?: new Builder_override($options); + parent::__construct($options, $this->builder); + } + + public function getBuilderOptions() + { + + return $this->builder->getOptions(); + + } + + public function setBuilderOptions($options) + { + + $this->builder->setOptions($options); + + } +} diff --git a/server/core/LibOverride/Test.php b/server/core/LibOverride/Test.php new file mode 100644 index 0000000..a1c8023 --- /dev/null +++ b/server/core/LibOverride/Test.php @@ -0,0 +1,63 @@ +authenticate + // stack = getStack authhandler token + // addDebug?? + // $options['httpClient'] = 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) + { + $stack = HandlerStack::create(); + $stack->push(Middleware::authHandler($authHandler, $token)); + return $stack; + } + + private function httpClient($baseUrl, HandlerStack $stack) + { + return new Client([ + 'base_uri' => Utils::normalizeUrl($baseUrl), + 'handler' => $stack, + ]); + } +} diff --git a/server/core/Plugin_Api.php b/server/core/Plugin_Api.php index c2a9041..20ffd0c 100644 --- a/server/core/Plugin_Api.php +++ b/server/core/Plugin_Api.php @@ -1,9 +1,9 @@ genToken()); + $openstack_api->computeV2(['region'=> 'RegionOne']); + +// var_dump($openstack_api->getBuilderOptions()); diff --git a/server/init.php b/server/init.php index ff7f90b..5b6a6c1 100644 --- a/server/init.php +++ b/server/init.php @@ -2,7 +2,9 @@ include_once("config.inc.php"); include_once("core/Plugin_Api.php"); require "vendor/autoload.php"; - + include_once("core/LibOverride/Builder.php"); + include_once("core/LibOverride/OpenStack.php"); + //traitement requete, recuperation data if(isset($_POST["key"])){ //recuperation des donnes sauvegardes @@ -27,11 +29,32 @@ "name" => "Default") ) ), - "authUrl" => $urlAuth + "authUrl" => $config["urlAuth"] + ); + } else { + $user = "admin"; + $password = "ae5or6cn"; + $project = "admin"; + + $Args = Array( + "user" => Array( + "name" => $user, + "password" => $password, + "domain" => Array( + "name" => "Default") + ), + "scope" => Array( + "project" => Array( + "name" => $project, + "domain" => Array( + "name" => "Default") + ) + ), + "authUrl" => $config["urlAuth"] ); } $openstack_api = new OpenStack\OpenStack($Args); - + $pluginApi = plugin_api::getInstance(); ?>