istic-openstack/server/core/App.php
2016-04-27 14:22:59 +02:00

244 lines
6 KiB
PHP
Executable file

<?php
/**
* File containing the identity Class.
*
* @version 1.0 Initialisation of this file
* @since 1.0 Core application's file
*
* @author Eole 'eoledev at outlook . fr'
*
*/
/*
* Library token management override
*/
include_once("core/LibOverride/genTokenOptions.php");
include_once("core/ErrorManagement.php");
//Library loading
use OpenCloud\Common\Error\BadResponseError;
use OpenCloud\Common\Error\BaseError;
use OpenCloud\Common\Error\NotImplementedError;
use OpenCloud\Common\Error\UserInputError;
/**
* App Class of the back-end application
*
* This class allow the communication between the front-end application and
* the library which allow to send requests to an Openstack instance.
*
*/
class App{
/** @var OpenStack\OpenStack $openstack protected, contains the main library object */
protected $openstack;
/** @var Array $postParams protected, contains the post parameters */
protected $postParams;
/** @var genTokenOptions $tokenClass protected, contains the class object for the authentication override of the library */
protected $tokenClass;
/** @var String $tokenPost protected, contains the token given in parameter */
protected $tokenPost;
/** @var errorManagement $errorClass protected, contains the errorManagement object */
protected $errorClass;
/** @var Array $output protected, contains the result for the API call */
protected $output;
/**
* App constructor
*
* @param Array $args Args for the OpenStack Library
*
* @return App object
*/
public function __construct($args){
$this->tokenPost = NULL;
$this->tokenClass = new genTokenOptions($args);
$this->openstack = new OpenStack\OpenStack(['authUrl' => $args["authUrl"]]);
$this->errorClass = new errorManagement($this);
$this->output = array();
$this->postParams = $_POST;
}
/**
* Set the class var $tokenPost and load the token
* into the genTokenOptions Class
*
* @param String $token token to be set
*
*/
public function setToken($token){
$this->tokenPost = $token;
$this->tokenClass->loadBackup($this->tokenPost);
}
/**
* Check the expiration of the token
*
* @return Boolean if the token is not expired
*/
public function checkToken(){
return $this->tokenClass->checkToken();
}
/**
* Get the service Class given the name in parameter
*
* @param String $service Name of the service
*
* @return Core object
*/
public function getLibClass($service){
switch($service){
case "Identity":
if($this->tokenPost == NULL) $this->tokenClass->genIdentityToken();
$opt = $this->tokenClass->getOptions($service);
return $this->openstack->identityV3($opt);
break;
case "Image":
if($this->tokenPost == NULL) $this->tokenClass->genImageToken();
$opt = $this->tokenClass->getOptions($service);
return $this->openstack->imagesV2($opt);
break;
case "Network":
if($this->tokenPost == NULL) $this->tokenClass->genNetworkToken();
$opt = $this->tokenClass->getOptions($service);
return $this->openstack->networkingV2($opt);
break;
case "Compute":
if($this->tokenPost == NULL) $this->tokenClass->genComputeToken();
$opt = $this->tokenClass->getOptions($service);
return $this->openstack->computeV2($opt);
break;
case "NetworkLayer3":
if($this->tokenPost == NULL) $this->tokenClass->genNetworkToken();
$opt = $this->tokenClass->getOptions('Network');
return $this->openstack->networkingV2ExtLayer3($opt);
break;
}
}
/**
* Generate the token for the different services in OpenStack
*
* @return void
*/
public function authenticate(){
try{
$this->tokenClass->genIdentityToken();
$this->tokenClass->genComputeToken();
$this->tokenClass->genImageToken();
$this->tokenClass->genNetworkToken();
$this->setOutput("token", $this->tokenClass->getBackup());
}catch(BadResponseError $e){
$this->errorClass->BadResponseHandler($e);
}catch(UserInputError $e){
$this->errorClass->UserInputHandler($e);
}catch(BaseError $e){
$this->errorClass->BaseErrorHandler($e);
}catch(NotImplementedError $e){
$this->errorClass->NotImplementedHandler($e);
}
}
/**
* Revoke the openstack services' token
*
* @return void
*/
public function deauthenticate(){
try{
$this->tokenClass->revokeComputeToken();
$this->tokenClass->revokeImageToken();
$this->tokenClass->revokeNetworkToken();
$this->tokenClass->revokeIdentityToken();
$this->setOutput("deauthenticate", "Ok");
}catch(BadResponseError $e){
$this->errorClass->BadResponseHandler($e);
}catch(UserInputError $e){
$this->errorClass->UserInputHandler($e);
}catch(BaseError $e){
$this->errorClass->BaseErrorHandler($e);
}catch(NotImplementedError $e){
$this->errorClass->NotImplementedHandler($e);
}
}
/**
* Retrieve a post parameter given its name
*
* @param String $name Expected post parameter's name
*
* @return Object Post value
*/
public function getPostParam($name){
if(isset($this->postParams[$name])){
return $this->postParams[$name];
}else{
$this->setOutput("Error", "Missing parameter ".$name);
}
}
/**
* Set a post parameter for automating task
*
* @param String $param Name for the Post entry
* @param Object $value Value for the Post entry
*
* @return void
*/
public function setPostParam($param, $value){
$this->postParams[$param] = $value;
}
/**
* Set a new output message
*
* @param String $key Array key for the message
* @param Array $out Message's value
*
* @return void
*/
public function setOutput($key, $out){
$this->output[$key] = $out;
}
/**
* Retrieve the errorManagement instance Object
*
* @return errorManagement object
*/
public function getErrorInstance(){
return $this->errorClass;
}
/**
* Output the messages to be send to the client
*
* @return void
*/
public function show(){
echo json_encode($this->output);
}
}