From dff92c2d58f1683988f1cb8f170c7086e06105c3 Mon Sep 17 00:00:00 2001 From: Yoggzo Date: Sun, 14 Feb 2016 18:41:45 +0100 Subject: [PATCH 01/28] tests --- server/Test/imageTests.php | 36 +++------------------------ server/core/Image.php | 50 ++++++++++++++++++-------------------- 2 files changed, 27 insertions(+), 59 deletions(-) diff --git a/server/Test/imageTests.php b/server/Test/imageTests.php index 94ff7b6..b406cee 100644 --- a/server/Test/imageTests.php +++ b/server/Test/imageTests.php @@ -1,35 +1,6 @@ "admin", "password"=>"ae5or6cn", "domain"=>["id"=>"Default"]); -$options["scope"] = Array("project"=>Array("name"=>"admin", "domain"=>["id"=>"Default"])); -$options["authUrl"] = "http://148.60.11.31:5000/v3"; - -$openstack = new OpenStack\OpenStack($options); - -//$identity = $openstack->identityV3(); -//var_dump($identity); -// Since usernames will not be unique across an entire OpenStack installation, -// when authenticating with them you must also provide your domain ID. You do -// not have to do this if you authenticate with a user ID. -/*$token = $identity->generateToken([ - 'user' => [ - 'name' => 'admin', - 'password' => 'ae5or6cn', - 'domain' => [ - 'id' => 'Default' - ] - ] - ]); - */ -//$compute = $openstack->computeV2(["region" => "RegionOne"]); -//$image= $openstack->imagesV2(["region" => "RegionOne"]); -//var_dump($compute->client); -//$servers = $compute->listServers(true); -echo 'toto'; +include('InitTest.php'); +include_once("../core/Image.php"); $image = new Image($App); @@ -45,9 +16,8 @@ $opt['minRam'] = 10; //$new_image = $image->create_image($opt); - //Liste des images -$images = $image->list_images(); +$images = $image["listImages"]; echo "Images présentes :"; echo "
"; diff --git a/server/core/Image.php b/server/core/Image.php index 3001eea..125f6ad 100644 --- a/server/core/Image.php +++ b/server/core/Image.php @@ -1,7 +1,4 @@ oidentity->createImage($options); + $image = $this->libClass->createImage($options); return $image; } - /* - * List images + /** + * List the images of the server + * + * @return the list with all images on the server */ - public function list_images(){ + $images["listImages"] = function() { // vérifier si au moins une image - $service = $this->oidentity; - $images = $service->listImages(); - return $images; + $this->libClass->listImages(); + //return $l; } /** @@ -117,7 +115,7 @@ class image{ **/ public function image_details($id){ //vérifier existence image - $service = $this->oidentity; + $service = $this->libClass; $image = $service->getImage($id); return $image; } @@ -133,7 +131,7 @@ class image{ **/ public function update_image($id, array $opt){ //vérifier existence image - $service = $this->oidentity; + $service = $this->libClass; $image = $service->getImage($id); $options = Array(); @@ -170,7 +168,7 @@ class image{ public function delete_image($id){ // si protected = true, demander de le mettre a false // vérifier existence image - $service = $this->oidentity; + $service = $this->libClass; $service->getImage($id)->delete(); } @@ -182,7 +180,7 @@ class image{ **/ public function reactivate_image($id){ // vérifier existence image - $service = $this->oidentity; + $service = $this->libClass; $image = $service->getImage($id); $image->reactivate(); } @@ -195,7 +193,7 @@ class image{ **/ public function desactivate_image($id){ // vérifier existence image - $service = $this->oidentity; + $service = $this->libClass; $image = $service->getImage($id); $image->deactivate(); } @@ -211,7 +209,7 @@ class image{ **/ public function upload_image($id, $file_name){ // vérifier existence image - $service = $this->oidentity; + $service = $this->libClass; $image = $service->getImage($id); $stream = \GuzzleHttp\Psr7\stream_for(fopen($file_name, 'r')); // A VOIR $image->uploadData($stream); @@ -225,7 +223,7 @@ class image{ **/ public function download_image($id){ // vérifier existence image - $service = $this->oidentity; + $service = $this->libClass; $image = $service->getImage($id); $stream = $image->downloadData(); return $stream; @@ -244,7 +242,7 @@ class image{ // vérifier existence image // on doit être le proprio de l'image // vérifier membre existe - $service = $this->oidentity; + $service = $this->libClass; $member_id = $service>getImage($image_id)->addMember($member_id); } @@ -257,7 +255,7 @@ class image{ **/ public function list_member($image_id, $member_id){ // vérifier existence image - $service = $this->oidentity; + $service = $this->libClass; $image = $service->getImage($image_id); $members = $image->listMembers(); return $members; @@ -276,7 +274,7 @@ class image{ // vérifier existence image // on doit être le proprio de l'image // vérifier membre existe - $service = $this->oidentity; + $service = $this->libClass; $member = $service>getImage($image_id)->getMember($member_id); return $member; } @@ -294,7 +292,7 @@ class image{ // vérifier existence image // on doit être le proprio de l'image // vérifier membre existe - $service = $this->oidentity; + $service = $this->libClass; $service>getImage($image_id)->getMember($member_id)->delete(); } @@ -314,7 +312,7 @@ class image{ // vérifier existence image // on doit être le proprio de l'image // vérifier membre existe - $service = $this->oidentity; + $service = $this->libClass; $member = $service>getImage($image_id)->getMember($member_id)->updateStatus($status); } From a90cc995ff44821234f8ae37cbbb685d3dd75a8e Mon Sep 17 00:00:00 2001 From: Yoggzo Date: Wed, 17 Feb 2016 16:09:44 +0100 Subject: [PATCH 02/28] Renaming functions --- server/Test/imageTests.php | 56 +++++++++++++++++++++----------------- server/core/Image.php | 32 +++++++++++----------- 2 files changed, 47 insertions(+), 41 deletions(-) diff --git a/server/Test/imageTests.php b/server/Test/imageTests.php index b406cee..39e83e1 100644 --- a/server/Test/imageTests.php +++ b/server/Test/imageTests.php @@ -14,51 +14,57 @@ $opt['minDisk'] = 1; $opt['protected'] = false; $opt['minRam'] = 10; -//$new_image = $image->create_image($opt); +//$new_image = $image->createImage($opt); //Liste des images -$images = $image["listImages"]; +$images = $image->listImage(); -echo "Images présentes :"; -echo "
"; - -foreach($images as $i){ - echo $i->name; - if($i->name == "Test"){ - $id_image = $i->id; - $list = $i->tags; - echo $i->status; +if(isset($images)){ + echo "Images présentes :"; + echo "
"; + foreach($images as $i){ + echo $i->name; + if($i->name == "Test"){ + $id_image = $i->id; + $list = $i->tags; + echo $i->status; + } + echo "
"; } echo "
"; -} -echo "
"; -if(isset($list)){ - foreach ($list as $l) { - echo $l; - echo "
"; - } + if(isset($list)){ + foreach ($list as $l) { + echo $l; + echo "
"; + } } +} +else{ + echo "Aucune image présente\n"; +} + + // Détails Image -//$details = $image->image_details($id_image); +//$details = $image->imageDetails($id_image); -//$image->delete_image('123456'); +//$image->deleteImage('123456'); -//$image->desactivate_image($id_image); -//$image->reactivate_image($id_image); +//$image->desactivateImage($id_image); +//$image->reactivateImage($id_image); //$file_name = "/home/yogg/Downloads/TinyCore-6.4.1.iso"; -//$image->upload_image($id_image, $file_name); +//$image->uploadImage($id_image, $file_name); -//$image->download_image($id_image); +//$image->downloadImage($id_image); /* $opt_update = Array(); $opt_update['name'] = "Test"; $opt_update['tags'] = null; -$update = $image->update_image($id_image, $opt_update); +$update = $image->updateImage($id_image, $opt_update); echo $update->name; */ diff --git a/server/core/Image.php b/server/core/Image.php index 125f6ad..637966c 100644 --- a/server/core/Image.php +++ b/server/core/Image.php @@ -17,7 +17,7 @@ use OpenStack\Common\Error; * ADD CLASS DESCRIPTION * */ -class image implements Core{ +class image { //implements Core /** @var App $app protected, contains the main app object */ @@ -45,7 +45,7 @@ class image implements Core{ } - $images = array(); + private $images = array(); /** * Details about an image @@ -54,7 +54,7 @@ class image implements Core{ * options for the image creation * **/ - public function create_image(array $opt){ + public function createImage(array $opt){ // VOIR SI MAUVAIS TYPE $options = Array(); if(isset($opt['name'])){ // string, rendre le nom obligatoire, vérifier nom pas déjà pris @@ -100,7 +100,7 @@ class image implements Core{ * * @return the list with all images on the server */ - $images["listImages"] = function() { + public function listImage(){ // vérifier si au moins une image $this->libClass->listImages(); //return $l; @@ -113,7 +113,7 @@ class image implements Core{ * identifier of the image * **/ - public function image_details($id){ + public function detailsImage($id){ //vérifier existence image $service = $this->libClass; $image = $service->getImage($id); @@ -129,7 +129,7 @@ class image implements Core{ * @param array $opt * options for the image creation **/ - public function update_image($id, array $opt){ + public function updateImage($id, array $opt){ //vérifier existence image $service = $this->libClass; $image = $service->getImage($id); @@ -165,7 +165,7 @@ class image implements Core{ * @param string $id * identifier of the image **/ - public function delete_image($id){ + public function imageDelete($id){ // si protected = true, demander de le mettre a false // vérifier existence image $service = $this->libClass; @@ -178,7 +178,7 @@ class image implements Core{ * @param string $id * identifier of the image **/ - public function reactivate_image($id){ + public function reactivateImage($id){ // vérifier existence image $service = $this->libClass; $image = $service->getImage($id); @@ -191,7 +191,7 @@ class image implements Core{ * @param string $id * identifier of the image **/ - public function desactivate_image($id){ + public function desactivateImage($id){ // vérifier existence image $service = $this->libClass; $image = $service->getImage($id); @@ -207,7 +207,7 @@ class image implements Core{ * @param string $file_name * path of the image **/ - public function upload_image($id, $file_name){ + public function uploadImage($id, $file_name){ // vérifier existence image $service = $this->libClass; $image = $service->getImage($id); @@ -221,7 +221,7 @@ class image implements Core{ * @param string $id * identifier of the image **/ - public function download_image($id){ + public function downloadImage($id){ // vérifier existence image $service = $this->libClass; $image = $service->getImage($id); @@ -238,7 +238,7 @@ class image implements Core{ * @param string $member_id * identifier of the member **/ - public function add_member($image_id, $member_id){ + public function addMemberImage($image_id, $member_id){ // vérifier existence image // on doit être le proprio de l'image // vérifier membre existe @@ -253,7 +253,7 @@ class image implements Core{ * @param string $image_id * identifier of the image **/ - public function list_member($image_id, $member_id){ + public function listMemberImage($image_id, $member_id){ // vérifier existence image $service = $this->libClass; $image = $service->getImage($image_id); @@ -270,7 +270,7 @@ class image implements Core{ * @param string $member_id * identifier of the member **/ - public function detail_member($image_id, $member_id){ + public function detailMemberImage($image_id, $member_id){ // vérifier existence image // on doit être le proprio de l'image // vérifier membre existe @@ -288,7 +288,7 @@ class image implements Core{ * @param string $member_id * identifier of the member **/ - public function remove_member($image_id, $member_id){ + public function removeMemberImage($image_id, $member_id){ // vérifier existence image // on doit être le proprio de l'image // vérifier membre existe @@ -308,7 +308,7 @@ class image implements Core{ * @param string $status * new status for the member **/ - public function update_member($image_id, $member_id, $status){ + public function updateMemberImage($image_id, $member_id, $status){ // vérifier existence image // on doit être le proprio de l'image // vérifier membre existe From 81bc109269722745a475eac0f7aa9d14b3ffe66b Mon Sep 17 00:00:00 2001 From: Yoggzo Date: Wed, 17 Feb 2016 17:16:57 +0100 Subject: [PATCH 03/28] Add control of parameters errors --- server/Test/imageTests.php | 2 +- server/core/Image.php | 83 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 80 insertions(+), 5 deletions(-) diff --git a/server/Test/imageTests.php b/server/Test/imageTests.php index 39e83e1..47a69e2 100644 --- a/server/Test/imageTests.php +++ b/server/Test/imageTests.php @@ -49,7 +49,7 @@ else{ // Détails Image //$details = $image->imageDetails($id_image); -//$image->deleteImage('123456'); +$image->deleteImage('123456'); //$image->desactivateImage($id_image); //$image->reactivateImage($id_image); diff --git a/server/core/Image.php b/server/core/Image.php index 637966c..15facc9 100644 --- a/server/core/Image.php +++ b/server/core/Image.php @@ -40,6 +40,9 @@ class image { * @return Image */ public function __construct($app){ + if(!isset($app)){ + // Renvoyer erreur + } $this->app = $app; $this->libClass = $app->getLibClass("Image"); } @@ -54,7 +57,10 @@ class image { * options for the image creation * **/ - public function createImage(array $opt){ + public function createImage(array $opt){ + if(!isset($opt)){ + // Renvoyer erreur + } // VOIR SI MAUVAIS TYPE $options = Array(); if(isset($opt['name'])){ // string, rendre le nom obligatoire, vérifier nom pas déjà pris @@ -114,6 +120,9 @@ class image { * **/ public function detailsImage($id){ + if(!isset($id)){ + // Renvoyer erreur + } //vérifier existence image $service = $this->libClass; $image = $service->getImage($id); @@ -130,6 +139,12 @@ class image { * options for the image creation **/ public function updateImage($id, array $opt){ + if(!isset($id)){ + // Renvoyer erreur + } + if(!isset($opt)){ + // Renvoyer erreur + } //vérifier existence image $service = $this->libClass; $image = $service->getImage($id); @@ -165,11 +180,26 @@ class image { * @param string $id * identifier of the image **/ - public function imageDelete($id){ + public function deleteImage($id){ // si protected = true, demander de le mettre a false // vérifier existence image - $service = $this->libClass; - $service->getImage($id)->delete(); + if(!isset($id)){ + // Renvoyer erreur + } + try{ + $service = $this->libClass; + $service->getImage($id)->delete(); + }catch(BadResponseError $e){ + echo "YOLO"; + $this->app->getErrorInstance->BadResponseHandler($e); + }catch(UserInputError $e){ + $this->app->getErrorInstance->UserInputHandler($e); + }catch(BaseError $e){ + $this->app->getErrorInstance->BaseErrorHandler($e); + }catch(NotImplementedError $e){ + $this->app->getErrorInstance->NotImplementedHandler($e); + } + } /** @@ -179,6 +209,9 @@ class image { * identifier of the image **/ public function reactivateImage($id){ + if(!isset($id)){ + // Renvoyer erreur + } // vérifier existence image $service = $this->libClass; $image = $service->getImage($id); @@ -192,6 +225,9 @@ class image { * identifier of the image **/ public function desactivateImage($id){ + if(!isset($id)){ + // Renvoyer erreur + } // vérifier existence image $service = $this->libClass; $image = $service->getImage($id); @@ -208,6 +244,12 @@ class image { * path of the image **/ public function uploadImage($id, $file_name){ + if(!isset($id)){ + // Renvoyer erreur + } + if(!isset($file_name)){ + // Renvoyer erreur + } // vérifier existence image $service = $this->libClass; $image = $service->getImage($id); @@ -222,6 +264,9 @@ class image { * identifier of the image **/ public function downloadImage($id){ + if(!isset($id)){ + // Renvoyer erreur + } // vérifier existence image $service = $this->libClass; $image = $service->getImage($id); @@ -239,6 +284,12 @@ class image { * identifier of the member **/ public function addMemberImage($image_id, $member_id){ + if(!isset($image_id)){ + // Renvoyer erreur + } + if(!isset($member_id)){ + // Renvoyer erreur + } // vérifier existence image // on doit être le proprio de l'image // vérifier membre existe @@ -254,6 +305,12 @@ class image { * identifier of the image **/ public function listMemberImage($image_id, $member_id){ + if(!isset($image_id)){ + // Renvoyer erreur + } + if(!isset($member_id)){ + // Renvoyer erreur + } // vérifier existence image $service = $this->libClass; $image = $service->getImage($image_id); @@ -271,6 +328,12 @@ class image { * identifier of the member **/ public function detailMemberImage($image_id, $member_id){ + if(!isset($image_id)){ + // Renvoyer erreur + } + if(!isset($member_id)){ + // Renvoyer erreur + } // vérifier existence image // on doit être le proprio de l'image // vérifier membre existe @@ -289,6 +352,12 @@ class image { * identifier of the member **/ public function removeMemberImage($image_id, $member_id){ + if(!isset($image_id)){ + // Renvoyer erreur + } + if(!isset($member_id)){ + // Renvoyer erreur + } // vérifier existence image // on doit être le proprio de l'image // vérifier membre existe @@ -309,6 +378,12 @@ class image { * new status for the member **/ public function updateMemberImage($image_id, $member_id, $status){ + if(!isset($image_id)){ + // Renvoyer erreur + } + if(!isset($member_id)){ + // Renvoyer erreur + } // vérifier existence image // on doit être le proprio de l'image // vérifier membre existe From 58a936d0158e4f90596bfe88352f5a570094c436 Mon Sep 17 00:00:00 2001 From: Yoggzo Date: Wed, 17 Feb 2016 17:56:11 +0100 Subject: [PATCH 04/28] Add errors features for tests calsses --- server/Test/AppTestClass.php | 13 +++++++++++++ server/core/Image.php | 10 ++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/server/Test/AppTestClass.php b/server/Test/AppTestClass.php index 311b9bf..40a5847 100755 --- a/server/Test/AppTestClass.php +++ b/server/Test/AppTestClass.php @@ -1,6 +1,12 @@ openstack = new OpenStack\OpenStack([]); $this->pluginsApi = plugin_api::getInstance(); $this->output = array(); + $this->errorClass = new errorManagement($this); } @@ -70,4 +78,9 @@ class AppTest{ echo json_encode($this->output); } + public function getErrorInstance(){ + + return $this->errorClass; + + } } \ No newline at end of file diff --git a/server/core/Image.php b/server/core/Image.php index 15facc9..bc4834a 100644 --- a/server/core/Image.php +++ b/server/core/Image.php @@ -9,8 +9,11 @@ * * @todo Complete the functions with errors detection and finish the descriptions */ -use OpenStack\Common\Error; - +use OpenStack\Common\Error\BadResponseError; +use OpenStack\Common\Error\BaseError; +use OpenStack\Common\Error\NotImplementedError; +use OpenStack\Common\Error\UserInputError; + /** * Image Class of the back-end application * @@ -190,8 +193,7 @@ class image { $service = $this->libClass; $service->getImage($id)->delete(); }catch(BadResponseError $e){ - echo "YOLO"; - $this->app->getErrorInstance->BadResponseHandler($e); + $this->app->getErrorInstance()->BadResponseHandler($e); }catch(UserInputError $e){ $this->app->getErrorInstance->UserInputHandler($e); }catch(BaseError $e){ From 16e0328884f318d97ac991ee8e70f43ee1c14b38 Mon Sep 17 00:00:00 2001 From: Yoggzo Date: Wed, 17 Feb 2016 18:29:03 +0100 Subject: [PATCH 05/28] Add errors management --- server/core/Image.php | 366 +++++++++++++++++++++++++++++------------- 1 file changed, 254 insertions(+), 112 deletions(-) diff --git a/server/core/Image.php b/server/core/Image.php index bc4834a..85a245f 100644 --- a/server/core/Image.php +++ b/server/core/Image.php @@ -46,8 +46,18 @@ class image { if(!isset($app)){ // Renvoyer erreur } - $this->app = $app; - $this->libClass = $app->getLibClass("Image"); + try{ + $this->app = $app; + $this->libClass = $app->getLibClass("Image"); + }catch(BadResponseError $e){ + $this->app->getErrorInstance()->BadResponseHandler($e); + }catch(UserInputError $e){ + $this->app->getErrorInstance->UserInputHandler($e); + }catch(BaseError $e){ + $this->app->getErrorInstance->BaseErrorHandler($e); + }catch(NotImplementedError $e){ + $this->app->getErrorInstance->NotImplementedHandler($e); + } } @@ -63,44 +73,54 @@ class image { public function createImage(array $opt){ if(!isset($opt)){ // Renvoyer erreur - } - // VOIR SI MAUVAIS TYPE - $options = Array(); - if(isset($opt['name'])){ // string, rendre le nom obligatoire, vérifier nom pas déjà pris } - else{ - //ERROR - } - if(isset($opt['id'])){ // UUID : nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn - $options['id'] = $opt['id']; - } - if(isset($opt['visibility'])){ // public, private - $options['visibility'] = $opt['visibility']; - } - if(isset($opt['tags'])){ // list - $options['tags'] = $opt['tags']; - } - if(isset($opt['containerFormat'])){ // string : ami, ari, aki, bare, ovf, ova, docker - $options['containerFormat'] = $opt['containerFormat']; - } - if(isset($opt['diskFormat'])){ // string : ami, ari, aki, vhd, vmdk, raw, qcow2, vdi, iso - $options['diskFormat'] = $opt['diskFormat']; - } - if(isset($opt['minDisk'])){ //int - $options['minDisk'] = $opt['minDisk']; - } - if(isset($opt['minRam'])){ // int - $options['minRam'] = $opt['minRam']; - } - if(isset($opt['protected'])){ // boolean - $options['protected'] = $opt['protected']; - } - if(isset($opt['properties'])){ // type dict ? - $options['properties'] = $opt['properties']; - } - $image = $this->libClass->createImage($options); + try{ + // VOIR SI MAUVAIS TYPE + $options = Array(); + if(isset($opt['name'])){ // string, rendre le nom obligatoire, vérifier nom pas déjà pris + } + else{ + //ERROR + } + if(isset($opt['id'])){ // UUID : nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn + $options['id'] = $opt['id']; + } + if(isset($opt['visibility'])){ // public, private + $options['visibility'] = $opt['visibility']; + } + if(isset($opt['tags'])){ // list + $options['tags'] = $opt['tags']; + } + if(isset($opt['containerFormat'])){ // string : ami, ari, aki, bare, ovf, ova, docker + $options['containerFormat'] = $opt['containerFormat']; + } + if(isset($opt['diskFormat'])){ // string : ami, ari, aki, vhd, vmdk, raw, qcow2, vdi, iso + $options['diskFormat'] = $opt['diskFormat']; + } + if(isset($opt['minDisk'])){ //int + $options['minDisk'] = $opt['minDisk']; + } + if(isset($opt['minRam'])){ // int + $options['minRam'] = $opt['minRam']; + } + if(isset($opt['protected'])){ // boolean + $options['protected'] = $opt['protected']; + } + if(isset($opt['properties'])){ // type dict ? + $options['properties'] = $opt['properties']; + } + $image = $this->libClass->createImage($options); + }catch(BadResponseError $e){ + $this->app->getErrorInstance()->BadResponseHandler($e); + }catch(UserInputError $e){ + $this->app->getErrorInstance->UserInputHandler($e); + }catch(BaseError $e){ + $this->app->getErrorInstance->BaseErrorHandler($e); + }catch(NotImplementedError $e){ + $this->app->getErrorInstance->NotImplementedHandler($e); + } return $image; } @@ -110,9 +130,20 @@ class image { * @return the list with all images on the server */ public function listImage(){ - // vérifier si au moins une image - $this->libClass->listImages(); - //return $l; + try{ + // vérifier si au moins une image + $l = $this->libClass->listImages(); + }catch(BadResponseError $e){ + $this->app->getErrorInstance()->BadResponseHandler($e); + }catch(UserInputError $e){ + $this->app->getErrorInstance->UserInputHandler($e); + }catch(BaseError $e){ + $this->app->getErrorInstance->BaseErrorHandler($e); + }catch(NotImplementedError $e){ + $this->app->getErrorInstance->NotImplementedHandler($e); + } + return $l; + } /** @@ -126,10 +157,21 @@ class image { if(!isset($id)){ // Renvoyer erreur } - //vérifier existence image - $service = $this->libClass; - $image = $service->getImage($id); - return $image; + + try{ + //vérifier existence image + $service = $this->libClass; + $image = $service->getImage($id); + return $image; + }catch(BadResponseError $e){ + $this->app->getErrorInstance()->BadResponseHandler($e); + }catch(UserInputError $e){ + $this->app->getErrorInstance->UserInputHandler($e); + }catch(BaseError $e){ + $this->app->getErrorInstance->BaseErrorHandler($e); + }catch(NotImplementedError $e){ + $this->app->getErrorInstance->NotImplementedHandler($e); + } } /** @@ -148,32 +190,42 @@ class image { if(!isset($opt)){ // Renvoyer erreur } - //vérifier existence image - $service = $this->libClass; - $image = $service->getImage($id); - $options = Array(); - - // Voir vérification des types - if(isset($opt['name'])){ //string - $options['name'] = $opt['name']; - } - if(isset($opt['minDisk'])){ //int - $options['minDisk'] = $opt['minDisk']; - } - if(isset($opt['minRam'])){ // int - $options['minRam'] = $opt['minRam']; - } - if(isset($opt['protected'])){ // boolean - $options['protected'] = $opt['protected']; - } - if(isset($opt['visibility'])){ // public, private - $options['visibility'] = $opt['visibility']; - } - if(isset($opt['tags'])){ // list - $options['tags'] = $opt['tags']; - } - $image->update($options); + + try{ + //vérifier existence image + $service = $this->libClass; + $image = $service->getImage($id); + $options = Array(); + // Voir vérification des types + if(isset($opt['name'])){ //string + $options['name'] = $opt['name']; + } + if(isset($opt['minDisk'])){ //int + $options['minDisk'] = $opt['minDisk']; + } + if(isset($opt['minRam'])){ // int + $options['minRam'] = $opt['minRam']; + } + if(isset($opt['protected'])){ // boolean + $options['protected'] = $opt['protected']; + } + if(isset($opt['visibility'])){ // public, private + $options['visibility'] = $opt['visibility']; + } + if(isset($opt['tags'])){ // list + $options['tags'] = $opt['tags']; + } + $image->update($options); + }catch(BadResponseError $e){ + $this->app->getErrorInstance()->BadResponseHandler($e); + }catch(UserInputError $e){ + $this->app->getErrorInstance->UserInputHandler($e); + }catch(BaseError $e){ + $this->app->getErrorInstance->BaseErrorHandler($e); + }catch(NotImplementedError $e){ + $this->app->getErrorInstance->NotImplementedHandler($e); + } return $image; } @@ -214,10 +266,20 @@ class image { if(!isset($id)){ // Renvoyer erreur } - // vérifier existence image - $service = $this->libClass; - $image = $service->getImage($id); - $image->reactivate(); + try{ + // vérifier existence image + $service = $this->libClass; + $image = $service->getImage($id); + $image->reactivate(); + }catch(BadResponseError $e){ + $this->app->getErrorInstance()->BadResponseHandler($e); + }catch(UserInputError $e){ + $this->app->getErrorInstance->UserInputHandler($e); + }catch(BaseError $e){ + $this->app->getErrorInstance->BaseErrorHandler($e); + }catch(NotImplementedError $e){ + $this->app->getErrorInstance->NotImplementedHandler($e); + } } /** @@ -230,10 +292,20 @@ class image { if(!isset($id)){ // Renvoyer erreur } - // vérifier existence image - $service = $this->libClass; - $image = $service->getImage($id); - $image->deactivate(); + try{ + // vérifier existence image + $service = $this->libClass; + $image = $service->getImage($id); + $image->deactivate(); + }catch(BadResponseError $e){ + $this->app->getErrorInstance()->BadResponseHandler($e); + }catch(UserInputError $e){ + $this->app->getErrorInstance->UserInputHandler($e); + }catch(BaseError $e){ + $this->app->getErrorInstance->BaseErrorHandler($e); + }catch(NotImplementedError $e){ + $this->app->getErrorInstance->NotImplementedHandler($e); + } } /** @@ -252,11 +324,21 @@ class image { if(!isset($file_name)){ // Renvoyer erreur } - // vérifier existence image - $service = $this->libClass; - $image = $service->getImage($id); - $stream = \GuzzleHttp\Psr7\stream_for(fopen($file_name, 'r')); // A VOIR - $image->uploadData($stream); + try{ + // vérifier existence image + $service = $this->libClass; + $image = $service->getImage($id); + $stream = \GuzzleHttp\Psr7\stream_for(fopen($file_name, 'r')); // A VOIR + $image->uploadData($stream); + }catch(BadResponseError $e){ + $this->app->getErrorInstance()->BadResponseHandler($e); + }catch(UserInputError $e){ + $this->app->getErrorInstance->UserInputHandler($e); + }catch(BaseError $e){ + $this->app->getErrorInstance->BaseErrorHandler($e); + }catch(NotImplementedError $e){ + $this->app->getErrorInstance->NotImplementedHandler($e); + } } /** @@ -269,11 +351,21 @@ class image { if(!isset($id)){ // Renvoyer erreur } - // vérifier existence image - $service = $this->libClass; - $image = $service->getImage($id); - $stream = $image->downloadData(); - return $stream; + try{ + // vérifier existence image + $service = $this->libClass; + $image = $service->getImage($id); + $stream = $image->downloadData(); + }catch(BadResponseError $e){ + $this->app->getErrorInstance()->BadResponseHandler($e); + }catch(UserInputError $e){ + $this->app->getErrorInstance->UserInputHandler($e); + }catch(BaseError $e){ + $this->app->getErrorInstance->BaseErrorHandler($e); + }catch(NotImplementedError $e){ + $this->app->getErrorInstance->NotImplementedHandler($e); + } + return $stream; } /** @@ -292,11 +384,21 @@ class image { if(!isset($member_id)){ // Renvoyer erreur } - // vérifier existence image - // on doit être le proprio de l'image - // vérifier membre existe - $service = $this->libClass; - $member_id = $service>getImage($image_id)->addMember($member_id); + try{ + // vérifier existence image + // on doit être le proprio de l'image + // vérifier membre existe + $service = $this->libClass; + $member_id = $service>getImage($image_id)->addMember($member_id); + }catch(BadResponseError $e){ + $this->app->getErrorInstance()->BadResponseHandler($e); + }catch(UserInputError $e){ + $this->app->getErrorInstance->UserInputHandler($e); + }catch(BaseError $e){ + $this->app->getErrorInstance->BaseErrorHandler($e); + }catch(NotImplementedError $e){ + $this->app->getErrorInstance->NotImplementedHandler($e); + } } @@ -313,10 +415,20 @@ class image { if(!isset($member_id)){ // Renvoyer erreur } - // vérifier existence image - $service = $this->libClass; - $image = $service->getImage($image_id); - $members = $image->listMembers(); + try{ + // vérifier existence image + $service = $this->libClass; + $image = $service->getImage($image_id); + $members = $image->listMembers(); + }catch(BadResponseError $e){ + $this->app->getErrorInstance()->BadResponseHandler($e); + }catch(UserInputError $e){ + $this->app->getErrorInstance->UserInputHandler($e); + }catch(BaseError $e){ + $this->app->getErrorInstance->BaseErrorHandler($e); + }catch(NotImplementedError $e){ + $this->app->getErrorInstance->NotImplementedHandler($e); + } return $members; } @@ -336,11 +448,21 @@ class image { if(!isset($member_id)){ // Renvoyer erreur } - // vérifier existence image - // on doit être le proprio de l'image - // vérifier membre existe - $service = $this->libClass; - $member = $service>getImage($image_id)->getMember($member_id); + try{ + // vérifier existence image + // on doit être le proprio de l'image + // vérifier membre existe + $service = $this->libClass; + $member = $service>getImage($image_id)->getMember($member_id); + }catch(BadResponseError $e){ + $this->app->getErrorInstance()->BadResponseHandler($e); + }catch(UserInputError $e){ + $this->app->getErrorInstance->UserInputHandler($e); + }catch(BaseError $e){ + $this->app->getErrorInstance->BaseErrorHandler($e); + }catch(NotImplementedError $e){ + $this->app->getErrorInstance->NotImplementedHandler($e); + } return $member; } @@ -360,11 +482,21 @@ class image { if(!isset($member_id)){ // Renvoyer erreur } - // vérifier existence image - // on doit être le proprio de l'image - // vérifier membre existe - $service = $this->libClass; - $service>getImage($image_id)->getMember($member_id)->delete(); + try{ + // vérifier existence image + // on doit être le proprio de l'image + // vérifier membre existe + $service = $this->libClass; + $service>getImage($image_id)->getMember($member_id)->delete(); + }catch(BadResponseError $e){ + $this->app->getErrorInstance()->BadResponseHandler($e); + }catch(UserInputError $e){ + $this->app->getErrorInstance->UserInputHandler($e); + }catch(BaseError $e){ + $this->app->getErrorInstance->BaseErrorHandler($e); + }catch(NotImplementedError $e){ + $this->app->getErrorInstance->NotImplementedHandler($e); + } } /** @@ -386,12 +518,22 @@ class image { if(!isset($member_id)){ // Renvoyer erreur } - // vérifier existence image - // on doit être le proprio de l'image - // vérifier membre existe - $service = $this->libClass; - $member = $service>getImage($image_id)->getMember($member_id)->updateStatus($status); + try{ + // vérifier existence image + // on doit être le proprio de l'image + // vérifier membre existe + $service = $this->libClass; + $member = $service>getImage($image_id)->getMember($member_id)->updateStatus($status); + }catch(BadResponseError $e){ + $this->app->getErrorInstance()->BadResponseHandler($e); + }catch(UserInputError $e){ + $this->app->getErrorInstance->UserInputHandler($e); + }catch(BaseError $e){ + $this->app->getErrorInstance->BaseErrorHandler($e); + }catch(NotImplementedError $e){ + $this->app->getErrorInstance->NotImplementedHandler($e); + } } } -?> +?> \ No newline at end of file From 59dfbc78ffebf674591ecc6e7cbda32ee667381b Mon Sep 17 00:00:00 2001 From: Yoggzo Date: Wed, 24 Feb 2016 14:51:23 +0100 Subject: [PATCH 06/28] add some error cases --- server/core/Image.php | 108 +++++++++++++++++++++++++++++++++++------- 1 file changed, 91 insertions(+), 17 deletions(-) diff --git a/server/core/Image.php b/server/core/Image.php index 85a245f..dba92ff 100644 --- a/server/core/Image.php +++ b/server/core/Image.php @@ -29,10 +29,6 @@ class image { /** @var OpenStack\Identity $libClass protected, contains the library Identity object */ protected $libClass; - /** @var array $actions protected, contains the functions which can be call by the front-end */ - protected $actions = array(); - - /** * Image constructor * @@ -71,19 +67,33 @@ class image { * **/ public function createImage(array $opt){ + if(!isset($opt)){ // Renvoyer erreur } + try{ // VOIR SI MAUVAIS TYPE $options = Array(); - if(isset($opt['name'])){ // string, rendre le nom obligatoire, vérifier nom pas déjà pris + if(isset($opt['name'])){ // if the image name already exists -> error + $imagesList = listImage(); + if(isset($images)){ + foreach($imagesList as $image){ + if(strcmp($image->name, $opt['name']) == 0){ + + } + } + } + } else{ //ERROR } if(isset($opt['id'])){ // UUID : nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn + if($this->libClass->getImage($opt['id']) != null){ // if the id already exists -> error + + } $options['id'] = $opt['id']; } if(isset($opt['visibility'])){ // public, private @@ -131,8 +141,10 @@ class image { */ public function listImage(){ try{ - // vérifier si au moins une image $l = $this->libClass->listImages(); + if(!isset($l)){ // if the list is empty there is no images + + } }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); }catch(UserInputError $e){ @@ -157,11 +169,13 @@ class image { if(!isset($id)){ // Renvoyer erreur } - try{ - //vérifier existence image $service = $this->libClass; $image = $service->getImage($id); + if($image == null){ // if the image don't exists -> error + // Renvoyer erreur + } + return $image; }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); @@ -190,11 +204,15 @@ class image { if(!isset($opt)){ // Renvoyer erreur } - + try{ //vérifier existence image $service = $this->libClass; $image = $service->getImage($id); + if($image == null){ // if the image don't exists -> error + // Renvoyer erreur + } + $options = Array(); // Voir vérification des types @@ -241,9 +259,14 @@ class image { if(!isset($id)){ // Renvoyer erreur } + try{ $service = $this->libClass; - $service->getImage($id)->delete(); + $image = $this->libClass->getImage($id); + if($image == null){ // if the image don't exists -> error + // Renvoyer erreur + } + $image->delete(); }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); }catch(UserInputError $e){ @@ -270,6 +293,9 @@ class image { // vérifier existence image $service = $this->libClass; $image = $service->getImage($id); + if($image == null){ // if the image don't exists -> error + // Renvoyer erreur + } $image->reactivate(); }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); @@ -296,6 +322,9 @@ class image { // vérifier existence image $service = $this->libClass; $image = $service->getImage($id); + if($image == null){ // if the image don't exists -> error + // Renvoyer erreur + } $image->deactivate(); }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); @@ -328,6 +357,9 @@ class image { // vérifier existence image $service = $this->libClass; $image = $service->getImage($id); + if($image == null){ // if the image don't exists -> error + // Renvoyer erreur + } $stream = \GuzzleHttp\Psr7\stream_for(fopen($file_name, 'r')); // A VOIR $image->uploadData($stream); }catch(BadResponseError $e){ @@ -355,6 +387,9 @@ class image { // vérifier existence image $service = $this->libClass; $image = $service->getImage($id); + if($image == null){ // if the image don't exists -> error + // Renvoyer erreur + } $stream = $image->downloadData(); }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); @@ -388,8 +423,14 @@ class image { // vérifier existence image // on doit être le proprio de l'image // vérifier membre existe - $service = $this->libClass; - $member_id = $service>getImage($image_id)->addMember($member_id); + $service = $this->libClass; + + $image = $service->getImage($id); + if($image == null){ // if the image don't exists -> error + // Renvoyer erreur + } + + $member_id = $image->addMember($member_id); }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); }catch(UserInputError $e){ @@ -419,7 +460,13 @@ class image { // vérifier existence image $service = $this->libClass; $image = $service->getImage($image_id); + if($image == null){ // if the image don't exists -> error + // Renvoyer erreur + } $members = $image->listMembers(); + if($member == null){ // if the image don't exists -> error + // Renvoyer erreur + } }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); }catch(UserInputError $e){ @@ -452,8 +499,17 @@ class image { // vérifier existence image // on doit être le proprio de l'image // vérifier membre existe - $service = $this->libClass; - $member = $service>getImage($image_id)->getMember($member_id); + $service = $this->libClass; + + $image = $service->getImage($id); + if($image == null){ // if the image don't exists -> error + // Renvoyer erreur + } + + $member = $image->getMember($member_id); + if($member == null){ // if the image don't exists -> error + // Renvoyer erreur + } }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); }catch(UserInputError $e){ @@ -486,8 +542,17 @@ class image { // vérifier existence image // on doit être le proprio de l'image // vérifier membre existe - $service = $this->libClass; - $service>getImage($image_id)->getMember($member_id)->delete(); + $service = $this->libClass; + + $image = $service->getImage($id); + if($image == null){ // if the image don't exists -> error + // Renvoyer erreur + } + $member = $image->getMember($member_id); + if($member == null){ // if the image don't exists -> error + // Renvoyer erreur + } + $member->delete(); }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); }catch(UserInputError $e){ @@ -523,7 +588,16 @@ class image { // on doit être le proprio de l'image // vérifier membre existe $service = $this->libClass; - $member = $service>getImage($image_id)->getMember($member_id)->updateStatus($status); + + $image = $service->getImage($id); + if($image == null){ // if the image don't exists -> error + // Renvoyer erreur + } + $member = $image->getMember($member_id); + if($member == null){ // if the image don't exists -> error + // Renvoyer erreur + } + $member->updateStatus($status); }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); }catch(UserInputError $e){ From 6349739a6c42d413e1bc1ea5068336187055c277 Mon Sep 17 00:00:00 2001 From: Yoggzo Date: Wed, 24 Feb 2016 18:23:39 +0100 Subject: [PATCH 07/28] architecture update --- server/core/Image.php | 44 ++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/server/core/Image.php b/server/core/Image.php index dba92ff..4d22443 100644 --- a/server/core/Image.php +++ b/server/core/Image.php @@ -20,8 +20,7 @@ use OpenStack\Common\Error\UserInputError; * ADD CLASS DESCRIPTION * */ -class image { - //implements Core +class image implements Core{ /** @var App $app protected, contains the main app object */ protected $app; @@ -57,7 +56,18 @@ class image { } - private $images = array(); + /** + * Execute an action + * + * @param String $action name of another function of this class + * + * @return void + */ + public function action($action){ + + $this->{$action.""}(); + + } /** * Details about an image @@ -66,7 +76,7 @@ class image { * options for the image creation * **/ - public function createImage(array $opt){ + private function createImage(array $opt){ if(!isset($opt)){ // Renvoyer erreur @@ -139,7 +149,7 @@ class image { * * @return the list with all images on the server */ - public function listImage(){ + private function listImage(){ try{ $l = $this->libClass->listImages(); if(!isset($l)){ // if the list is empty there is no images @@ -165,7 +175,7 @@ class image { * identifier of the image * **/ - public function detailsImage($id){ + private function detailsImage($id){ if(!isset($id)){ // Renvoyer erreur } @@ -197,7 +207,7 @@ class image { * @param array $opt * options for the image creation **/ - public function updateImage($id, array $opt){ + private function updateImage($id, array $opt){ if(!isset($id)){ // Renvoyer erreur } @@ -253,7 +263,7 @@ class image { * @param string $id * identifier of the image **/ - public function deleteImage($id){ + private function deleteImage($id){ // si protected = true, demander de le mettre a false // vérifier existence image if(!isset($id)){ @@ -285,7 +295,7 @@ class image { * @param string $id * identifier of the image **/ - public function reactivateImage($id){ + private function reactivateImage($id){ if(!isset($id)){ // Renvoyer erreur } @@ -314,7 +324,7 @@ class image { * @param string $id * identifier of the image **/ - public function desactivateImage($id){ + private function desactivateImage($id){ if(!isset($id)){ // Renvoyer erreur } @@ -346,7 +356,7 @@ class image { * @param string $file_name * path of the image **/ - public function uploadImage($id, $file_name){ + private function uploadImage($id, $file_name){ if(!isset($id)){ // Renvoyer erreur } @@ -379,7 +389,7 @@ class image { * @param string $id * identifier of the image **/ - public function downloadImage($id){ + private function downloadImage($id){ if(!isset($id)){ // Renvoyer erreur } @@ -412,7 +422,7 @@ class image { * @param string $member_id * identifier of the member **/ - public function addMemberImage($image_id, $member_id){ + private function addMemberImage($image_id, $member_id){ if(!isset($image_id)){ // Renvoyer erreur } @@ -449,7 +459,7 @@ class image { * @param string $image_id * identifier of the image **/ - public function listMemberImage($image_id, $member_id){ + private function listMemberImage($image_id, $member_id){ if(!isset($image_id)){ // Renvoyer erreur } @@ -488,7 +498,7 @@ class image { * @param string $member_id * identifier of the member **/ - public function detailMemberImage($image_id, $member_id){ + private function detailMemberImage($image_id, $member_id){ if(!isset($image_id)){ // Renvoyer erreur } @@ -531,7 +541,7 @@ class image { * @param string $member_id * identifier of the member **/ - public function removeMemberImage($image_id, $member_id){ + private function removeMemberImage($image_id, $member_id){ if(!isset($image_id)){ // Renvoyer erreur } @@ -576,7 +586,7 @@ class image { * @param string $status * new status for the member **/ - public function updateMemberImage($image_id, $member_id, $status){ + private function updateMemberImage($image_id, $member_id, $status){ if(!isset($image_id)){ // Renvoyer erreur } From cfce59d6dc120848624e105614575ae0f48af81b Mon Sep 17 00:00:00 2001 From: Yoggzo Date: Mon, 29 Feb 2016 14:20:13 +0100 Subject: [PATCH 08/28] merge --- client/images/spin/128x128/Preloader_1.gif | Bin 0 -> 71831 bytes client/images/spin/128x128/Preloader_10.gif | Bin 0 -> 19793 bytes client/images/spin/128x128/Preloader_2.gif | Bin 0 -> 7879 bytes client/images/spin/128x128/Preloader_3.gif | Bin 0 -> 22053 bytes client/images/spin/128x128/Preloader_4.gif | Bin 0 -> 19963 bytes client/images/spin/128x128/Preloader_5.gif | Bin 0 -> 84698 bytes client/images/spin/128x128/Preloader_6.gif | Bin 0 -> 19299 bytes client/images/spin/128x128/Preloader_7.gif | Bin 0 -> 12651 bytes client/images/spin/128x128/Preloader_8.gif | Bin 0 -> 81985 bytes client/images/spin/128x128/Preloader_9.gif | Bin 0 -> 48009 bytes client/images/spin/32x32/Preloader_1.gif | Bin 0 -> 17796 bytes client/images/spin/32x32/Preloader_10.gif | Bin 0 -> 5943 bytes client/images/spin/32x32/Preloader_2.gif | Bin 0 -> 3551 bytes client/images/spin/32x32/Preloader_3.gif | Bin 0 -> 7980 bytes client/images/spin/32x32/Preloader_4.gif | Bin 0 -> 6852 bytes client/images/spin/32x32/Preloader_5.gif | Bin 0 -> 22755 bytes client/images/spin/32x32/Preloader_6.gif | Bin 0 -> 5965 bytes client/images/spin/32x32/Preloader_7.gif | Bin 0 -> 4217 bytes client/images/spin/32x32/Preloader_8.gif | Bin 0 -> 13706 bytes client/images/spin/32x32/Preloader_9.gif | Bin 0 -> 13661 bytes client/images/spin/64x64/Preloader_1.gif | Bin 0 -> 35166 bytes client/images/spin/64x64/Preloader_10.gif | Bin 0 -> 10015 bytes client/images/spin/64x64/Preloader_2.gif | Bin 0 -> 4799 bytes client/images/spin/64x64/Preloader_3.gif | Bin 0 -> 12080 bytes client/images/spin/64x64/Preloader_4.gif | Bin 0 -> 10456 bytes client/images/spin/64x64/Preloader_5.gif | Bin 0 -> 41405 bytes client/images/spin/64x64/Preloader_6.gif | Bin 0 -> 9959 bytes client/images/spin/64x64/Preloader_7.gif | Bin 0 -> 6225 bytes client/images/spin/64x64/Preloader_8.gif | Bin 0 -> 25056 bytes client/images/spin/64x64/Preloader_9.gif | Bin 0 -> 23767 bytes client/index.html | 5 + client/js/controllers/home/machineDetails.js | 39 +++++ client/js/controllers/home/main.js | 13 +- client/js/controllers/login.js | 9 +- client/js/controllers/status.js | 6 +- client/js/services/Compute.js | 25 ++- client/js/services/Identity.js | 79 ++++++--- client/partials/home/machineDetails.html | 84 +++++++++ client/partials/home/main.html | 7 +- client/partials/nav.html | 2 +- server/Test/AppTestClass.php | 45 ++++- server/Test/computeTest.php | 20 +++ server/core/App.php | 15 +- server/core/Compute.php | 175 +++++++++++++++++++ server/core/LibOverride/genTokenOptions.php | 10 +- server/index.php | 16 +- server/vendor/php-opencloud/openstack | 2 +- 47 files changed, 500 insertions(+), 52 deletions(-) create mode 100644 client/images/spin/128x128/Preloader_1.gif create mode 100644 client/images/spin/128x128/Preloader_10.gif create mode 100644 client/images/spin/128x128/Preloader_2.gif create mode 100644 client/images/spin/128x128/Preloader_3.gif create mode 100644 client/images/spin/128x128/Preloader_4.gif create mode 100644 client/images/spin/128x128/Preloader_5.gif create mode 100644 client/images/spin/128x128/Preloader_6.gif create mode 100644 client/images/spin/128x128/Preloader_7.gif create mode 100644 client/images/spin/128x128/Preloader_8.gif create mode 100644 client/images/spin/128x128/Preloader_9.gif create mode 100644 client/images/spin/32x32/Preloader_1.gif create mode 100644 client/images/spin/32x32/Preloader_10.gif create mode 100644 client/images/spin/32x32/Preloader_2.gif create mode 100644 client/images/spin/32x32/Preloader_3.gif create mode 100644 client/images/spin/32x32/Preloader_4.gif create mode 100644 client/images/spin/32x32/Preloader_5.gif create mode 100644 client/images/spin/32x32/Preloader_6.gif create mode 100644 client/images/spin/32x32/Preloader_7.gif create mode 100644 client/images/spin/32x32/Preloader_8.gif create mode 100644 client/images/spin/32x32/Preloader_9.gif create mode 100644 client/images/spin/64x64/Preloader_1.gif create mode 100644 client/images/spin/64x64/Preloader_10.gif create mode 100644 client/images/spin/64x64/Preloader_2.gif create mode 100644 client/images/spin/64x64/Preloader_3.gif create mode 100644 client/images/spin/64x64/Preloader_4.gif create mode 100644 client/images/spin/64x64/Preloader_5.gif create mode 100644 client/images/spin/64x64/Preloader_6.gif create mode 100644 client/images/spin/64x64/Preloader_7.gif create mode 100644 client/images/spin/64x64/Preloader_8.gif create mode 100644 client/images/spin/64x64/Preloader_9.gif create mode 100644 client/js/controllers/home/machineDetails.js create mode 100644 client/partials/home/machineDetails.html create mode 100644 server/Test/computeTest.php mode change 100644 => 100755 server/core/App.php mode change 100644 => 100755 server/core/LibOverride/genTokenOptions.php diff --git a/client/images/spin/128x128/Preloader_1.gif b/client/images/spin/128x128/Preloader_1.gif new file mode 100644 index 0000000000000000000000000000000000000000..dafe17e1f2e49cc41d2021cd6812a6e2cda0a3cc GIT binary patch literal 71831 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

Jyf0x?@3locX9d7d` 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 literal 0 HcmV?d00001 diff --git a/client/images/spin/128x128/Preloader_2.gif b/client/images/spin/128x128/Preloader_2.gif new file mode 100644 index 0000000000000000000000000000000000000000..3cb90033117619bdcd8331d59c68df859fb6339f GIT binary patch literal 7879 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 literal 0 HcmV?d00001 diff --git a/client/images/spin/128x128/Preloader_3.gif b/client/images/spin/128x128/Preloader_3.gif new file mode 100644 index 0000000000000000000000000000000000000000..7f7d4152c5866a6de5fabda052b0e6b67aae3a28 GIT binary patch literal 22053 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

Jx9sxP4Zxf^_wC)aIx$00)@g^ zP>`EkS@8~zr*DyZyFy$FO42sjYe+XfOJpA(oRI3`_1_YmojkfP z9Ni8!QS737U2eF3i@c=@dB<;&SCSyp#+URS_8#CRB-m$K3KUn_Ykuuu7V2e>ejSM z^6LSWVZT{}pVRc?9$q{C@R=BPF9n(`V?pd@d~uvd)RvNbYQp*7vfEcI9A?OM2>%an zBWYx0-bB6CtM5KUCPU8Lz0mVOLIPGk9n`~F{1K@JmR@Y?P8M(`!VmKOpF~W_56Y@O zDh*Fc9&#RV&SC?=!RxoGp~hQd+Ro&G0kS>O-F^E=KlCTB@7oo4%<>nK!7QfwBIq$z zWWM)P@rU$v6!FBkG^16fkjauUE7M1tPq&1Y9US(C^o8f%#w_5BoId~S1<`1j`!|61 z1`|&Pz@7At2iS%wIZz3k!feRQTE*En&EmR!qO5h=VG zJVIIIO|pM}M6(q_*9YC$RQ9p&6dA#4mg>WjKNd@?w3EY3|pZDabf6wuA4I*HV$f*liVV1Ek6KtHQ3eLYeua7oawex z=K7}3qo8fIo+h`37`;4O1d5Rvd z%xhsT@8fQUiQd#Zru+Y5h#|vkJU; zMZg`n?dPbzt6bwe{fhb97{Efi=t!B`@9pw{mjZ3A1L4iVN|ry32WXYlN}UVxYp@NP z4T?Vq+S+xQ$P42gD@VwLb3Dh9PSI_#S&>^^j(Li|S$M}k`U{hzer*f1_xrDx|w+j8;umzuykLTNC8sx4-%N{k9H= zzk|M{9+!{+?6qT$Q~wK(sXSpWxE}O5mf7o1HPO<(0*xMEYb&of1{^|JooAtcO#f9` z@Z{XrnwJ90`9ibmtz$$Y4|3R~ax)VS{JiP%)UBZtSg20)RZ>u11FFgqU+oPr($p7C zb|4X@Z`AQuBtsg3{!*sPudc)Dx;}x@#j;b9iQDS1bSolP3!Y3tB{i)Q3>@zE72eEL zWuCN*0rh3%;W$WP-8s{w5-M@G?{sZs)WB0g_PWZ(;duRJO=!`aqz;UREQ&K{9O(!7 zgEaWHy~E?Fwe|4LB}p306m2SLrYZbT%)04j{?XlvAz7;Z2FmzR>Gm@}=BD*h8wvin zvGtz5P4eBn_GTF`g#VX}*IeM4!OMmZtUmBH1+V$lWVNi4cv-JQ4?>(q?h;@|Id_Fn zsAon4_Ptbg8~2NqZN1sKEbG?u)l7=cqx(e_>SLYJO+VIJn%W3s&u)oDV}Q9iFaob< gQ96GqJ1O+4n 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 literal 0 HcmV?d00001 diff --git a/client/images/spin/128x128/Preloader_6.gif b/client/images/spin/128x128/Preloader_6.gif new file mode 100644 index 0000000000000000000000000000000000000000..3203d7f1d5ca147cf5be64bab04e73afc8f2d0f8 GIT binary patch literal 19299 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 PG$Gr3E^cB4mPytCSD$$3 literal 0 HcmV?d00001 diff --git a/client/images/spin/128x128/Preloader_7.gif b/client/images/spin/128x128/Preloader_7.gif new file mode 100644 index 0000000000000000000000000000000000000000..2eb19bef0ec05aefba8ee64f45f926ec619babd7 GIT binary patch literal 12651 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%0Ad9Yw_#!Dr$csVpfl3Uy&MM!*E#ky5Z9Cc*>7 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 literal 0 HcmV?d00001 diff --git a/client/images/spin/128x128/Preloader_8.gif b/client/images/spin/128x128/Preloader_8.gif new file mode 100644 index 0000000000000000000000000000000000000000..3ba82179a52d61fab30acde7a50910f35ae61156 GIT binary patch literal 81985 zcma&N30P8ZyDrWQA}BcGj5y|qV`!S-tf}E_Wrbr_S~yfTgP`J!Wo2cBL#Aftl-UfZ zIc8W^R#rGvT4tJBS|*3z-uwIZ|6JGE=loe~U99!;KJT#Bd#(F zzW{)FLH4q^BlT|m@9E*i{)_!X!*>2#mWHktmQ^GiVV!@{5x)08?TdlGOH0GA->&^$ z6!tz@TV0u+`8IL*K>w$)UvJx2R(>DNJ$3bY-}1ZBxqC-v>+8nnXJ@J^4rLdmvh%km zANk&v{CDZw@72{`uUm7w?uz&Bs%yQowz^u}`*8Kgk9T7e?px#bw$-#g5Pti)7}H$& zdwMG5`i0f`j~RknM;|tQn*MtC-OK5c;=jxDD<7X!+-QFDZF+j~$KN(U&phbrUHbXc`|9aG-$u{$3x2-1(fwrTj_~o{#VufMl6b&iiVy&n2

$z!Y3^35WNlR-e)IR&_n$9bJe&TwrQy<# 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 literal 0 HcmV?d00001 diff --git a/client/images/spin/128x128/Preloader_9.gif b/client/images/spin/128x128/Preloader_9.gif new file mode 100644 index 0000000000000000000000000000000000000000..70181928b066368069f12b5cab9bebfb943d0b0c GIT binary patch literal 48009 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 literal 0 HcmV?d00001 diff --git a/client/images/spin/32x32/Preloader_1.gif b/client/images/spin/32x32/Preloader_1.gif new file mode 100644 index 0000000000000000000000000000000000000000..b81033067d563a018a8970c5366979573c9c75d4 GIT binary patch literal 17796 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

OWnch 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 literal 0 HcmV?d00001 diff --git a/client/images/spin/32x32/Preloader_10.gif b/client/images/spin/32x32/Preloader_10.gif new file mode 100644 index 0000000000000000000000000000000000000000..f9c462fefcc43fc2a7e291e8491d18da51e13e8a GIT binary patch literal 5943 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 literal 0 HcmV?d00001 diff --git a/client/images/spin/32x32/Preloader_4.gif b/client/images/spin/32x32/Preloader_4.gif new file mode 100644 index 0000000000000000000000000000000000000000..117c756d80947fbc96e154e00496c4f4b625ff79 GIT binary patch literal 6852 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%0Ac8%DFOl_ zM5R~&5eS4LHH0cnN3@AN=j?&oBEgoOjW{Z)JRWi(U}H zU3N1`>;m_BpxbM69T{dxHgQPHzt%lB8y6_4_x?5S&M-3-pbcr5h$$Qbg8dr z>Tz#V+7pd-qMgYFsY#;igm zBDdWfso#@=zw+)_rcKTa8{kItHhXMWW6h9mV-5!g4>0NdQG(33D=2apP|>3;uuok& zkr40(-yc#ok|^k?4@0!$s46>K`8sp`xkDlj*p7`S1$O*|L=ArHm59mi66!^@xS2e) zuG5cXT*r#`hC7KJNipOvH3&%vb^jeWpBSod-wv@K#_S7eqn=9{s9vM{OB!4Xu!pL4 z3=?^kQRp;oYGkjH-}+}W1^T+g7}rng3RgupgbNi$tEMN%)38%QfQT*k~- z1PvCv3VgzuE<`J8AU8`72YtblH#uFH81U&M(5;x zXj;VV>OFRSj$dq0D+*5##qL4*tZdxl93#bH4x%Z;66)+gvkSDs@HF`RTu*Qdih_TM(7j4i8mY%Jd03! zDiRxeru=sFM|zy04Wcj!`s&w};4g)ZKN3VE>hC))M&<}xvR1uu(LSLl8~rKDWZ%`D zvl4J8{sv4RmOVKb1}OC(*lR!ZXOwV&yCSg0ETpEp}97kK9Q? z!chLnh+ZX96?Yamt?qhn2i2|FULPfYelMn}p2^;x|3j|6T*ln2a4k?|VlDt+} zogwRk`S4(W5CLJWwz%QSgu}OI$*O;No3aqUSImk^;JeqTmto%nT}HVD14Iw<5g9NH!D50_+FO7-RUyu{wJ~9VV&@z%AhFT%hOJj z^>ADxvYTuPVluvEntxRJCs{bcKL(jQl4Xq$(+|`V}`OHE-(-XU-HR%i*~Y zoa(wV&Vo0t>yclzmH)N#bh%Z_l$AfJuPNdoa0xeZ^W|U;Lz&2&HzU{!`M=8CTT#b) zC+u8;WDBwoVII`2;DK&+0R4I~mGUnqhoyvLp@Y*EA095(C-Bf+>q;Bdm|28bXik!7 z3zYpxe2YHs&>3Beu>5#GX_(}fMwvLYu|EUFaM0x!Jv!h-W1z$0Dvw@~Q^^CF1^Aa0bsv1J` zo*XvU${9`NFpwdCoA;JNrPXY6y?@m%kxC`Rh%neyVQOEFX`DZ_qTbyURfB%xX#s0#PuoK!vIC(n zZjWIXgf2cKz@Xq0x26VqIY5Pb2E$^Ft)`D)Z*MOY@i<4w1xhmTj3pz_%F9BlK~WkS z)OZ+c>8~lwKY2&NFnSi;I-z-=5#@VGRIv|o2jx@HNM_eO_#6)H<=Ogm+~7NSo3fO}p$O0_N{F|mpTo_iR=#<$l<0JZ^Ta}{rb#$D%6rXr;%ZI;_6P3e zKF0BTi8mYk!(4yjq$HSrdYJXT&etSeunjhHZs!zM>~|_s9OTt>ogK<7HcmBO&W7L{ z;f1WsMt3%qhuxWDR-?;~*@eK%+e>O2zFa>A&o4$py7p_vBZeWTj_!?#lz&2etqyBB zHwV5O+raOIny#=9c61*TJ|POS!+vc1>6YnD)EOG>3XlOP!zlciZOCAXmbbTstU4v9 zj^h-{``*E(*GOuiLcQk%3pmY;_oc> zR^FSZ@Tx~K>w+4JXDOB5y2UZ$%9Ec_yKVQK$q>Lrw z&b?WL{$xeAvo>U>jJ6mYYXKHK?WnEh#al9T7cPkomX?43I_54H0RL|Nrk%&He*Xfv98v literal 0 HcmV?d00001 diff --git a/client/images/spin/32x32/Preloader_6.gif b/client/images/spin/32x32/Preloader_6.gif new file mode 100644 index 0000000000000000000000000000000000000000..9087dedf53d99250343bb6791ad86ad78c28ac32 GIT binary patch literal 5965 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 literal 0 HcmV?d00001 diff --git a/client/images/spin/32x32/Preloader_7.gif b/client/images/spin/32x32/Preloader_7.gif new file mode 100644 index 0000000000000000000000000000000000000000..0b1e63387b906e6103e884dcc5d889c06de875e4 GIT binary patch literal 4217 zcmaJ@3p|s1A0Hd$mJy+-8QsHNk4r+Eh3E(;U39{%L&X;BP;b54s6=#7opd;_DHXc8 zmP*-(B$v6&Etk!0bHB`GX14cPrSyJI?>@Uc&;R-TzTfZf^8fv}#|2|$?GFdRLGvKc zEk@s;^?jG#byF(3jy+>KX4Qzq;w6!2cXsWbhjoifBBz|%j`7*Y9Yg4xT9HWHFw7gD z7t9ERWAlRCkHdQ(*N@Bzgd$P%2#@fl-M6T@YH+e^V(u=JGr?b+UI3nmM&|@eA~EJ+ zoySwgB!4lJ$%(1zdC@a^@>T1{iCN&;{Nhs62ruCSn@HG3Gb+0#^mTjN_-tG?>kf0UmOK5j zXS8pcf3Jn(Q_xu4Gb#`+6?TpkbdK~+&yy;;Sd(+*eG{n-{R2GyiC3+OHNAnwEvW2T z=SOw1?|YtgjW9=f!LM4!<^+%0hXRY4*Xw#y8~abZYD;e#;0r}LZ9~~@+*0<~?4s~w zNtPKrs_r+!9~SivPg6-O%s$ zgi$>>SQOBKj$f^;G#d>1JeNNt9C`S(`QzIl;3IqZH zO9$OO;AnrMKk&QLK9b;%J&7a218~0uhuR?~UX>!?!GU%N9}9P+I{}3Y3U)phhVweN z&l`L0B-T0*VZRH$Gtwq9gb;!w`okkbPKAcsMA{+z1MvYk8{k^9Y>a?^G9jL{LpVwv zz$Kh0d>9UHVPs~AMVgqvEiH{q%q=V}O?JRdktU|bNZ@U0Xku<-VQFLf6a32y0kDMy z9=GvCW4>?!cXo&%B9UNYY#b30VH9Czgb(}8*u>h}T7qF}Y6w^uhMx^3`bQduhU+gQ zpmE{YuwVi)7#|9kAo>U3&k*epfYQ$)gb=>MhK3t`3dabG4>6APCm5R;AtfO#8@jvy zf76hVuh!v2Puw@X{|FrJeU^YT_QZwb&xB!dfVsYeieQ5Z!}$~OVcvNBspTws1mTJJ z@E|+^j`FgEZ*lj>28T)(wtn((ceil~4JZ1CVsS2LI|P7X6dW9A^V4oeGi%e`PS#dV zK;E6q94)Oa(P%UhV`*+_VdiAI?2E=@&xGJYiOar$-+VDY^p!M22mxS5?9L4IED(dGeeQ01U0s~_V4TpX-Hs0SyX^oHZt6?ecRS8n>TGV&`0ROH>}syS+`bOOLL8e`f4>*n93?;B}D~!sGO_} z1S}1V2fYOd1Pn}x9l!@TLg63~G!!J3*Ky9JN`YloZ}Z)fD5bf{tr+R&Y?2WN5t$11 zQt#Y(M=~})aegYVS2{^s^G0T*+P&(ViV+zz&lLyD{Io1KL63)L#A&Y5DdDzVXGhC9 zUEg-Jx-h%xfyZ6fzg>%Rm=6yYoam}9dgzlaCG|~$5+DHzQUJc}00}z@4pfIDZ%t8{ZiIPl(o% zpsYL~b~_GoWBC!}w9*(+l`agTdWWi{vEeu)u_0adj4m@{6K_wEA*wAI#FrzOy|TbOZKtb`hY%L&*RDH*z0w^@sXHH49T?SygBL-twQ>(==NSU zlUVC$B^#n29QmC-2_g_T6!R(RlN+><5L-&)eP!w<2c4%lw4 zyOgnC-Ls)YT3fNkmMnL#R625%Fm<>8do=|w==#L1-$P4(fp+>_PZmwy?6{j&Tkjfu z%=5#-g8LQePNc(+mR>|o{b74;P1g(1P`%8mWUJk8Sz7vUOE<80Twc^;kmHC$-dcQ3 z*vd3O0AyuA^xkD;Xs(}=7T3V}l7eHJ@S$EgfNXk#yOq#zOv+Bz=J2SWOQ!u^w3}KU z;clO@qIfMe|4I(U!J#90!$}$RgS%{4uWR;HIX0cIP6}$e}wbhz8yt!?8 zQOVi{F5_3P=VQ|X43{*vt8T)jsL8se4M$d^(T6*W32e+smZpL88>kX=WzG}O-KAdqXer-u^M&CBIlnrpB~n?|flFAYyoO4ROc=!2Om!EVgNkSPf_*M~5+ z2F{2W%2r~@R50EuMZ0;7ZFU=XuPPrGrGSH?W-`@e)>!{eCrc6e3E6Ws>blGEr{)-{2MHS4Ey$eq>dBu)ePG+So*R zU=&nrd8sp#;b8!QBDB@CR_v*70ow!W0uwi@fGJQ5<`n1YwM`e13dq2Npvw-Lt2e)d zrReFGD@i{%JM)t}{92L~B%hU(B&T>WImPfG%`KVsUG104BAEas1V^glDI;G$vn~7L z?MVS|<$b3o*~z4hFz=ZdD*9@I%8^{DA(g0I2^y*;Qh7mr2$=YMe56%b4BgK5_fgfA zYL$Ra{=7pE0pTm=`JLArGRYuY@(m7f^6ZBnsDSzoU~zwyqqE$l18Es| zlB#cOh!3B?s@iu%ks^!Sc{Yj;DkE(ttp9W}-CbE-rB96_nG0S3ArB-KB}WlArcqHG z^j{OBSO=b!cFFTmPZr&Y%m(F0-2(H?1$)U8G@4OJ2hkdk z2ZQf`Dd@TuW;J}*MM@yKFKLwUZ1=k7s!b7h=OP@)%v6$sEF9pWgJj%wfHYEFViMNb zLO?DiVPz|%pHeAO5^5XM7CibXF~d2>;oH!GDPt++-VuJaE(G60WcU^|1vx-`Es z$YrotG+X6Kb@+3=m=!yCBZn#h#6pv@R zm|@vHn$o~|t3T|-lL*%Q$ymG-f( z)!0fql2npJAN|*Lq&R>paivJb!lfwr1wO2mk``69BmW zVsv|Bb>rj2r-d&oLxVHl7Qfz#{@&fSvAK!&4#+F7Ub>r9J38>~?j5(Lve(n^9?eZ} zZf>rlaw;XW_l}99=TzwNq|E#;KUOxsecN7J z{xR9M*mT*##phc``sVWcwdwAa)gK>=3g$k3>Kqtuym5PbbA#4-qq_Op#>bDZyxje+ z)vUjNw6ndLQc$|_{{8cXkEb5AzNb?^t}MSxjQiHf_*7oD_WIt}wutqa>0e)7-R|hw zTKTlSvGMwd*Uy)?XU`-aiAwZpu2|*N_CDfF&CV^Y{rE9D@?)a;*OxCpUp&8Yzhil2 z^+C@7p{{Vbm$`J~dTCwL*2>EJ<)ycQzRNv1i%Z{5+-&fRJM;Bg>-eX+j;R;zuO_yB z{#bcb@x8xj^yB*D~Ip4`~jSlj#+a-)7=_U#-a_4{B+>zxOW$Dgjx z4sL#*UuwU#wEX>Rd;Byx>|;rB_^rzWoU!$pzWBQ>UmEIT?>29(t(~oIIB==>*{e4{ z*VZE28#g|1>R2~EBkXMOI5;W&Otdhe}T0>Ud*T>BW_y(x}@_EB(E1 zzAmh-uP5BQdX!bU%zp64!|T5m-zR@T?HcedBpH-3zb{`mQGd+XQc*Qt$PzkW_WTjk30^XJ9uC$?5s7Z$&6e*M}t z^J-=I{MOdilZnZPZ=WaU7GHhF`96I9!}o8WSHCZ|op}2B!^K9{a#!ZT%jeeKc1(Vr zCtfc3`tt|3TjY+glZ~6JHI`^&q-Vg#0{{THk31cT2)u8sFZXJ>FM;gqe>)nSaL`cA1)FBf`14puTU~mW_DLT+K$;r(>>4d*|0BWBV!ZN`kA)Fi@80(8j z2oH;hu}Ij9@(qae3$)eL`EQfx9IB^ z85g@3#U1ItrVvj4pJpRs^!}WVo_}Pxeu6Jq-%!us_muuB=;-**MZ?4Yr*urLOW^;G z_y5^&j9Vf(P~RmmCNeJCKag8o<#$(P3+w1W-`L1#x5&t_zobYEj*N|r363NqtX)kJ z8jimHArZeHX#QEl(b2*_A|}>1!avX+zZb=ALoXyGz+yKJYiw?0ZDej{!`!QZy`@45m1kForF9)^EgSD!l={ohObA4~n$BQAb^-~JD9xj+5~ z`hgK#yhn3^&9k$;wfSpfeeLIu)s^qd-Erx|x%ad0W~Qg!zIpxX<%{Q& z&z??f%g1=;U}{zk@x&&ejHRjl*L0 zS?#slV_|N#+tdVYY-DJlucxb{t);15y(;jtx z#m8aBVwM4|gUB3tbMH-%3(6)-cE7F94ZNv*<-xE_me;eClJ``UQKF3ZANk0hqvu#WI$r_cp|^B>rN=S zWT+~Qt?Xa71!7*s-`#U@g9DNEr4%_RF;AD`XnKOMliwG={Mx-Vl?)P5@fe;ooK5!a zJG=LMe5J{W@VC8jVLz4KF1tZ-)PlGZ&#vxD{H9gL6jgX5_ymfI6-&S#*b`4Oaw2x- ztH4Smh6`-&V9d%hC8vRQ7MFsjYNBNQteOdH!8ZNp#V=l1|GD(8)c@Jz*Bir>{}mPw zfCr$&eg7pa;uJ!7%i(sg3#+OtO{9@Cf!KQVdZ3N4Le)jJn5cnRCP&W}9iS176{w9=L!jvIy`$-Ef3&TMpuM}fsA=4;g+old%M z2J!R9G5Z~Px!ZU$2SGbRH(0+!NjWSg#7Qg;(g)*ZbL*KWa! z46ejUot zV#Q9+p9X~jx8(0shLNZIWTtg1@Nye0uQEwQ$?nrP{OzJX0z1A;`tzN_LIUoIs{r%W zY|jgwx&MLDYxM&374hQwTi~%j&>NrLKTJQiea|$Hhv)C*MkcAsxg(^s`&mfq;JQY_ z!lkY%n=}#C(4v3It%2DtJbVRPZwKtPaAYOsAHC$Hm*8Ei zCY&x`C4GZcb8{JoRF=`X;5(HwtH?K6yA?dkQb1>Avq*_cUk^ULlDxfMQWWZKLLG-d z##IQ9A4;j3krAyk3(u`~Ih2$lJAu2YN%d}iIH3%|=+2c-QbDHL75wNI#Q?M_ffB;| z-ja>8;e)C2sqS}LRcX5Kw$m=kvzG}94;^nH5?A$8K8frc0BD7^dRe3oFGmyW8MAG~ zFr7wX>VclYkXwGpI0C{>r)9dQv4NE^n)q+@GpY2my*qV)HQ=l{7Yp% z!Y}P#{IU+GN`UQeDIY3ol#{n_^z|x?ghgMp`$vIJA-wG2me#I+0nu-vswXWe-tme{ z=0s24jzCDcXCt^jFUEAHJ$`wn=6K!A%JMT5b0G=W9H%m3C$6qq3 zc}jEDJ?Y}oz_K?lgxNK8sr}ba-;gCZzSguEXxMD(s4^0Cp}f&rKQ~CMk@ggv>%{D5 z2&fW_@>#=39#g2W^sx5=vmb+Xr6HrFbK_1>$Af*cjdDos4iC4@{g1p0xPt$z6dz?v zqYFx^k1108^S#f_st=F}FZf#KtxfmDuNZta$f{MmHMvK%(B_YhxB|cKDfHk2Hhcsq z>xkN>66utYSW3%OzLLCtR zPOvu~5t)0o@C+oCm2lPdlDTq@EbG=3-CFUc#lYQ3P(@qQz5{4DaQaPU*7cUm*Cz*< zd0{}|_Vq+(`ef7Dpkj^b6a8rFcEtR8f_>p6|I5=w{py$j1NoidGkfI%MlTv!Z)bdu zqxRN8URo8r+(RyF&(jz;%&6=Xznx6845*yCRA+i<2U6m2b5@!onaI@^wrczbr}=&dS3H6)7>^_3*lKi*9s65JUZ3v`Z9Lka_;trsyEt0N}&v)(vu6TN1NprmZA$d0VkE5WP zo_$i8bf)VHhEy+w1GWb6MU=4}^xcr_o%9R?F*rR@YyA@j%THjE$O3S)0v{=VcR)>Z zCBm~0q8j{|ia(cG6~7Pw=;J8D7QraDFxET5^)y_OiJb@ZyeYU<>&{^pl{c9+{2?)H zv2cQ4ie0tIxP!t7y4_y728tI|7d4gT6Nvc{ZRLGe#PqADY|HT1ue$`bm}GVoQz!R{ZDle61XcN}O4kOHLw)h+nk^%8!3*ag;QpG6mm*n;39wqDyC zL&H=ODTMJc!d&yviwgCF1SWC)Ck893se#CyZ0)keY7Myi5__pBMlMiE4|3(3vZ*2) z)*Z9YZz}Q-^zkcHK+KSQCrEDcWHOm4duew8zKW@2GJlQ&7wBNwp+%&5=(z0DSlUT# zcc6-eA<-ycd)!bBSG6zJTfi{@E z1&@^_z|b&*kYz{r z@lnksQp!1beuyXOK&zp$lEN#~=Wse$-b8&NNWCtYHZ~e)p2O_dCbw)mVmrJMMFLX^ z&moLXiNY6LWHU^d@>UK9l;{)iO%Q|@ZHZjJhDVs23*O*CB6#q8>XSlB3Dz|FsHTqm zj5E@XBY)M=#*aXYAp>+gOUt7s^~3l(f+F!MBy^Pqod^8u%b~959W&={%E&AShto!s zR2nCV0J~H8>M?kncmNY2*a$h>NjVRxgz&lqV0gjb=%!4QLxfH+k8;ZzMO{1~frFl& zP@Bd7=Z^TV#n4#9F+%wyw0s)Ky~>UrIyXp!sObvjQKRK{*VcFYLJt}RZMKU0+JvU8 z=nVhpzCegowQYOKzy=nPlCqBC_ZtR#Prn#8qH_qtFi zIgsQiR~Fs?<6Ua0o|6IRCbaBh-9(7>_+|^?Rfa`VlYJl3IIWb}Kj?JfNR(I{?ZcyY z4<&5tMQd+WJrh;*2b3oUtSRq4mdStZ^LPl2-C4{p05J<57M0P9NZa16`~6|WrYy#K zY_@DV1kn#UCAI4{CUo3m$GuzSt8C|ykN8FN=izns2dn&rsZm10Dh0^PSeGC`O0XyT_XOy%`k(Ur%0US zg>Y>~727JP*8VU+gWi=T93tDQ?)>7S+k`=;NG09L&hb|;qq|*{BVIU)uJg`l^;R*S zuN`r&X3p8j51qEO?+Jg2zNmfc(af~9PuGb#PtoPX0f&ruX&EsswIR_Iar9xvR5b2= zr={6OkLJV)tw&Zl!?1Eo&}@ z`71`?jt+uc*v+Hr^&05ZrN)#malcpYhB)gqb)$I|6L&4O{=7UObQA1zvWbTp8<4v& z$;S`BS+lb+%i|H2-3lHDe)^_naHL^(_)T(XzD6I2rcu3f$@r4pK?$H}M;!O8)2n;P zbP5t6*`cogV@=xt&y!VpP<_otf=^cD_PYUqm6wV=)KD^?&ye4xnn!w?1MJZ*r}O5T zh{R3vz~l|43r)S4)K|FKdrPUj8i-v5O4I$=RNlrCmy1~zi;B7Qbyb|D_LVEB68J3A)IJ}7&w>s_AL8MjclAEB_` z>s&x?xkvL0bcO15uQE4=0w)_eSi~y$-e4Vpa**wuA4iHxymV{PJ`|C|mNvym-XrzX zyOMl6Pp`=|;d0>_VVhk=HG*;oGBD!qShX+J{7$Tw2C<6J7Hk7^+<)C)kf{{bomT0< zd{J)g-nep|GrcseJ0=E^r+$IUwemyP6lNb`=Z5WXCgcj-;b%PHKVLagl}>HNO!z!> za#)70*R@fJ+_ATzoVH#L{sv|W>Oe}Fn$P*NX9eQXI zHi(Vt*C@?=#SZ~(GUIgz$l~p;#nwkSv~JX_h$los9x=@mBP50wGm<1!9itaJ*C5k) z4YB)q!JJND8lOg`2zQAvLjdT58lFsz&?P7OANN2t+0aIRROTS3S}cvG!4^~&$~JTP z`@KY9P3?=amd_aq;;skvmCM8^y@h@?MBG>m?b}a5hs1`8jx-oD9i+m1u=qprGZHVhcU`D8ntsRA8A`FUoEUlfQ5Lp zl$zEM4-i=k{SgmSw|zrF%O>1XLz(HkH-#E z1)ktk_x8ZuF3+%2&!#5{fRd)15M_QVlcNIyAWP%7r|l)bLnJy*Bk|Z(OaCmL@i0gq zHR{z8XU{Q26$RcS1?i0k^pkz1m?FzWJx}0uT)dbR8>4@-oqW(XX+Fxw_M;RZ&)x$j zwSp2l-4faAThQZ7E)KeQ1P9^97Yg_c-whWYbXfuv19iXgpM{%!7dyuX#_^mTRK32d zbbg%*6a*(=_!(hBcrk%t1FTrof7-GC-eUi9Dztq1iHKXmj17(Q_}t0c(n5zp34W>R zPFy-`y(@goi@}0B3FFjIag@rjK*LF#Jy`poystK)*1dXfq#2Z& zA7ob+!_Vi#HVv4BLE%=r51*s~)bnaPo1CS=!c^HI(7NN9 zCr2pVa+%b8oyk_ipYtbIWNr&oUly!c!5`#PTfp zz#7tc8U{O?z?&r?ry7%qoinHu<^#1m_oUtR#2mzGF;OCdssh%z*kJUxJZWZFdzD_I zWH*RkwSYm_1i!A#%5tw<=3&T>_frKjRcrYTjJlm|;3BekQ7e<>DmEV&383oS_wlU2 zE>5M;1%$33(s3#C%yhA58fbuumf6g!^W-_{zd!1m8JyQf0lD6Y852|wr?&t~ds%*+ zu^HTb6a^HK%tGwkuz)oOC^*4z9&PbcjNTkN<8lB&)F;z)R~9`wFiKuD3y}c*#Hkl# zBtMl+3l6Yn-^~0-!LNe?q^dN8_)d3rrKTezke5s*Tlpkz($!wbVbn!mTNS?_B{-CF zp7Dkx)Rk6ApY4|iKZpG=WXc>Vy`)v)){kRWS1HenEG>=r)teyrF7ZDYzrC?rzg; zfu2gULQJBpgk4e8B=5nHLu#>I##?wVel1?Er?yw3(#1ilZn&zZ449abWvMXF^(bTY z=oIqO* zk0_TuAv!`s^8y>x$U=pJ4}ob-D;RO?p(?idD>c$vD;`||7O|4jLrHE#ClLD%q+(7q zlgtjdH{mn9c|8&KOa$MxWD_O=N)H4VCVM$Z51W2WM~CbiJUz`Wvrap4K@wh*hU(N0 zJ;t9_XWPa8I3~Q-HpgUF+Mo4&KYZiNb@>sEZ|9w?#8o{DD>09&q&;@@z|9cD z?$(0jR0mlDqTgGXxEzyMIm1+o za-S(LKdEyU4+#HK5^7f4C%EEMBZcRLalnAZ?0Jq{Wvm}nQA?VhX88m&<&iDsTqF30 zna~Q=l4&+YlMkNi7XmQdoNYAq@SX1%9M36AfqMcEX1Ad}DXJ1M#Xd_<*V8zPP$043OeDM0bq}j*cp}zub(M5Q zJA=TN`>FI};ybm$7#g-eg<4Y$VLdm18y)XlJMFu2bqMAP0M~n z-;I6pFbtbLE~kd*-Y2mxy=mwge7;LObg@b;R)LAg=MwG=rSG#UiBSs87O zy*%sMX%$yQBvFMKeGn6gSdN0BT&&BTSx1|9uCb&TmwYECr`MTjr9D{jHp7islS(~`voM*YR zBh^yoM54Ix`Q7#$92KHaVv0@m;Mj61iu89!D%Jep`q3%CO#GK6At$VD?E_V!EmllQ z^|7T~SgV$8wwNZ!Q=9O(s7OY;|6?K*2$o72W1tCW8i0{94zZM6ql^n<`9QopF(=BJ zbaWA7wYHAMjTt-jsV`b?$Lys0l-;(3b=9of57c7b|=afFI1 zC+$s4v=SLMZC>98>>1}2_BoK0Kl6Q`8lOi`mtjH~yp$b5QFnE(hNktUeDB@79&;_N z=K(pSi%465Und65p?G5*8#>r<0D?S)xm-k~iBAL+W{O|bQE|ei;IDP))fLUq9QaNA z1jLQoh(qE6O8^jxzp8_+=RQ7}CohnZ!T?V!q~xMUIr&f2jYZK6{`7IrR6Yq28pkwk z6I84A%gv4{YwrOS)bbyWCjwA9fLgQw+K+>XF=Ntoug!i#U}tJwdU^M4k_h=WSO5l* z$Yc-!mu0_oizMLU;rQom#QCIbBl&+avowU%ZP0ILi3CJ;u9^88R#w@hjyEh#v#E3e z3B<47(V5*yc>)>l*EnYrS7aHm#AbN+r{OUHrSZ^? ztK=Pl?lBhaMQ5BKF7-}b^IU;Gfi&RUkn`+;nFsd<2Thk{y(mLy0l1dZ*wBnGc@Lsl9JhkwVb zSdA3YDZDsZ8V>ymic8iJMe(K7$#!Mp#y})~C7E&H6TL0fsv+4wpsJ50cFn3_98*{- z!hF=zY@(J&(MaFEI3UK?`Wb5!$SXZU%mIJj9C-{zt_46*mIM`13lGoEoI>FnQz>dL z4mDteqn|wyV5`G>NAZ!skueMwFPg=__#VlPI%LIATL&Eyp!L0>GD5>2?$Hd zx25D^r=hTx-*)!0?s{hx3Z}J)2vwC`w4r6fVWjmNtpR4Im9@3HjOu1>L$x(LhAAWO zdtGr4m>5)D)uRF^iuh|?f?rzHEe$rYhT$tn&^Q}f?($Cf8py?@;1qLY8ht3Bo*Q5v z%vGX3l3l~eEnHnAU4ddIwSXNmq+oK`#qmR{!h;wsf%OYo98MV`%L=)o@o_3WjFsB zQgp)n~69pr^5;Jxij zZ088svNq8Gx#ykf8B~%y<$3F+=gr)Fzf?&Fx}f*Le!h(0CYHaT;eqLnJWj&LjC^VS z@a!oQ(N|}e3@J7Fpj|}>jICGplC7X3z51~2#Ugf(fjkuh(05`Rx|j_4xQN=f=15{x zQioZh2jx-`G__blp?H#pX^{hXbetiESnDw(ny9lpRTLBGl`7aA9byf7pCy#d>Zu-w^2bFt&5B1Fj#ruEBXKA#Qr;SUG68;rO8bn2yrv6z>B+}NEES{l455?Gg8At zhimKtagb4oE~l&u^x1;aS$6s$7Ib%Imtnj$QXo*tK7r)71{gMeYjhqVedft)XAm)cM%;`S7nDh`ZMQ8;2(AhSeRc7{7 zNIzR)Igg+-DezMcYUbFfZNwJ5Ne&d9X|p{D3{wErV4L>RA8%!is`M1U1b;5k>z8uJxO@yf8K1>M{NDp(y3pT^iDQcs&8ac4%s(448TW|m$?rd-a zO6kq?k0%h}hK3Ar^t>4pAiT+9>$HJ2Uzst0m9vFFe&GKm)&47z{cq-smTH4tHa~#B zMR(yEtp|3Je^s{0rOxdtuh3nN1Dl#6n9YYI&w7T^a9XPSqaip5ro7mFPUAH4dMz(4 z6g~z2o+ppf+G~$cnGDF~XqkCFih|A|ctv;FoB6wNl<$H=1*ATY570VzGXHR{uKPqC zp|2)Y!TfU(LdOZgx;nv^zmRwmn zBvVu_I0}Ly(4FB2WlN(sVuxAF00ak%vY?e*aKc zhco+fEM@ImI2M3CID7H}RA?1ILK~8B%v}QV1}Qj_Bo9f%34*uY6HBPcKt4o{XRAuv zS`$q9M-XhQHeGa%Xo(vcV0v{TxCZl|dhEZXZ#JKz_^&(yak%A=qf?@O+&n^#i@VX{ z%%RpAjF+7C;P=UVY=1Vu!nT2)Dw&pgJU%s+cvVHp3U0=PRFffli1zr`8Ujz?U9R%c zbF(R=X%+NNMC>Ot)z_@tp;)v*Hb{#v^H@x}! zYb5XvOqb)50sG}GqIxsJK=hc^kJXSB3-?Zsy|#(vK_NVfA!QJx5KhJSPIL)~)FfL; zZ~HvjPK3Am+ZAP=5g{Erce7Hg>(J|6n<~};$Q=H6xBHLIe*&0+Pu*O&UFSHRt^7>a zz}k)&27N?TWVLe4C?!vQY)ar7)1WJ&u{I(wTM36$UYijr-KL?h%2e>)h^^o)vKhqW zBgXd;?muPzUokH;VxD>A?`Vl983z-*Pc|%XhhU1c-0`i|{ogL`IU?IMfA?8FikB%X z{#wHxiqXt&P--n-V|27wo5jYe%2d5m0XojLud|mVg+=9aZ+|wccU1?7$mCC9R&DwW z8Z0WjG}6W08^LFz$D`DSJ0k}lL=!00wXy=>x6Yqt4m2C@-E}n|-Y_E!^VVWAi9g?{qT z4dp3Y>aiX>8Vt4-Obing^d22xNMK>PX2j_8JTs$zkPmydz_WA5(b!`|Z{&H!J%e$F z(KvVoG_8caoBiNPX7QQVQZ1iH_<&H9VhH1Nf|EBxL<<2Ear16W{7tPOA+fgAiVOOd@zv#>2hiA8umr*7Hb*h8J$7Dy*0o*h_wJL1sQt!s zXHb(g&mr~Rm|wx|dd^o0d8=!_Pe2}19$BY8rZDP7GHNF~v^RJ0oZ}b+ulWli ztE4l?7SX~xHb#OJXzJ;0a9gk12wtKK1l%}Bpn-4tT2px)uM5(JZsMvidr6*nV})&h zYe7R*Pi)F|GmkBQbEVlod9!2=-KhaEkK`u3tf^dyXB$s*sXy^>LQ(sl)E}$hSO22^ z#D-t-TbQ-eJ*t|y{9(D~0sBd3QU}lEDywpc$>u}Ke z-4Ep)7JX!;No5%G10?VW1qja6kIegGt=?>WF5J?AT*}k`Cz*{ztkRGxPCjC(3i;8g znD@9ny+o6mF7P^ejNv1qZbt&Ys?g_ezn()n8>E+m(8qRF(TO!qL8qz*D8)$eD!6;U zN6cZyC-IIi)A+ghE~P#3tf;R`PsQxL=J&)(4GAP}@lm;1`jG{QFom}nhoGJ!@gd-c zbz~hCJ_88dYOsiWG1}E`7KtCUo#M#%jq3Zz<{xwk_uSBQT&%#L(&M)u`Xp8xQ{1l#=&#u+oc??$}7P%6g zBG6z1`kCzwMD(HxW%PkyI11OjE6XC<)CWi76NFs=ZZg%r*fl1f0fwoV1w*hRLJgY| za}y`h_5}>+L5|naVaLvLDZLC#kKw_`Ooa2HTM=*WAsvbg#)9AShw-Y2KxkD0Fwxud zPw($n|9Ua`@&yr<;79TuV< z#fYnr1`uJ+Kq@ly@NAFp$FAtG?A<=+{M>ck0~5bYM)7Z85O%rvRx6IX^x{sNyGpQx piYVx_O7-Qun|&MgtDl}>lf{ocSYG-3()yO^gU$6^?v~#3e*k#z41xdv literal 0 HcmV?d00001 diff --git a/client/images/spin/32x32/Preloader_9.gif b/client/images/spin/32x32/Preloader_9.gif new file mode 100644 index 0000000000000000000000000000000000000000..e38dd5ae03f8cf1c9a54a007576f0ba9a01673ff GIT binary patch literal 13661 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 literal 0 HcmV?d00001 diff --git a/client/images/spin/64x64/Preloader_2.gif b/client/images/spin/64x64/Preloader_2.gif new file mode 100644 index 0000000000000000000000000000000000000000..98218271f56841295547959676187cc79d0b94ed GIT binary patch literal 4799 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 Qg#uqHr%#|IAfRpk13idq>Hq)$ literal 0 HcmV?d00001 diff --git a/client/images/spin/64x64/Preloader_3.gif b/client/images/spin/64x64/Preloader_3.gif new file mode 100644 index 0000000000000000000000000000000000000000..52b81ba4216606302c6dd5d682af729932f6775c GIT binary patch literal 12080 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 literal 0 HcmV?d00001 diff --git a/client/images/spin/64x64/Preloader_4.gif b/client/images/spin/64x64/Preloader_4.gif new file mode 100644 index 0000000000000000000000000000000000000000..3408b5d38c52cd71bdf59dcf4aaee22b252814fc GIT binary patch literal 10456 zcmcJU2UJtr*6$HQmkt^bG@*tfga8pxB$NQ5Ne2Ou-lU0u$ngN7H>FFFUIVC9J4%rf zK#?j%5Ks|oZwHU%-tXS`?tSBY8Dx;`thM(1uQ}ITYyP$-Mnhh~4n={Y_(nmo z(fexJ-Pz{B(C(Kd)4Bn}ntrFpZ+3~Kx`~B^?&38%zAB<)YzFAFc%iw!U2~Dws=%opQAO zT#z@nzTG&pq+0Px`|j(dit=~Mo9bmZG;B*3{JU!~5^-ZPH(Vm`}dB_x0q+a=oke<5H*Sl1S z%Nv|s$h@^ZGyOi`%GTt>oiW1ImbYKO?JkxU?|%M#`T5wJ#r3w2Uw39dKAu`Edo$Coc(*V<~=CnIYe?eG0AZw?R5cwO3CS$V(ut>n$zTHA~FzTQ*L4$=6jySccz zoAGuT^-rdkW_&!Kx_Xuu+;dI4ci+SJjitGEaeGi)zH#33Zae!T|IqtUH}*-SNlP=* z{{Do8$<`i`w6jCn+aqpn?k;{_+}znG5?7m^6G@~8?-ohh+mlx26X#85ygfE{_pI*^ z?vY3z*S0E0=ePHWE6*F(+S?*J-zC1BA(8e88ELUyQy*5hHv0QWyStxaqF#LbitU*E z6d7hv-M9H>c9n)HEzG3xi?N&>+B$8rq9Jidp#RnTHV-N z{u$3KZw1Pi<_4c|JSEY z{17)sC4O@`J-D8anv<)WR*4o+AxNa8w5%KwDJ=m( zz@-sVaNrMlQd(9~4ylMZ1^Mg658Tby(OJ<*UE{BN0pFDPUH$xg6s4rDUcD-LRYua= z*F{QNK|z5$1_E&sXmRq&H7`HAz>{8A1b&R5?sUb$*UiVz&D#q?9?{O;+uu)#AF%Yh z1W%uz!+KqjJdh*l;O!|DXy+p(EeR(}`q5BN@BiM^)AMKRD}F{!zwG^&179(@=Hnz~ z+K0S5UuF;Z*5W6__yQz z)z|Ug+XDZ$eWd_nq{y!Q&DB3H0r5lr_%m>UFF!-y$qR^gUm&m#?URUmyF1%k-!?ba z*H%}SzkXR-{JcPzpZhfX@x%L>>8W><6K}`IMn{00GC0uR_qzAh%bxBod}l{{+l$tg z=BDS*8lOIS{OI9>`wjJVwKdiE?%t`YtiY9*m6jA26&B>@<>uVZ&dSWVm7bQGlAM%y z^F~5^Tx?8qRAfYW7&bH{_|NNq1YHZf8sP7D#rLw0x0k2KC3iPh7iT9&2YWl)i#8Xm ztt`)5n46iJ7#kTHoYU9S)zQXiX=MBB zM1+L|1^A(m6UX^@kMVGWj~?OTs7 zP!t6P-9E)WJ+D?xK}$FthnO|Krtn2HtAKWnR&7yxJXpqk0$*F)nFvvff{-{-$TUb+- zg@~3r9et%a&iIsetM-x4W|22?f;TGFTs3^ndQx(0WM`u9Us85mhnnAGiM+KOe7}Uv zc&aXwlZSnAIH>~`-KAmp5?uKqAxYq3ZVudMHaJ3t=gp#2?c{6Xy7Nb!9q-nL^tbL2 zRaswJ?EQA z8)L+9gHrn*P&7|LpHUP|j$*oHfVWq>GKizw{iMF2MmR(x4Q5)6m_mMkag~xM~SV)4W{ig91qB1A^=w)Df z5iA1wcVL!<8aI!tAS6bgc%lB4#5ZJ#uHEsG7^=VgA9;Gwb$*0}jYgP7MlqqIibj}5 zTg%a23&hr*${DgafH#_sq5&j2!quRXY4W>cqC*IWOm;;0&Lx!lbgj0+O# z;_m3G#?Hr*e{Um*uHB$Ll}nCd6rVCF76P}c8y)K7=)O&awb;@dTD;7M|0&_uM>VH+ zK0XksZb%6;pa!{t+q=|7Uzq4)c_3OI3$Kov(L38GbHN^CZ#5Qi9t|icu0xp@nEsLC z`8LFRrXx+fMtm~Z_Up}I#V43x{+G_8JqjX}`q;KK?=#VQdDc2-Puzl72PVT(8rIzSeR#~sOr1B=#L^vLig*}ao`~+^lrbcKM)C=#BmxcG3*^5Og`TK2`qQ9bRxO zH{j1?d?1WLL|^Sl0I7~_h6K8 z)5BOF)L-@t|K_B@BdTY;cfkR(7Eehp+0&jp%pXp-ICRC+!cWquRCn^Mzw4EI`lU); z43S!^m$XYMt)3?+T=}4$1C|RrKDy$7&!u4#b9@x!|J&+h03?bZNNhU@+3Gadd8kD0 zLP<;kIXg4^g%#$v#}g@alj)?BtEhOX&(dRS1^IoT`{*Epj{GKexd^Qs$BGg?wbSy# zl{0naI?QbSqr7q057hZuov0k7-+XP1Z4&=Uij;!XGPN7(*M+$VtkE7ds@A(k_^v9=pHI=g#x0dc0z$S~>6Z1@Wl0I4HC{FEwcrFXR zNfkAJaGhI5u)UDSn0?*Cv;hcE?l>Ew)NgC?FvU>{VG4F2v%Vq=(@N?OMT5v`#{eQ{ z2;JFG8-k9MM1i@pgRojfnz4sQ9eG8UlOH6)cDb|bmd&2YQrllo!Afg&rzwRBg3Oxp zU+2GOJ_#zCaqd0}>XO^)8oHPsc_yK3sK6DHTc%r_WE`mN-hGTxL9e-cJwsK(#;}7; zK3rnZ&}A^#dbj$nRlW~LK)N{FqH^t3VwN5_UCOlT>U}Z6?xO@$saL*aLl$zbH%~7d zAxrRgB1fk4#Hh5BRtj!kDM7yWefv-i6Mw`j_-_hX0ELhPg>__w@-=LSkw+K~vJDFT zXnf=Ls1)ibEwc=J<3LnVXRuP4>r2dD89r?yJ}GJISXmzRE%WLGrMubMH<+d9h;%Z|I6o=7A36xUva2;(-us z)csus8zAG@fsES+G7S2e&gFT*`0+K+mP2N;>$gYGsUfA9Wk@fClZ!enF3Td?qVUCC zv40>Rvnv#Qz$6A!>h%@%kMv}O?`;>4^_j%q79qB+ohmd}1EVgk_CKyD%q|f*L@1f& zti)81a0qqx^!G*~dfYpUN&1xqfyO0fv&48*uJ0iX5 z>B?Hz`uz7Tn-j2?>%iW?@AjHk=+9{r`0+^vktfo2FpHXm=*TEg6*>o>Y$TGfUwN5V zVMRcV@faqcQENF`JH46?p}p-}bTg8&e8}XydjURI;Pp0$$FD%Yh~p22oY;n`SGV*W z6ic>K*n1Mx^^ijrrs5sZvf?(>qJ0q6NT%O2)X|^Dr2XUMB^4Ys`vI_2@p9J7SnnAe*&0?xOyum=O`LMEvB>z_v9&pq!hPpAFUO_IU#8n&TLob$ANy0m`)-Zf()XI9 z*+k45T^~-jL@;vGfPSS?@~nOLay8jdtr}Y>qlc}m7;p+i(O#egyj;yEiDu^0C#cjq zG$GBwy*}ntJTNHbA;{`{ZF?#gqyGg(>Y(N(q z4$}$V$HPjmb&Be!KatekINBnnBW+n8urY3!FjQgMrQa6kCuV$~SU}oU@W)ve@7wo+ zf@I3g^FW%n&Sd$P8fS1bdI>Thq}5{BMJ?OrAI3ufqII2-8VUPQ$qy2mhd>;N}T>xEI~nP9Y#A~v=8n7N&MaZURCVeIAB=WVJF z7GKrx4^(c%psU{AyEqp#v^lh7f;HXP{IKFZ|E3tTfh3yCR02oQVH!S*Rmbjh8mp-E ziWNv_K2$T{ES(`gIv%X)qWh@N_P1St8Bq2;S+@RAMm~nB<8XtbI#9=0vC`$xDs@Ii zefqxY;?7`j4w%!ZI6^tZ>9~3~9dmzY1~iZLqfgzZE*>z)7x;Qzc`1gnbCh=n1C7el z>fbwUU^{PMOP2^mD=tm3maFAMWf5Ez95xo7Z&0J9m(C$=U%V5%v?+AE%AM$@guj1R zQ$+WJsuFD2tEqB7BI;!JGVVetrJG`Vg^$bId=MsE9Y{Sr71Au0FS87%HABuvZ(m9mW7z!#Y)goA30wL!Qf)RjI-|j)y0}lM-IF1n6>6( zD7%>LWVhziJ2UwHXokS3V!Lh&XQ3@I%b=I}y)<+m2Pn$>#m-P$!q?ZzVc4??Jh=su zgy=G5CWS3cRAoOcX3mc27N2Tf{3XSgcQ++^tp3#Cs&&r;0hW6{dSSDo54<$3_KR9e z-G{xE@9xL6qO<)frphTV1r2AJ6r6jYLVr`@8p6p5d$P0p3_10`rji>Vg4yq1iagAx zDhOu%wW{cU9#DP>q)YZ^2rD}x5V6l5i8V&22mk`lVu!08H2F>(Kce2(oR0|+Vz=&& zNybPd!gsrPP<@?Uw@KX-_SfL?H#4RC_1N*uBKpo}7>_JaaJnXiMB9Vgvjhpv$Mmqh zqG^s|y<%q6d3Xj{#*@{jq#}qT5gsos$>qbb2Y0O!??36@phYf@KIN-dpR|&bFl)Bj z=R(K(Eg3bRqaM$xymA+n?-j`|cui(jyNB|EbFP~K5RnCPz7h0Bjtlo0xD_RS7x?R- z`TC~^>F9aF?c&qJBc9#+a}}kTaw7uFrs!5woZqQE5CEQN13Z{oHR@z7${I?O2v_0> zQzZ)&j;w8?3paY1Pdr0!63XF1&v}|fGKG5GB{7;N?!9jM5G1t><(8Bhmx?Z{1YNWx zVmzqLb8a>>bDlz$3DvutD>L0q^t4L6^`K*8F8vFzi|?}S9+i_cZ8E1C+|pcMG;G?x z_3lrxK4J6Rr2P#KaX$zqM^uKzZ_KZ(C5A)XhEvJMp)(PBe(=KRGPEW1mlJ6KCw{LQ z4i3}b3uG4ky6JY4R$aj~c(X~kc|!zP2GJ6VyQs_*5CG0;Y0mFTWkNbyV|+$f0FC_o zs!1l{sq(~hx);7q(9_c4n=gcx4YG3-^d8N}O5f}&NWV#Z8_G#wFQcDRVhZ|t0#~Wf zW2-dkdZ~|M-#xUw%l?jvnR9ry(bG4MRu4fl9g%Jemo9|ZuP{qIeR#sMGNhW}IL_bO zyx2co^7y>0mkAcx@+IfYvWs;Q6^380>+!5kp$wBMP&L@Qg&zZ|hV7u$)+n0ax2j*I z?r*N-Ajz1)X0Wsu&CsG6hr(LpkLvVa>aQMXgd{NZvQAf*V7Sim1EsFd(Z*o7!{#ws zhv^to;VZXz+kIz?jS=A;7E=qs@;={n(Yp z1${h0KnN=&%emuL(n^ij0dwb3-}vk)5}X?=58AOL45`z zxlzqgd;P1NyE}e>iWwp1!`fRiGoD%i zsCaQcOQVaMMkby$Pn7JvkP3Fdd&~W_>O}kQGy!MZ6nc>>K{0K|Yp~06@iy2tB%R4}-v8pkn41sE`%; z3sf*W|81ZmFqF4K{U@lvq}43XRkt0b20(>lnvTu!^8xQA?CCVA0Z<_Y8N#og2xTQp z6w;WHN|PswDgdBDMja8p`Pt46Qo*ip`8|OE*JLbIJjz1^?}!Vwjv(x2j`UP40TI{sk(a9-=eV z?<3CD1NA$OF(u7dFVOD~Sb}|fD#^lQ6mN8+J{WH2jvr3q>%L7Y%CVzo(*_D#Wr@aN ziaEVQS%Js~XF8aHFz6I_dj(2VEl?j@BtYl6pl4u4FFBCJh0DN7Hx^B>2TX_7p`r`_ z0aRQF`L98R>%dfdLK$tq9@w`;Bb<(_;{nfaJLInoP(uRRl$vi!dP^oE}4Xymo0Yd^ZyQ0dAO;Dk4H*Md)j3%tY<}>54xj z(kmMsh=@2Uiz|;TWB|8|0;GaZFZ`3Ztk0xLj?Nv1k`%f5bS&<9-k#v*RAL=!xZr=1 zilqZmLHhei1kj&;wXQthXr0M zG#Ji?t)b{Q#iq(<+~M8AGXoB_nh2C<5b0&l4j`RA)Zj*Uipe`29yd6te@ZbMN$g|g zGR-+05HK(nYvd1 zsUXpLB+*?S2u1T!_gX~OI>t&v_mvRgr5BaeDlIU&oW&)tV65_AjArY~dmwBfW4t?& zAH?&ugisPlKUhV~W)eSNIez9&nOZ8E6Us&4j25pMw`OHCGtYnggH%WkvNt~2EHaC+ zp4r@8NOHRnat^8ysk2eo_XI6;T&Zdu`s%*C|7se8?0c;{BF6VTwh_)+acXj9g7a)2 z=fh|@Bs~Iy{C+!q|1+w9XBX>!M-{dyhD>|g#>vjcMF6TePEo1~pbC%~fGXfA4-;WT z^jJ;bp=9P>iDwK^$!gtcT0ufD5%&O8!Ow7VvHiWXwgKqb`c_xNiS$Uzgfhp=wgqWr zx=hy$=T+Rbp_E*N=5Ef6R)mdV3M(v1!uVgIirxPeRFPyY4$Wr%jwm@Scn+h~H7gKrk6qEd0Mw#nLtSjB4Y* zMioKiG%w%RkwlvkH3|VxMH!>v9%lXMY*<+o=!AL>Ub>qqVgI<#0jeN$V9=Bj4FhFM-^%O`dG>24#AidSI%49vDqHDl~T3Vz?HSfn<#Q zy&U@mD^d>3NlIl6SabxYFA4J4Py#T=g&$iS1zOR~#P^?Iv}B^~!wmu}_%P_&JS%6l zBj(7_{T1M80RSrsNQe6SU!MbDg&uF_STz7EY_Iq8`ZYMxloA10k%`6iS8%i}E^c3` zG{}f;!WMOHX&Bq2 zY}9V)AYhQPNL1KB+qY;~kL-RQth53^60sAA>DZ>WOw_o9j{Ui4|Q z2KCzmxaB$TVVocksa7gvR3V1qgMk;*g{rPZwhC-4;c^oL>?8NDFWKusU=)|uO}wA-L5 z*y81xZuzpd&WtK&*2BJapD?CRIaOm;>s%7lDTM%3p*@q4rxijpmi3x9_>&F;MO!XT zah9v0A-YH|!X0Z1&sNn(1(#lP*}ll*{iEj2Sfcp7%BAuR$jHOvF4DP-8wDnfq)HM8 z&jZ)i;=pu<5&~zrex7p(yPz9;srD_&@{TjEYz`gRW64o_x;qzN0G#ZWO|JBBIQL(| z3hx`38lho!TRQ4bV46_N!Wb~iit2lS!8ny1wxqz~^1CQBB<&@@gfIYB9Ls?Q7Doc5 z?$Q}cj1T?Gd}?cYKMu|Q1fJm;;fkka$~qG}M*&!&kKwi@#%d>< z7hfR53ZwWRu%h_LPgr5{9adET2e6{3`!(f%1uHbqOrvOqg(CKaSkb#9+mheOZUq6qEG-0JMemTKwWtpjV-Rj8NVp11gY3< z(0hVMZc{ZgPau%ahkwBe=?5K4-(dw&C7fL0R$)&Oj|IKKO@(NGRphcrz0}*eANYVt zG3n#0v`pG3j+XY$2e9Jse+Mgs`O#lct?0{(_-+BIqs0KM5Zf|p%~w96odV_*r~+UG zlmdVi@P29lR#b+n^{FPN%I`wmJA7xMLek+oyFxVv(K!lMALnD)68j2-w1`vyte`KW z=RU)fJv|j)sZeXHq~&$VfO6ji+g@RJM+NE}e%#_Lq|{TLpJ8Q@MfOFGRXPg WU`5X_SYZ_N7p&M-`~QFyr~ePb{yvES literal 0 HcmV?d00001 diff --git a/client/images/spin/64x64/Preloader_5.gif b/client/images/spin/64x64/Preloader_5.gif new file mode 100644 index 0000000000000000000000000000000000000000..6f0585d3f5e8d44fc4c3dd75d37a13d16229de6f GIT binary patch literal 41405 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�R$Z$i67r_^}5_D`4BgNg?K& z2lxVw*suNB2G@Hk!0~j9W!LXi3-QNU&=#r@RC`h!B14+-I_g}DA>DWUwRp>&5Cwy1 zd&VH_DsQ~wE~9|1(^cylIl$*3&hUmFh-A02uxHA=hGnq@bCK1OolzBSC(9u#*i7z` z5|?m-fCD_inIk+1sC0>&9-A=R&e6j;Jo?idtr3A(js1*)6_G)U04AX%sb&`jGZKyh zrc-c&^Cf~T0kDIhFC*?qd~Z4=a5sj0jkj^Pi;qj=^BKl5lWx4Clm_i#L#PSy;*iwh z1`fgY)U5}^Q7;OHb^;Og_IQsWerYL zcm12#Ar;8Qzlc34)s<3Q$0!xcw9l!{o~h;=MDt==GZZEDt8lPua=K{4(0o5H^%@t= z%h!S|Mhr!|P=)7S{W!DmT9Tjp+4*)}N!YOpjNg|G-mdMfYR#~3*mv^oBM0O-=W#Q|Ti!|Iv$#`%wUPI9&|Uh`-3DwjD&ANg7T&6{&_ zy=F91{3vW&cHg-?`msj}wl9l_N%UMYcH=kS0wDrpO0u;t7`vIYFpe<1P>RmCZZZfX6od)JLOHw`-AGMwQT4iK3uO+e+o<5+ zBqNG0+y~;UV0q0}ODLT}CloxVr)G)()V2Vw^61z05ddcwy#2#_rp#fRa|wLWI>rj~ zxPWb(6JWT-aIhlQ+(hX1?ea)#YA1c|`0QHyW|KB=V}#!ZhT>&oCD?kL0NoaD3q6 zP}Qg9BRw1DchT2e!Np-pw0vY-gQq5TmV~Eo3xnsf9GezS5o9K#NoHiQ5<5VQhz5vX z!$r`DZ7tOwq{jy??NdCUY8klC?=FK*j(v-vtLF3A)kbi^Li89}=mc4T0ve?d2I$iu z{~>L?olF@w6IlXWW>20Tq-k@~?l&9ezsf~g%uc7|(?-Xf69ECIW_ULA!fiY=?xjC?>maw{6e=cG2pl=YyxuYlliS8|N>W#` zS@J>ugv{+flkO$Yf|!f+>y3%9HG(6nEm(qrHfvYre$lM*vFl?{d=;(4PlU73(K23~xs z#3t?B#s+OKhA|V@K4n)cJ4oL7HaKIluRtH)ZU2B#3hPhPTe0#1->f^;(@}uwu>4(d z)@a)8B9InP2T#Biuc2?s;^V5)^~+tDdmV6#1W9b;_NFA$L$ z6(d~JaW>u;EYP!-eT00S=;cm6D`YEP)k5HbNS>6_HOsK8ANAj<_~-k1GKVogJz^piN&!n8?6Q*78|`y*_2b!U7)R) z*gPCK8uKOI0A8q^BhjG7KvdM`Ij_s)*kswv8A_C%bF|j#X#80Jv_##~8RX~q=wjfv zwm?nXv-1^L$)MwzAipm^_?EwIs{EOi;32$b&-|W!3!Ldo$}JgksMM>^{jl_4>+aLD zQ_!~$6mwtiJez%El*}k`l9Tz4y_|2yH4FQva*0azLya@n$aIVDWvIkJN&Y)eXyTqV zb6u=Z(Y?*3gS8sClLdR(>X{L(PeV&xv~KvDu7@thk=Mgcje}{n_WAYDFF4|{R$}=x z(+{h2>h#~7=a_yf=iPGA?4b1Zgwy@_az2`-iqMKlA?Of3>Zq9Xl)Y7g2daPW(cDP7 zwGab5y-0^Vq)$2?e^G8b21%x;2*%SAYRGlEY*jSSEjPyFI!E*5Ek%7I;Z~Foblr{t zuS(TQ`LM3K!1X-tf(z03fgaRP(Zu^)_Spws@iNRw98RHD@-@lV+T0So@;^GEiRwma z5bykhR>2uj?g*o^%n{GQ!?%pi6*n3q$V z>B2@{O}0C7*GPVZBvMP9r^CF~P1kJ=5^}%oJ)kYaUE8fwb1r>wiPz(7>q}+gbgM-C zR;yg^74F4OCLh1ogJp^OG$PB-)V%YL7Jm8}VY|(VePz{O_+Bd@?BErR$m7+yt*fJ* z0EXsDNec`Sz4r1!PsvSd=+UImg z2VHD;^Rau1o!~+TEee;J+yXt&T*Hzcz)`UrM3MY1Pmp0lz!PL-_ICpx|1U%~_v9vt zmze1itlIyaf_BF`73b^Xbv@(LY093kpf*;!HAT$&mqK^k@p^C6e($b9jz}UL#ZGeY z5Xv4bKGZf`l1uC!E;P(?A0!7lGO}<)0`d?TSOvzY#hZV;@g9e-zle#F&uRi|gO7iP z#hbs0%=eQKm5wra<=wFS;KRc^Z2zaUYyW40Vf$>u<}hQ%hBVBfavr8q+cYzbL^-?7 zF^3dF>UP>ptXk%f97B$EBPx=l5jAQhXW@1zI_$o)gmgdTndg1q&-487exB!t=YRNq zuFv=S9@7Gug`z{N@L7c@5mRIXS7<&c8oCc}?oz+oLnR@kPpKVdijL9tR1Cz=`fA$l zu{WU%TkcC(djXO#(W=7FG$u+wwI+0{LM#Ag^aEc$jZ@ivEpr6%lcpQ0c~NuRXVPX% z&)yrKF`(T{2^aPRUluThr720K{e1X#l43Wja;;tTR2bY#!v0nEJQ!~bUWFJ$e@5)i zL$zaJMw_7GG32kY_nr~hJTxXw!fe0XS&`)TG{N?dPb5eQ1Y@7u=*6oxM<9cB6L%!P zmhb_boC$ej-I!P&C$yEeox|vzn%!LMl^8eNERj`q!2)+pCsh^lQthiC06}=^kQ&lD zrq4L4S&a9>!&7uY4&UI`IDl{bCJBX7)1HFx)Ry_4{{U&SCTT8kxK6A{BJ>}#S*s5g z96X%{Vyl{wvtmbX2N6qiR77I+aTEiBkFbr67UG7>`6c_T^T8{DqGEqJkHQFTTH;sP zJzw=1_|s!Y@^jx*$|5rqDEBnj_u_8B&$(Z4u%PJL0HEYnt;LE45&J0Cy@HsafOm-X zU)l>}QIhiRzgMeWu5*SyK7VaJULXoNm9sZs-IqKK$NN%hGGba?dAawm<#_i@U-x0* z_D&KU;NFG?Lzn5EUqil<8DkMu++Rd`NH(in5h2c=T3Vbr?S*7{yX>l7h{(`fE}4h? zxdZ9fe_hzw7-eg>VXeDvonAiu@R0p}q4?qoPO5TQ0PQB2ZO&=?Sk1x96L~l`3|nV?R#3-U;!6)6aq@v(2rV>9Xk!`VgjZd#MHOs!fM> z23QY@tmZ^)C;~9O^95+PG=Y-xb5$(Hz;t?#!C28l(+*)X2wiMy^g40)P*3 zcLx=3%VCaS7e^~GxIl;!z^UOomL(Ccg&VRmDLk5F z(Cz(8`(ZFsHQ>q#6--&E#HrL_(6dS3Q`0oTv76CYe@PUF(H(zQE+35HaWaRKrW1v| zu|Jw_JIn9s95;+bwSViC=z8hhOq3VqkpP!z>+GyQ61g@oa5L^}(|eu^(Kw{@jVhgt==bBH$1t}M1)@%@Or(~&Q} z_se)3SA)EVMa~bZ+cVGz)3P8U?xM4F!T#!w>)F zq+M*h>rjoJ5v=aO@};q)Nr@t}mSgC%t)t}b8OwB0*+TX%or!CA67QW#8Gia`PKETU zwJqy+i>Kxw3AL#0eWhi(Qol?;igm*#(9BmBx4Io>$7V9%;-7RL6VpZ;^@-e5~~|v4#CLnPkutBKkR&=z!8SND0bdNF=Y6 z+&Yiy?5I3QrdmXRZb{UMT}Ir;<)CUL>jId6SS!$MCkXFQAzI`@RP|nn=H$t(U4>pj zcw)1x`NJihs?@l!P{C0~a#-Qj=@2f|r0a^~3Gf24#+~yfM94PJdSyEZpc5G2B#Pp5 zzWD{@v9d0pMGsm2-Q+4J=1V=DtJJS)tpIu>%mbP2_x+@LFwUf+U!u#~R{>RHqCkfn z%^$pYkRYPia3<*MGtl#5>NQ{h^J|YXymOu_zuoS5;@_=?JATa1qCF@6&lRV9b(2CZ zgu&>2Svhi^OPl|UPxtoq+LW39w2Izw5>51mcL2SVDFU?Gd~QDAO;#}_vQ`A>J&zQ@ z)nb0AEW4a4`+H*%1FgH!^{#cwN($YjFB`%t;}<`_cYsNK>XlXsL^S%P9vh3@vg8ji z+ugnr;PK;4VvqgG>WjqgE0jlNEI%VoUwd^2hkrC$ghKr(I}kZatK~^5&c6z4q&qh} z@9verU8*4a1h07$kZqLw7RI+z)udB*;xmDZ-AbOR+J0J{0-TLN)?uL1T2Q#;i=`fM z5yIbpwwDjuJ~QCNK23+^c7w8ycPBP|X_vt~%}yRVv0O6b_3oR$Nc9*sw@LB6CS(w( zXhpQs2<)R0G^Veu0zYLnaa_Xn4W~4@&{HIC9L12BXV!D(0`Rh%M=tJ%|ApnTWUU6p z4Gi0&7yc2mzFaUJMiRe5Equz-UvP2Y$n@A$n;RDr-!bA1KE1$`sEK8nv(*z|ISfPZ zMuxNX*Vljrs#Q^@$Pnkq3MRi7W$qZ_Qt<}7m#mwRRhER>-s@sHM5?I^W4$q2>);vW zcX=aT%ku%2&MHm><2Y6^OBtZGo7gU-g`YG&@R0-wP!PqZ4ctFy&}V&H!ik!s`{Noty(3+-y6MGHb97*O*$pM2ln4W#v_`1uT_ zOZqw&IRW$_)l`$9zyTp2ffyWnVW5#TO{c=>xQ<|J4`r~VQM1Xf$x7dSCcS=WHXq4dBWq^(yP`O{E*Hd<`^M7j zAKsh6RniqS926ndRen3LV1+3 z5X@&yTZ{Z0g_ni2Uv~p;_S5-;iL;qd>FQUh@Q5|dE216%y;xw#L*pW?^`5H3-FdV! z;Jle9L&N){2Qjw+T)~pP5G{UurG~q3#>gzJ&tFmpJ9DAOKvl91WC-iNIB?`IJHHM`)@J)zny(gArYiXip^U2=K-B#^FSHfO_r#cDmpu)G1mE!x3arl2@_Oc zZGUgpSltlunXv~O$}it?u;PWgOlRFNqyLO^rPp(*=A8B8(yOfeQoAflnZuf1`W}Pq zk+%b_kxu7msL&w?%UfP|JXFY0g7qlAo=o2x!^rEQZcMSOU)Clc)aF%6ormgrZJZSK z0hGt1k`zx8`*Lkvn|}Nj5ZY66v`IZ|9{X-kZyY8Y?v0Je(~vwIc4%d-pS`U$m=L9w z&V6`4ssw}KL`BbgfR-i>eX~H*;pb%T=yT408y_t?x-8}QC|Yme@znK{pRW@IpZd4O z@y4Zzr@!7w-Yzlpv-*gI>k(te)1_ z!_(#c6Zq=t>HNHI`S7Z@*YU{kVOPiF;(^N9?=ppb2dym&)|UPq^FCkZUNldiZ*8qY z->gW5kZd|ow(5_)3pmQF!w7u-+ za=yLw{TN<6wb8V^Enn2<(l~X#v94P&yqTT(EjYlSa(KVFaccW$yQtt|cW0-(^kvHo ze0|-tdQ`5cuWV*x(aw7H;1qdzd9k4M&! z)ANg+oz1L_f{8W6;o;^n+^T+jZ1WItdaCfD|5eLO>hS7<6~v@^^sArGUR~|W=II5S zr}O5<@NeH57Pqp;zO}9FY=0<>=v_LQn%rxso83J=9va*}fj_Alfv>N1eBC`B9@?#~ z{xG$^Q&}DifLWNIJH9q=X%^PAcsf1Zx4yp~8x_;Pj66R-f?p&KuAHqb9}V=6d_O=O z9PFQ+ue@@feWK^pHhZ?XxDWg644XO`A6q{<`@Fb4zIEu^K36okUNXJ0^xU~>?)y=1 z&*|*UZf(uN-pO8l9pdOHymv9GZ|Qh!RI6-g9%A}ECDE;EI@sU$LEN))m_WFv2P(kClljKF3*-+oeC${)k+4pPT&m-Tb~xUrgx4) zx)wsa7vl$38ke>YI=+l-9`2Nt)GurqRF3SNobR7q9KbK^KTUYH&3=9Boiem~)Yn@& zv$0oKvuJNqJHL4{JvF1PE}qwOd3i~DN$^NoLtPTABF)3Wg>eN94GlP?qpSjwGI22h zev62?JDQl;KwLnk5KAk2QM#Ra7#+yUT$E0mUztnUQ4;dhO75i-ME&I>4YQXvWI^9bBEvAi#2Z)TJDSC7mE9E)Gr_4i2`zP*i#9 z;Nsx?)WH!XsV)FwRyHxSvPT_Y`EiD_var0pvx|wn8AM)6ln&T~!^+BBm=`P{At@=z zBP1v#!_6%XycH6Vl9J+*5#STx=auI9b*_|ynX4Vd-sRW1=6}xR{nv9*WUzAtt}F#{ zvU(0NmvM5i1O0etVXJ??7p{NZ@8`MZ|9&sr|9UPba5J2!kM^&R`qv?VKd6_#i3_~> zO?`+xz;`Er*jFx*h>LUh+3Csg(c!`V-tNx!*5>z(^|fzbS67yo7J)#Xotd7RoERS) z9T^@P9O&=s?dk67>}dbe*4onC)Cl|hsiD5Ewx+tOvZB1Kw50gshoZuQ{Jh+p?5xa; z^t9CXDalER3Gs2UG0{??Qru0t5X0-un7@L%lpb-n@SG@`bzGb5|E5)>cm~EglT#wKO%<)l^j;KT=jwRFIdGm64W`lmLs1Jrosr zAS@(!Ux1&Fmxr5+lY^b@9xDqo(_KaedOBLro!hr)Zc7UcumL}Sg^Hu0;a;L$;?c;Jq&4~AlCv6gl%%)#lh7+9%avxd z1yk}`&vcY#wugZvgJ|T-vO1%f)e8(d%d)%UxXijLaJywF$Pn;|JX4IZ9#5RIRT_l~ zqbdyUh!p0oig`S9PCLGoseTznbB%ln%@@X2V>wLWIoIH>)>YoD?p)N|-lSJ4XiQ>y zH`EtG+>rYlZ|<9Aj?}7uK&nHvix=G-d9|*HR0fIP_M<;vPA6qD%VEIeiL{N6_|mP8 z6}nL5)@nJRBpuafBb*5t5#qg^ZkQ@JoshhB>C=$t^aWOfMSl04PNu;OVgp%!FM(6G zEU%wTslIA!I@D0r-!PEka4e?r8~(k|8~opg<;c)8fn*jv^eRCDGT(Z+u zLP*!B^Rj7}n97c~-F`c|QQUQ8Dfvun%3=!xIj03-?Cg^cY6N-?+tFi#9;$U@xuQ_9 z?f~U5QosAu4qOypO?>#$ZL={eErHC1+TD5-D$0!$BRBF?F3HJxJEViBwr7=8+CmiX zjj8kmgAo3Qhl3!Aw}iKxFqkMw{t1`!zj%c##7G;wN=oO!hpr-}|nn;@ACFXTmnc%ELxE ziV7&dH-7MgAs-0qvVe1*W|B4JyXS&a#ov}`fz?16$Pmcb=qb$$jZU8PRxJSb*qQq2!FBfh#lec$`Iv9i{v)5R< zB6C%hWGWEa>Wjy~y-CAhRhEO}b8qO~ZhQH+0GE5X8Ts-R^X<@kw~q{_4pav`*?6w= zzX-}`bWtjYD>9W#X=IFIPEF>!uHz-SY=aQK$;znYr+VBL3GdLvBoiTaa%afuj zuNYc;7aN6oUEnmJEECf3Bc@fT*l4J84Zm{b4>Je> z6qtahLBqX3A;C=27Ea5I`$KWWuP1Dztc~wTeNtkh!C#>u?vJ_W-n{38i%-@T#Y79W z)>%p>^aK<~P}|gmgOu6%m^{M91j@_p^F>763&fl(>>Q*cRD!9JuF^kp(cWyXmJ-f` zFM?B92y;f~HT;xlwX9ey0SPI(FJL7KT^x8$l=FAow+=F7WYJM0GW{lE~$R%=XE#kwG`I89`oOyD9d>lAti#n!<4mYH-ts!u{H= zn)f3DMMn2>_Q$D@Kam;g>=!7+a-{bq*O6pM1zqR17Ma~M>xdY>q>_sNRNv_JzX4(X z0m$huYItkJ<8qry0YZ#JkBVxTDv>x~PVfJGrCNVRjiao2PlNWHl zZr8P@NL$s9ts7Ct>KUX=S`G243o>)JC1va$A&i^f65XLD#Qg&X5fCTLKjP&0Cm3L# z{b=S0w~};8f8G$nUD?5TGh;``pj8NV$)4-%dQoz$h7PfIX6Al8l}7e2<8Vyz>jhpsqUn7MMv!22~O6CKsuiF z2WX|sU`pUVpzv-Cw1g0ooI>q}u3oORQFN(54YTl(ERzq^JH=q0uGqJg1hW?F0?!vm zrzsg)DkEl*KKd^{YL`53$LG_ZG}42rUFsqHD|xgtpU08ePElHelht1#38~}Onxa^= zt6q0bTlK!{cwjNBKvwHKMh1Se32%7W{FWF4{SOqxza?Y$7cZc@Go_IrXv_n59C`(| zyp>o2PfFgpnr!ooc5ew8bDD%_zTtrnOxvco_sBZqs5q$zBOX73B_UQ;2uxIPds2~) zh?R2CatA%|BS|&r$kw_^Z(Y7+emRnd{vO>y2=PME_;Z2g0iLhhv+s&GNbJ1%S!L56 zl#9)7>FCEW-mBr#ZOeGYHztPXZlo~LeIwVX5h|+?uYZ~|+e)vCQ17nZf>noe*PWkK zmP~k>^Jc~OcsSF%nIm>AK*9uV=~W_xA@`0E{6 z1J?A?th+oQbq|Kjd~-=~&p`iuP73yT6VUTfn6B#oEpHVUr#7%~XWMu>wEik65 zAPjj}CGtl-=o0Z8mbnXhNGUIgBwmiP;-y}?yT9#{O!F#(VBr#$Xgx)PQZGCi1#wx- zMyp{858I4RiqUz#Wu;LP%r|Kb)MV|MuDLVs=|QjVqFklBH+7dtE2l6Y4pG_yN0hNvEf z2$n9jZT6B|p#L2vSAVA+`@gxdXDkjyr=M%`Cn2gjb;=He1tSv;&W7j!Zp644(*&x@ zW{2G|3pWVl##RVm)$MYzB8g)p0kJI#>&WLk_GH2#ZXPJkQzi7lts*&#$_@>^#1`dN zsGN_=LWl7kok@cR3pBV18_G1l#(35=de2hzn@+|kFX^i3j}D1ZIzXDyz;Ubro+|rg zzRlGRgD@yolrPV?qgcH=MVN2I7`J|PBv7F%Xcvi>MIut(32UObA?ZdTc#TahTM0{y z{V93wqxX?MpBX3**n4NOUfo9!(U{xj)&(nO1qdz6CHJBhV{mWJV!0<~t!BEC3 zRUT8{p(-*|h{XHN;Q}ENnigk~A?tlVn!i(y$BZ0u|KXzx^}MX^khjP@5%tNOehbnIKQsyq zeqt2LOe(RilM~@>uc+uU?Om;V<04b)V*|b=zL-+gDO@|Mf4f;6GR|%gRs}(&;SIem@|JI*|?a%X2m^@3lPUzJQ zb3B8bU2odVIg$K>nx>$q^7cg=2Bs+Kl=){){F2TlPnVaD@!|CCn8c!MG|6($K*Ttf z7pN2?1cQb`l9){;AhYw`Tl|2c_?)KBI3#tJ?u!yH#dyw}d3?A5RJ`Ii&!SuL%1Jt) zBW#EIQ~l_b-oyc9u3TI=x4I6y~kF%Mb|N%RDz>0 z(yASxkJ1PL=WT!_AiA4QAfYg?1i)A)%tPw~<2LMUog}6^P+&Afw7^Qe&XSe8b?K)) zwdSo?H)5Q0vh3r8-|8h=H@z40A!fIYz6(xz>k8+Xi2T^Ih%N7-94NvpQ*tLsU8$yI zu_XZKZ|VHQi{II&=TwKZq=X+~VolPj zLex!~BLuMv$BHJ>kn}fVnQJ`@``#Nea_Q+O4@$7bB=KXZFu0k}QMH_~Y4AXeB54f- zzc02jb*|aX9CDgR$t|emocC|9z8gfwuqSJQru(Vqk@c)`h1w-??R1)5Bl%NMH8E}W zi37`l^uTvR3{QDW`xdeE=VAh9K%FHlNjPoH$C)lccsB%IQvz!6$4dU-aqvqnJfC2S zDlD|fddqq@ps0~{1CIxVhpHcDAcZ78rVol50gVAgl$%-I@0zr3V;+>{h{fO>ttG5w zXDP=8h~v|cG0VX`!01FQ%!`)Fco@a(!hl?4*j(ooc4d)V3eVTf=g@;c9vDmXMq=UL z6bNsWwKRGNw~S^V1)-C-x+aK+&6YfPvnjgXvSU;L#Ys8@pKuK|1PR?$`985FRujSB zhk&~kiI*oJvJp%%Tcbq@^~4N%_gN;P%Jh=_c~QCjpTH2ZEFsF=Z7BQlmkY!2tl{X^ zt4~H=4rLCkV3Tv$o^mZU{grC{!Qr>1dSb&d1(*8gBhcOuqHtJ9mLlS{K8$<%s4WcR zmdJ$M&^!hX=$;dE=g=MhXq;OWwt@S`(ahxELXvg&q3ux45fM__rNG1+Sls*O2~QV@ z-ykv+Myt)zpxL~PpS@Ts3m;}(!j0`FzojOAe0rWwN@>j2jduAyYYQ#~lB{M3lOpBT zF2GH8*WKQ_d9(v-WLzfO);^gxY$XbdH*7dI((fQzwBI_{Ow;K>b|GIS#ujJ}AQ|up zg)7zuv*MGe8xowEo}_Z&brBlyo;1eT8^Jl4oz^=SaX9-n1Cjxmh@dUt_}fzdfUxzO z4DF`o5lj84(QMqIKZ1h{9|eLeSRMdj`E*ilC^c0Obng*M=g@p~G|n;r0$EO51g|1| zPjENf%K;PjHMwIR=u0vi3t{v~I#8P3VjvRnbIECyR8F9&SWok*6(F;ZO3ca&-dxLb#@{#hRW(0~_?*|^kyCl>9E#Sa?Lh@cSgw?xsvUlc_HACo^c@UQ%D zGzhd@AQl2>5L0fp5b}!#H2;+brTXHQ_o+ z6MVgYXhPZ_P4M0Sp$SF}@p5@THDSqI73L9~OvsYAYN^bQQH&4-G$HJ7O+f0vuTG35 zHX?=aZjJ>u3RoIdouM>A8Xc$ARcPVuKWhT<|Gg$4e}@BmRa*B@zWQ|+eZ3#ri2v## zN*f3LMJWKU*c=Q2w6XVPK#@*oKj0M?8hS5E`~j~(X4wC6FR%Gi&_WFf3Bp0&0`6Emog!KjU1x%25w$D{1rk ze5b(Rbcf93PgsL#{H>ae^vp7s5Ip^;ouv#FSK)C4CUf;f!IT1F( z0{HQ+NvqG_CHfzQ*!u|y82S~{%4%397~~A3RSa^uGdF>>%Jj8*XkTj>#!k<$9M5vY z0}zunk7`-A7Y%4?M#m~xv7axujTZ~&~!E5Gw8n&TVq$mA~U*QE{7ms-r*=tZ~ z6*RDmL5`QJZx&0t`7Pc|n%qaG;LD1M%FO-1AFjy_`X|%;)fxpu?;F2X%~~S}xrs_H z1v6zR0Tlf5xy^v&QYxpWLyjjim__R0BaQSzAi1p5$P~39QxnCVk3T3 zD?c)S&6`;!Vy(U6PM|6?ZXc!YVRmrnrHYbGSLJ*~9=eSNqn_kK-bX`O+6KX6Nc>H< z*bF-bI_8inDU+F`>7zLqr@Mp4WJ}!l_ntxMFb%01u3>-}aT*ol&%|I}j8PY4OjPht#b~xW>qm9N!-As>kS(15`SuBC2{T_$flcmk1YpsW-Lur zt=oOU%N3V%h0wj!^t3(8LGi8^2GcEr2`>4&ZWJfO-Q#<57GpS zS+d2ND=cR4n~i10H<(`Fl5{L*1%v6BAYY_-oIr`>02rdsoHUYjiMN!R3Yu2xP*y>S zcax2#H?lPI-|wC|bZVt5{*+N8O9&Dk=WjPEf=<=;u5<0qm3j?4T#>T-tE4cm7<{B` z&2D>(EBQ&w`Qu`z`p9Uk-|(F`#kAhSaJL%X zTu&`3XkGX|^?Tdv3}4=$JFqFyk3$4T8UzngQdb_|fMyX=R{Tg)~GJ8+FhxH)M;P z7#a3Zy}F?9KHY>>q#-IlCGvBOLyf?}6!9ZR!%$UjZN>od?MJDGc=*z`hsIqo>_)^` z`UlJH;l|3sZckLVI^JpJK6s3(M*f$Y{(U`c{jC18`1)$UY&+zg$!<;;DWA~+mp zog+qaP}>lNt#%9J;CISKLFF}HzK&$@X&|S=W7hpVRbkX0;GC+Hsewp-HJgeE@mmf? z8>eyp_JbnmQ7f(qzQsn#UO?-2rW9!XA~u26Z~XFHh5uyThfPlV@fH)T$ko@^?JNp) za2zNEqdC;P6{*A^hUx` z-(BDBUt!|SsKKtAQP2wZaUI*5EdSUi>CMFquyin$0H2G4u7oZlwbO&H2;^SltcdPR@9rXZ^j)c(63@+{_zu3voYv&^DX|_&D2%2mL7~Z0gjuDK(f1fq$f&#{a}sFTXSJB4 zVny8~ycc=WUCTzL)%?K-N&adk)_V8H8>`bNt47sOmM`oVW!n?26oWj^JCBXVS`982 zcc<4j`Knze_~ z@{;idsMI>Y{X4Bd%|QOs+x=0M3vx+C(9!+^K)i+oNR`lTfTU@xT_`g~@Pa_#_slVl znVp`U*L)4|)WBta>{TNq^f_N*uMV}kT2=^Kq_Vck0K4KVHHr(L^YB;@lS8Ny4jXY=@x z6ocKonei}{Hr%^CLtLgAL3=#dohPaD?MU?M6eaF$SZ(|klDxZi6ILEJj$b4!^j-X8 zKoh=FR}D*3u1hZ2i2TI2<}|~1JW6L{j7kZ7c4fWms_Px8Ov)0`a)WeV)+XHU_`Xj8 z{$uI)>=iXT{JXcgJ0E-l3z)su3=oCu@xhNWRS5!a`cYE#MShXZkPUmC)!QYf2J*(e zqy93)D~&-0lSQLzGcF^$+qYb$FPh54988hn#2^Muh?w^ZO$Zx~2%$`Dp8)XJt=c5u?gA{i+O1ndrhuzeXCjrmtKb zZg-n8p|HCk1D(~yR@EDq)6+T`^PXO`=Qjzf%Vg^=H?8~5i;KQ_JiW|+yQ!6?*{_H5 zoQN&fc&JMWPZ;u`(zx%7C^)QVl%}gpkqHs!Lp@@8z&ur1q7dIGP7_H*HZvCfbDlaj@N=FTqxJuPp8DW_0J+~w A>i_@% literal 0 HcmV?d00001 diff --git a/client/images/spin/64x64/Preloader_7.gif b/client/images/spin/64x64/Preloader_7.gif new file mode 100644 index 0000000000000000000000000000000000000000..5f6dd5ef99a966a6ab79289f56695327c4d6b98f GIT binary patch literal 6225 zcmaKv3p|r;_{V1(Z7eyAkTf$IiJ3!4HQSu6cV-pkEr%_X(~F|s-WbXu!l)=ka!%z` zuSzwN^I?u5=Tk_MLpjd>(OYl&fBx@(pY5~fxu5&KukY`^uKRlK%f!rBSI>a}B7nYv zK+PX!jqf)cEo!NK|Jmzh=hME)C%uzrOS^nIT{DZzk9$7Y7B+W(`jW^Uraa^>t*k!k znz-9K>hYo@wQcnL>+TD$yWL7UvOC5SxI_J)zXn(I=DnLpZ+{$;rKaDms3ogoY+;4xRNPL_Zz>!56jL|QIypD-Wy$$jd&BsQaZdfC zu5rtUT*|}7)6d@y%`C*$4|aX}((!S=Vr05}c-p`0-Lt+)?^m5^ZSVgo?>=Alu6ArD zw{twMVenE_A8&1Kd6l=y;}Ns#yQbz1v+7oOJaSI`+|tU@DsN#0c(QilNvly#{hgMP z@%hEC%c~E%#%C5+roJwjKWLm^TA5y0UR+uIw6Hw+Wr>tszsg%{nwY)bI7G~@V?J%S z%4@pTICP|-d3bh#me({ox46vX9WH3TT-9gspt1GC?EAUJ&Z+t8_n$w0T{6tB&uD)i zQrVl_GSWUd*E{{?%koNO?SN@+!|c*Z;F}(^+(y&;4fD&Z)uYpnf46Z4ry^_mU7x?T z&TmR;9{IYm`ek`_bZ+6rz{j5HFPU%O8)nxXDQy1j5tp9dJTkjrmfKL!{h_4)HY9xVCvQ2 zR7&f}z|7ad&tKW~gHg2u@8=dyK5fr@I~GvhT{SvgHTrplw>J58DY|YTzkA~I;_}c8 zK*amJuv|LyDYCYolv8h>+pw^_YMR@a+5Vo#<4t{Crsi=kmUmk|Xgv6^(dAjY>$A5d z10Puxy~m%l237Qo%`cuVc{{(n65lWw-!No!zri}M=}xa1$f45z&9VqPikk~XFTHW_@VCq`qAZO@P+vHs7;8f-4bk^H3 z|I&Aldnfy*zZP^)6n0OrDta!K_gs9_bNq2DcVafYx-X)-->u~Bxw39re$%Pv9fYj9 zwY4?*HKBt>bZe3!)d;VKgYbbsAfU;HLPe1sd>w#)g9H9v4o;_;z9>hgv#ZBG^rz>q z&?r~NKJ*c73XbAMV!F7Rp7&;2pFc=?&sPD2BwqobywrLCi*p^C!e zH1O&;;H$G+LrY&eI-^-)#YR`_L}FzFzw3>VAHHYJQq(p5D&t z8hUzq>vQ1oyMZ3Nea?CKI{5GQ@KN|N1DWaL+0!&TA$Iu(esS&J~Tl3j|6wG zf2Z~EQTrxG&B@bU-QU4WT|*7GF6l={3g!Rr>hAt;Zy#S8^C$2BIk6A@oEKA_#`N(# zf-6^>Eq(*g(6w&ps*ANCs&X42IX%fC=`7& z4c^?{>L(SEdp|5GELnM(%I(oWfV+{=>;8stEOeW)ub+mM}HI48;#*#gq z&bTu@e1D8(0AqD<+B!xWx}^UcyB-YgUVvpX)7$kdlVR-b>5lp)THp1*S+xFhzVBlh z{|C!=9oqjnRvmy*Uw7>WSN~`N;%EKx-@pZK{tbPm2N3VxKw$H&@m5!smlhYkewm+} zo%uZdY3k$Thl%mA_oE}jLxThTeZ4*1@47lW-nO^3wlp_!8yo8DYHO;iDl6WUzb-4~ zyn6Yf1p>;@1`W*xt((}Dr*s(Fu zSEC}YM1+ThUcM9(9K;F?xcJwFKhK}@_d9#W*T?%0FHaA5x6`LwU7Sxc8BUH4_9u@2 zZg=dct<90chv?QcE9!3tDV7%IW~L^_Mr0DvkZ@rCK7+mbdb)dbw6!$x8aQ>e-Kx7( zl(9RN6fp{DdDITM?Xufsq@}h>N+89>L`Aj;Z$=0S!eN^P_@NLmkRIe0p->2rB~*bQ z@Cqe>K(GqX8eG;iFQqgXCaz*vl_y_{wURYY8WWL;qQFt9mCQ z{yfYd(FU}eLt@63V$*2}jM^Y~X^?wY^da3d5J<+hOchV2j0XGfM}4mXAwqJN#d!m- z!^C$TuPe?Us*F*vxMTUWV5Bxd^K@_B)57>tibEckijImG`mOcN6 zyp+gB>tMjTC}7?1hjj&nuJ0I!#flAr+qir-X-bxqgbR2WQuFT}fF6T7PLGMcex(v< zdKO9_i7<~oGF39^A39_i0UPT{Gi_`=7?3fHd74PRD(bhVXJ4fFI5SNbB3&YNRHIr* zfd8qRE+LG|+H8jqoGiO?J6kgrwwZa?6zv2HT|iYg_l1Jja!p-3X%P}q7A^&L;Nakf>#`mzjB`VE zRJJopb~{|Y<Q{ts->Wzi5Cg~`y|+fE5fZiRu%+rePDA} zjj!|H3U@NMZTK4T9z~%;NUs$tg-Lpun30u-46C z(}aFmGi9fxIIZ_P#G!a5+P)y;w}ynj+I^Rl3tJ>oH6B$FZqhCbXJF4<5UrqhY*m;~ zXxE(C0z#*TfnW?g+327IDFM-ak5h@+eN<_YnwQxxswk*rNlh7s5tR<-W-0#a(oF!W zB!HT_0aZoSzx?oJ#FMMCX+H2^Js&BxCS}tg^Ta*Slx-5=_dn zH)~0b5Lt^vX4@8q#oC?nZ>GmtREynJy@8bui62ejqu2^pc@>Sb5r?^CBd3uanK=eG zyu`A|f;44ws9Yxq4X?+bbWD+9Mind_Vc8-*6vU!*H&IQ?#mlhjda%_BJ$rDc;IAtz z1YmCkunRY0YlRJ0iDF=}ba+#iRhWth99=E$aA(VoS@duqTLpa``wvQMxzu!P^rxkW z%OA<2K1HYH8!Fj0r&X7Q*b_EJ@fJXbG@zq+qYk?&s>2OkU9a+SZ|;?=HX}7}ng`NR zlKg(hVItFmSHY@~s5yO{Q}}@Zi<7crOmfNHV>MbRLQ@9atzCdUNP@7JyjbT@hrzWp0LHv=e$T5D)#^s zEZ#P7bZ0C_k6mnjQ-NBZ45C3+MCC=y_`uh~4x_1{YK}@Y*3{}QQSg$Kd=32sy+1KI{cfMfwxFMd^pbNEM5XEpX;i(<64*~ zagDR)vU?AgU6oP-yJr#e0tKS@Vf4<0N-`^CKcMP^f+1g=x*vF~Rl2|7#-A>ig^heZ z2}-BySKAFh&R};49y&vVv9+B=F8sba@H`Lmfi2Wq$Iu>%f?iUh-lC%ZfPz(v^>1;4 zyoQtI5KFnPO^%cu0{g(xh!pS8P0@Sl0&^0@BX?LrTM^ywXw%g)istPGhEj^=8#j*( z2n{G&_fyQTim38z1(O(AUt-OzJ+y;@-s5!i(IT3?ir*_Hr(WlhX($5(HB=G&Sg6klJOJX07r!oL_RNG7wBi0P@cbkb)Nm->m0Q zBq|2Y&jMrl3q?!^fjo_Y79cL9*4;A;sFCAYpP5O^2`H5<(i%r~1Sam>gm~@hZKHQb zuJ#X5SL|z8D$m&eE?@lR8v)LNcSI97atHr}3%q1E(`xPqQ78RP+2z68BVm3Y@f#DR z6mYH(`S$KR_mgK$dO%{Qu(|>)n)__%E@j&mKbP&w3F$=f02E0lJBFE(jFh*&Y&l?p z+J6nVI~(2qLfYb1#uew9TfxPH%zM#0MKJoG7|s*Ui*pxg>l1KxdGfYtH(Nh4%@SK;IvK@Hzj6ghvu2oxZ-%I}}g zXH+T+#z)j)QI!P6ttL5$l;Px9q>9s$g+mC-G7%xr6RC%#uy3Q|(iZ(dE)@{4kt*&P zp`4?NJWH!`q;5}+!7OH3V7Y>DvBUoXad91DVT<`gJ1R^C8HQ<;h7XpT>BeoUE(?Iq z@Xu7{JEdHJBc~SI^BI+%f5Lk4z$^Fx3w`mi)}loS$6C|&j+m}|W;GnVXF>I;Au3pj zw5siZ!Xcv549XB`trgDO%mr<)CE8wYd!xXQ2^@eK6Ilvd;d1hZ;E!b+qUNWUz9EH` zM@V2G;=&9~VjL8H(>Tuxi(};~@$gHh(Ysh>3j4Jp=H3sP689>YbVl0+uM1^6BSDNkxd@rRCGF z9tb#-7HRK|gM>w6S6NjAFT0xfAp~zWbwts8_i<=OK_dPd$J@Z_y14(&vC6$*mel+v zvVCa!cBrw9jA1_rXIP352}?i5^{^2bOmy@Syc2u^L$|P{lx+=3fQ5)DsUrC-Mb;jK z6IjF$?Q@%CG{73DpBY>RB>z3vl>w|Pp~IyRVEL5nQO1a1D17a&rau&kA-nWnB7AAE zU{#N9h68q(i~^xoTS4Hoj2)t&wJ%=Smhxmu0HwyOBaT%We``JSzA$r5-Eu*Y=YA6he@TOpX#njS_%-Y3IcJqKhNu#Ij!R5gLB*g;c55z_lWsx%l=L~aifTU@FMi{KcHsiK-w`D6Kg&+*Kb zV+Vs@-Qev{Tab_9!_7CST-ndMdQNHxvZ=8{8xf5(jeQHemO!7dXg;^6ej@7=>-;JtCy!6Y`A zpY5Avn87-jm0~;iDE*b9OO~#vE+?_}7B6Y@g7dJXbdp+iH@<)$%Dshp;+Au^mHC)r zezTW8XqsbTVhgs}95Z4neV=)Cbe7MBaIc&7(# zl29?A7tiqD4U;&4vtP(3LWwNuAl6E3Q_awi+ReG)*9rv=NLfFlt{<&ewpIu!njbGi z*o`UPRzC93GJUpS`h>)xbT&UMCO1Au1@e_@IQ%Hhj7Z8SaqTejMNHR z=IG{)HycVw8JsAymuyumG&Z8>1jQ9$WK~bHZGcRUN!auvzJ@N^PPBL?u}+=~Y)Buru>eDpi~|ysxa9S#%!9tr6M6 zcU=|U?+|wF(pqYo;TsktM@zCvSj&<8u;;n|Z13g`sYe>LUNWzjseb@~TI}GOLT9?S zlxP*V1&imQmlQN>tVzmZnoDtxO)&l_8D%NHJSd|=5#*83>hIK96In|riHD{3)rGCn zdrSDn{E#R%QK7E+9xo5?k+P--l}A*GDWpnE*f*l_&g`)?oFzdjF8?EN3g C33#~x literal 0 HcmV?d00001 diff --git a/client/images/spin/64x64/Preloader_8.gif b/client/images/spin/64x64/Preloader_8.gif new file mode 100644 index 0000000000000000000000000000000000000000..b57e4d8206bb0937179772ad7a3fa86ee9a4db88 GIT binary patch literal 25056 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 literal 0 HcmV?d00001 diff --git a/client/images/spin/64x64/Preloader_9.gif b/client/images/spin/64x64/Preloader_9.gif new file mode 100644 index 0000000000000000000000000000000000000000..fc3ddb70e65048962c17f5fbd39fc03df93117db GIT binary patch literal 23767 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 literal 0 HcmV?d00001 diff --git a/client/index.html b/client/index.html index ba183df..8d81ac3 100644 --- a/client/index.html +++ b/client/index.html @@ -26,6 +26,9 @@

@@ -81,7 +84,9 @@ + + diff --git a/client/js/controllers/home/machineDetails.js b/client/js/controllers/home/machineDetails.js new file mode 100644 index 0000000..f84a073 --- /dev/null +++ b/client/js/controllers/home/machineDetails.js @@ -0,0 +1,39 @@ +/** + * The home controller + * + * @param {$scope} $scope The $scope service from angular + */ +mainApp.controller('machineDetailsCtrl', [ '$scope', 'Compute', '$rootScope', '$timeout', function ($scope, Compute, $rootScope, $timeout) +{ + + $scope.machine={}; + $("#waitingForToggleMachine").hide(); + + $scope.$on('showMachineDetailsEvent', function(eventName ,machine){ + $scope.machine=machine; + $('#machineDetailsModal').modal({backdrop: false, keyboard: true}); + }); + + + $scope.toggleMachineState=function(){ + $("#waitingForToggleMachine").show(); + + // Fake timeout + $timeout(function(){ + $("#waitingForToggleMachine").hide(); + }, 3000); + $timeout(function(){ + $scope.machine.online=!$scope.machine.online; + + }, 3000); + + + }; + + $scope.applyModifications=function(){ + //Todo + } + + + +}]); diff --git a/client/js/controllers/home/main.js b/client/js/controllers/home/main.js index d25bfad..4e3bcda 100644 --- a/client/js/controllers/home/main.js +++ b/client/js/controllers/home/main.js @@ -3,15 +3,22 @@ * * @param {$scope} $scope The $scope service from angular */ -mainApp.controller('homeCtrl', [ '$scope', 'Compute', function ($scope, Compute) +mainApp.controller('homeCtrl', [ '$scope', 'Compute', '$rootScope', function ($scope, Compute, $rootScope) { - var updatePage=function(){ // TODO Update graph etc... } // Retrieve all Data Compute.pullData(updatePage); - + + Compute.getMachines(function(adzda){}); + + $scope.raiseShowMachineDetailsEvent=function(){ + var machine={name: "Machine 1", online:true}; + $rootScope.$broadcast("showMachineDetailsEvent", machine); + } + + }]); diff --git a/client/js/controllers/login.js b/client/js/controllers/login.js index 829fc1d..1a89563 100644 --- a/client/js/controllers/login.js +++ b/client/js/controllers/login.js @@ -13,14 +13,19 @@ mainApp.controller('loginCtrl', ['$scope','$sce','Identity', function ($scope,$s if(!Identity.isAlreadyLogin()){ $('#loginModal').modal({backdrop: 'static', keyboard: false}); } + + // Manager logout event $scope.$on('logoutEvent', function(){ + Identity.logout(); $('#loginModal').modal({backdrop: 'static', keyboard: false}); }); - + + // Hide loading button and message alert $('#loadingLoginButton').hide(); $('#failedToLoginAlert').hide(); - + + // Defined function for login $scope.loginAction=function(){ // Begin login state for template diff --git a/client/js/controllers/status.js b/client/js/controllers/status.js index e01df34..940d794 100644 --- a/client/js/controllers/status.js +++ b/client/js/controllers/status.js @@ -10,13 +10,11 @@ mainApp.controller('statusCtrl', ['$scope','Identity', '$rootScope', function ($ { // Give profile to model - $scope.profile=Identity.profile; + $scope.profile=Identity.getProfile(); // Function to logout - $scope.logout=function(){ - Identity.logout(); + $scope.raiseLogoutEvent=function(){ $rootScope.$broadcast('logoutEvent'); - }; }]); diff --git a/client/js/services/Compute.js b/client/js/services/Compute.js index c5c8da9..8148948 100644 --- a/client/js/services/Compute.js +++ b/client/js/services/Compute.js @@ -2,11 +2,12 @@ mainApp.factory('Compute',[ '$http', 'Identity', function($http, Identity){ - + // Create data var data={}; data.machines={}; + // Parser var parseGetMachinesAnswer=function(response, failedToSendRequest){ @@ -16,8 +17,24 @@ mainApp.factory('Compute',[ '$http', 'Identity', function($http, Identity){ // Get Machine var getMachines=function(callback){ + var params={ + "token" : Identity.getToken(), + "task" : "compute", + "action":"getServer", + "serverId":"69d5bcc4-2fab-4634-b0d2-f455fee5b7bd" + }; + var result=$http.post('../server/index.php', - $.param({"token" : Identity.profile.token, "task" : "Compute"})); + $.param(params)); + + // Wait and handle the response + result.then(function (response){ + console.log(response.data.Servers); + callback(parseGetMachinesAnswer(response, false)); + },function(response){ + alert(response.status); + callback(parseGetMachinesAnswer(response, true)); + }); }; @@ -31,8 +48,8 @@ mainApp.factory('Compute',[ '$http', 'Identity', function($http, Identity){ // Return services objects return { - getMachines: getMachines - pullData: pullData + getMachines: getMachines, + pullData: pullData, data:data }; diff --git a/client/js/services/Identity.js b/client/js/services/Identity.js index 8ee664c..b1d2a48 100644 --- a/client/js/services/Identity.js +++ b/client/js/services/Identity.js @@ -7,37 +7,47 @@ mainApp.factory('Identity',[ '$http', '$cookies', function($http, $cookies){ var profile={}; profile.username=null; profile.projectname=null; - profile.token=null; - - - /** - * Save profile in cookies - */ - var saveCookieForSession=function(){ - $cookies.putObject('profile', 5); - }; - + var token=null; + /* * @returns {boolean} Return true if a cookie is found (and load it in profile) false else */ var isAlreadyLogin=function(){ + + // Load cookies var profileInCookie=$cookies.getObject('profile'); - console.log(profileInCookie); + var tokenPart_0InCookie=$cookies.getObject('token.part_0'); + var tokenPart_1InCookie=$cookies.getObject('token.part_1'); + - if(typeof profileInCookie !== 'undefined'){ + // Check if cookie is defined + if(typeof profileInCookie !== 'undefined' + && typeof tokenPart_0InCookie !== 'undefined' + && typeof tokenPart_1InCookie !== 'undefined' + ){ + + // If yes, put it into variables angular.extend(profile, profileInCookie); + token=tokenPart_0InCookie+tokenPart_1InCookie; + + // Return I'm Login return true; } + // Return I'm not Login return false; } + + /* * Destroy profile cookies */ var logout=function(){ $cookies.remove('profile'); + $cookies.remove('token.part_0'); + $cookies.remove('token.part_1'); } @@ -49,15 +59,28 @@ mainApp.factory('Identity',[ '$http', '$cookies', function($http, $cookies){ */ var parseLoginAnswer=function(response, failedToSendRequest){ - + // Defined return object var requestParserResult={}; requestParserResult.status=1; requestParserResult.failReason=null; if (typeof response.data.token !== 'undefined') { + // Set status code requestParserResult.status=0; - profile.token=response.data.token; - saveCookieForSession(); + + // Find the middle of the token to split it + var middle=parseInt(response.data.token.length/2); + + // Create expire date (cookie expire in 55 mins) + var expireDate=new Date(); + expireDate.setMinutes(expireDate.getMinutes()+55); + + // Save profile + $cookies.putObject('profile', profile, {'expires': expireDate}); + // Save first part of token + $cookies.putObject('token.part_0', response.data.token.substring(0, middle), {'expires': expireDate}); + // Save second part of token + $cookies.putObject('token.part_1', response.data.token.substring(middle, response.data.token.length), {'expires': expireDate}); } else if(failedToSendRequest){ requestParserResult.failReason="Failed to send request"; @@ -69,7 +92,6 @@ mainApp.factory('Identity',[ '$http', '$cookies', function($http, $cookies){ return requestParserResult; }; - /** * Function to connect to OpenStack @@ -87,24 +109,39 @@ mainApp.factory('Identity',[ '$http', '$cookies', function($http, $cookies){ profile.projectname=projectname; var result=$http.post('../server/index.php', - $.param({"task" : "Authenticate", "user" : username, "password" : password, "project" : projectname})); + $.param({"task" : "Authenticate", "user" : username, "password" : password, "project" : projectname})); // Wait and handle the response result.then(function (response){ - callback(parseLoginAnswer(response), false); + callback(parseLoginAnswer(response, false)); },function(response){ - callback(parseLoginAnswer(response), true) + callback(parseLoginAnswer(response, true)); }); }; + /* + * Get the profile + */ + var getProfile=function(){ + return profile; + } + + /* + * Get the token + */ + var getToken=function(){ + return token; + } + // Return services objects return { login: login, - profile: profile, + getProfile: getProfile, isAlreadyLogin: isAlreadyLogin, - logout:logout + logout:logout, + getToken:getToken }; diff --git a/client/partials/home/machineDetails.html b/client/partials/home/machineDetails.html new file mode 100644 index 0000000..606edcf --- /dev/null +++ b/client/partials/home/machineDetails.html @@ -0,0 +1,84 @@ + diff --git a/client/partials/home/main.html b/client/partials/home/main.html index 7a5045a..37638d3 100644 --- a/client/partials/home/main.html +++ b/client/partials/home/main.html @@ -1,8 +1,11 @@ -
+
Home
Main Content + +
+
-
\ No newline at end of file +
diff --git a/client/partials/nav.html b/client/partials/nav.html index 3c72844..b3ef76a 100644 --- a/client/partials/nav.html +++ b/client/partials/nav.html @@ -32,7 +32,7 @@
  • Informations
  • Settings
  • -
  • Logout
  • +
  • Logout
  • diff --git a/server/Test/AppTestClass.php b/server/Test/AppTestClass.php index 40a5847..3ff0aea 100755 --- a/server/Test/AppTestClass.php +++ b/server/Test/AppTestClass.php @@ -12,6 +12,7 @@ class AppTest{ protected $openstack; protected $pluginsApi; + protected $postParams; protected $tokenClass; protected $tokenPost; protected $output; @@ -23,8 +24,13 @@ class AppTest{ $this->tokenClass = new genTokenOptions($args); $this->openstack = new OpenStack\OpenStack([]); $this->pluginsApi = plugin_api::getInstance(); - $this->output = array(); $this->errorClass = new errorManagement($this); + $this->output = array(); +<<<<<<< HEAD + $this->errorClass = new errorManagement($this); +======= + $this->postParams = $_POST; +>>>>>>> develop } @@ -48,6 +54,16 @@ class AppTest{ $opt = $this->tokenClass->getOptions($service); return $this->openstack->imagesV2($opt); break; + case "Compute": + if($this->tokenPost == NULL) $this->tokenClass->genComputeToken(); + $opt = $this->tokenClass->getOptions($service); + return $this->openstack->computeV2($opt); + break; + case "Network": + if($this->tokenPost == NULL) $this->tokenClass->genNetworkToken(); + $opt = $this->tokenClass->getOptions($service); + return $this->openstack->networkingV2($opt); + break; } } @@ -61,10 +77,21 @@ class AppTest{ $this->tokenClass->genNetworkToken(); $this->setOutput("token", $this->tokenClass->getBackup()); - }catch(Exception $e){ - echo $e; - exit(); - } + }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); + } + + } + + public function getPostParam($name){ + + return $this->postParams[$name]; } @@ -75,12 +102,16 @@ class AppTest{ } public function show(){ - echo json_encode($this->output); + return json_encode($this->output); } +<<<<<<< HEAD public function getErrorInstance(){ return $this->errorClass; } -} \ No newline at end of file +} +======= +} +>>>>>>> develop diff --git a/server/Test/computeTest.php b/server/Test/computeTest.php new file mode 100644 index 0000000..3ce1f2e --- /dev/null +++ b/server/Test/computeTest.php @@ -0,0 +1,20 @@ +re '../vendor/autoload.php'; +include('/istic-openstack/server/init.php'); +include_once("../core/Compute.php"); +$compute = new compute($App); + +$servers = $compute->listServers(); + +$servers= $compute->listServers(true); +foreach($servers as $server){ + //print_r($server); + echo $server->name." ".$server->id."
    "; + +//$opt = Array(); +//$opt['name'] = "Test"; +//$serverid = Array("id"=>"69d5bcc4-2fab-4634-b0d2-f455fee5b7bd"); +//$serverid["id"] = "{69d5bcc4-2fab-4634-b0d2-f455fee5b7bd}"; +//unset($server); +//$server = $compute->getServer($serverid); +//echo $server->name." ".$server->image; +//$server->update(array('name' => 'test')); diff --git a/server/core/App.php b/server/core/App.php old mode 100644 new mode 100755 index babb3d9..edb75f6 --- a/server/core/App.php +++ b/server/core/App.php @@ -33,7 +33,7 @@ class App{ public function setToken($token){ $this->tokenPost = $token; - $this->tokenClass->loadBackup($his->tokenPost); + $this->tokenClass->loadBackup($this->tokenPost); } @@ -50,6 +50,16 @@ class App{ $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; } } @@ -95,6 +105,7 @@ class App{ public function show(){ echo json_encode($this->output); + //error_log(var_dump(json_encode($this->output), true), 0); } -} \ No newline at end of file +} diff --git a/server/core/Compute.php b/server/core/Compute.php index 8d1c8b6..94e219c 100644 --- a/server/core/Compute.php +++ b/server/core/Compute.php @@ -1 +1,176 @@ +app = $app; + $this->libClass = $app->getLibClass("Compute"); + } + /** + * Execute an action + * + * @param String $action name of another function of this class + * + * @return void + */ + public function action($action){ + + $this->{$action.""}(); + + } + /** + * List servers. + * @return array + */ + public function listServers() + { + $servers = $this->libClass->listServers(); + $this->app->setOutput("Servers", $servers); + return; + } + /** + * List flavors. + * @return array + */ + public function listFlavors() + { + $flavors = $this->libClass->listFlavors(); + $this->app->setOutput("Flavors", $flavors); + return; + } + /** + * List images. + * @return array + */ + public function listImages() + { + $images = $this->libClass->listImages(); + $this->app->setOutput("Images", $images); + return; + } + /** + * Create server. + * @return array + * + public function createServer() + { + + $server = $this->libClass->createServer(); + } + */ + /** + * Get server details. + * @return array + */ + public function getServer() + { + $serverId = $this->app->getPostParam("serverId"); + $opt = array('id' => $serverId); + $server = $this->libClass->getServer($opt); + $server->retrieve(); + $this->app->setOutput("MyServer", $server); + return; + } + /** + * Get flavor details. + * @return array + */ + public function getFlavor() + { + $flavorId = $this->app->getPostParam("flavorId"); + $opt = array('id' => $flavorId); + $flavor = $this->libClass->getFlavor($opt); + $flavor->retrieve(); + $this->app->setOutput("MyFlavor", $flavor); + return; + } + /** + * Get image details. + * @return array + */ + public function getImage() + { + $imageId = $this->app->getPostParam("imageId"); + $opt = array('id' => $imageId); + $image = $this->libClass->getImage($opt); + $image->retrieve(); + $this->app->setOutput("MyImage", $image); + return; + } + /* working on tests + + public function update() + { + $image = $this->app->getServer(array $options = []); + + } + public function delete() + { + //TODO + } + public function changePassword($newPassword) + { + //TODO + } + public function reboot($type = Enum::REBOOT_SOFT) + { + //TODO + } + public function rebuild(array $options) + { + //TODO + } + public function resize($flavorId) + { + //TODO + } + public function confirmResize() + { + //TODO + } + public function revertResize() + { + //TODO + } + public function createImage(array $options) + { + //TODO + } + public function listAddresses(array $options = []) + { + //TODO + } + public function getMetadata() + { + //TODO + } + public function resetMetadata(array $metadata) + { + //TODO + } + public function mergeMetadata(array $metadata) + { + //TODO + } + public function getMetadataItem($key) + { + //TODO + } + public function deleteMetadataItem($key) + { + //TODO + } +*/ +} diff --git a/server/core/LibOverride/genTokenOptions.php b/server/core/LibOverride/genTokenOptions.php old mode 100644 new mode 100755 index b71defa..50826ed --- a/server/core/LibOverride/genTokenOptions.php +++ b/server/core/LibOverride/genTokenOptions.php @@ -260,13 +260,14 @@ class genTokenOptions public function loadBackup($back){ $backup = unserialize($back); + $this->backup["roles"] = $backup["roles"]; $this->backup["project"] = $backup["project"]; $this->backup["user"] = $backup["user"]; - loadComputeBackup($backup["Compute"]); - loadIdentityBackup($backup["Identity"]); - loadImageBackup($backup["Image"]); - loadNetworkBackup($backup["Network"]); + $this->loadComputeBackup($backup["Compute"]); + $this->loadIdentityBackup($backup["Identity"]); + $this->loadImageBackup($backup["Image"]); + $this->loadNetworkBackup($backup["Network"]); } @@ -324,6 +325,7 @@ class genTokenOptions private function unserializeToken($tokenSerialized){ $Saved = file_get_contents("core/LibOverride/projectTokenData/".$this->backup["project"]); + $Saved = unserialize($Saved); $api = new Api(); $token = new Models\Token($this->httpClient, $api); $token->methods = unserialize($tokenSerialized["methods"]); diff --git a/server/index.php b/server/index.php index 166e82e..f888671 100644 --- a/server/index.php +++ b/server/index.php @@ -27,12 +27,26 @@ $identityObject->action($action); $App->show(); break; - + + case "network": + include_once("core/Network.php"); + $networkObject = new network($App); + $networkObject->action($action); + $App->show(); + break; + case "image": include_once("core/Image.php"); $imageObject = new image($App); $imageObject->action($action); $App->show(); break; + + case "compute": + include_once("core/Compute.php"); + $computeObject = new compute($App); + $computeObject->action($action); + $App->show(); + break; } diff --git a/server/vendor/php-opencloud/openstack b/server/vendor/php-opencloud/openstack index 1419eb2..15aca73 160000 --- a/server/vendor/php-opencloud/openstack +++ b/server/vendor/php-opencloud/openstack @@ -1 +1 @@ -Subproject commit 1419eb2e01164bb6b8b837df37724423907352d7 +Subproject commit 15aca73f423166c7ef8337ba08615c103c66e931 From ae1100c16880d4bae77513ec433ac6734da8dea4 Mon Sep 17 00:00:00 2001 From: Yoggzo Date: Mon, 29 Feb 2016 15:25:30 +0100 Subject: [PATCH 09/28] Error management --- server/Test/AppTestClass.php | 20 ++------ server/Test/imageTests.php | 4 +- server/core/Image.php | 92 ++++++++++++++++-------------------- 3 files changed, 48 insertions(+), 68 deletions(-) diff --git a/server/Test/AppTestClass.php b/server/Test/AppTestClass.php index 4d1f824..57dd422 100755 --- a/server/Test/AppTestClass.php +++ b/server/Test/AppTestClass.php @@ -26,15 +26,10 @@ class AppTest{ $this->pluginsApi = plugin_api::getInstance(); $this->errorClass = new errorManagement($this); $this->output = array(); -<<<<<<< HEAD -<<<<<<< HEAD + $this->errorClass = new errorManagement($this); -======= + $this->postParams = $_POST; ->>>>>>> develop -======= - $this->postParams = $_POST; ->>>>>>> develop } @@ -109,17 +104,12 @@ class AppTest{ return json_encode($this->output); } -<<<<<<< HEAD -<<<<<<< HEAD + public function getErrorInstance(){ return $this->errorClass; } -} -======= } ->>>>>>> develop -======= -} ->>>>>>> develop + + diff --git a/server/Test/imageTests.php b/server/Test/imageTests.php index 47a69e2..d21eefb 100644 --- a/server/Test/imageTests.php +++ b/server/Test/imageTests.php @@ -17,7 +17,7 @@ $opt['minRam'] = 10; //$new_image = $image->createImage($opt); //Liste des images -$images = $image->listImage(); +$images = $image->action("listImage"); if(isset($images)){ echo "Images présentes :"; @@ -49,7 +49,7 @@ else{ // Détails Image //$details = $image->imageDetails($id_image); -$image->deleteImage('123456'); +//$image->deleteImage('123456'); //$image->desactivateImage($id_image); //$image->reactivateImage($id_image); diff --git a/server/core/Image.php b/server/core/Image.php index 4d22443..4025595 100644 --- a/server/core/Image.php +++ b/server/core/Image.php @@ -39,7 +39,7 @@ class image implements Core{ */ public function __construct($app){ if(!isset($app)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect parameter"); } try{ $this->app = $app; @@ -79,7 +79,7 @@ class image implements Core{ private function createImage(array $opt){ if(!isset($opt)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect parameter"); } @@ -98,7 +98,7 @@ class image implements Core{ } else{ - //ERROR + $this->app->setOutput("Error", "Image name already exists"); } if(isset($opt['id'])){ // UUID : nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn if($this->libClass->getImage($opt['id']) != null){ // if the id already exists -> error @@ -153,7 +153,7 @@ class image implements Core{ try{ $l = $this->libClass->listImages(); if(!isset($l)){ // if the list is empty there is no images - + $this->app->setOutput("Error", "No image"); } }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); @@ -183,7 +183,7 @@ class image implements Core{ $service = $this->libClass; $image = $service->getImage($id); if($image == null){ // if the image don't exists -> error - // Renvoyer erreur + $this->app->setOutput("Error", "Image doesn't exist"); } return $image; @@ -209,10 +209,10 @@ class image implements Core{ **/ private function updateImage($id, array $opt){ if(!isset($id)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect id parameter"); } if(!isset($opt)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect opt parameter"); } try{ @@ -220,7 +220,7 @@ class image implements Core{ $service = $this->libClass; $image = $service->getImage($id); if($image == null){ // if the image don't exists -> error - // Renvoyer erreur + $this->app->setOutput("Error", "Image doesn't exist"); } $options = Array(); @@ -267,14 +267,14 @@ class image implements Core{ // si protected = true, demander de le mettre a false // vérifier existence image if(!isset($id)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Image doesn't exist"); } try{ $service = $this->libClass; $image = $this->libClass->getImage($id); if($image == null){ // if the image don't exists -> error - // Renvoyer erreur + $this->app->setOutput("Error", "Image doesn't exist"); } $image->delete(); }catch(BadResponseError $e){ @@ -297,14 +297,14 @@ class image implements Core{ **/ private function reactivateImage($id){ if(!isset($id)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect parameter"); } try{ // vérifier existence image $service = $this->libClass; $image = $service->getImage($id); if($image == null){ // if the image don't exists -> error - // Renvoyer erreur + $this->app->setOutput("Error", "Image doesn't exist"); } $image->reactivate(); }catch(BadResponseError $e){ @@ -326,14 +326,14 @@ class image implements Core{ **/ private function desactivateImage($id){ if(!isset($id)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect parameter"); } try{ // vérifier existence image $service = $this->libClass; $image = $service->getImage($id); if($image == null){ // if the image don't exists -> error - // Renvoyer erreur + $this->app->setOutput("Error", "Image doesn't exist"); } $image->deactivate(); }catch(BadResponseError $e){ @@ -358,19 +358,19 @@ class image implements Core{ **/ private function uploadImage($id, $file_name){ if(!isset($id)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect id parameter"); } if(!isset($file_name)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect file_name parameter"); } try{ // vérifier existence image $service = $this->libClass; $image = $service->getImage($id); if($image == null){ // if the image don't exists -> error - // Renvoyer erreur + $this->app->setOutput("Error", "Image doesn't exist"); } - $stream = \GuzzleHttp\Psr7\stream_for(fopen($file_name, 'r')); // A VOIR + $stream = \GuzzleHttp\Psr7\stream_for(fopen($file_name, 'r')); $image->uploadData($stream); }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); @@ -391,14 +391,14 @@ class image implements Core{ **/ private function downloadImage($id){ if(!isset($id)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect parameter"); } try{ // vérifier existence image $service = $this->libClass; $image = $service->getImage($id); if($image == null){ // if the image don't exists -> error - // Renvoyer erreur + $this->app->setOutput("Error", "Image doesn't exist"); } $stream = $image->downloadData(); }catch(BadResponseError $e){ @@ -424,22 +424,18 @@ class image implements Core{ **/ private function addMemberImage($image_id, $member_id){ if(!isset($image_id)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect parameter image_id"); } if(!isset($member_id)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect parameter member_id"); } try{ - // vérifier existence image - // on doit être le proprio de l'image - // vérifier membre existe $service = $this->libClass; $image = $service->getImage($id); if($image == null){ // if the image don't exists -> error - // Renvoyer erreur + $this->app->setOutput("Error", "Image doesn't exist"); } - $member_id = $image->addMember($member_id); }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); @@ -461,21 +457,21 @@ class image implements Core{ **/ private function listMemberImage($image_id, $member_id){ if(!isset($image_id)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect parameter image_id"); } if(!isset($member_id)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect parameter member_id"); } try{ // vérifier existence image $service = $this->libClass; $image = $service->getImage($image_id); if($image == null){ // if the image don't exists -> error - // Renvoyer erreur + $this->app->setOutput("Error", "Image doesn't exist"); } $members = $image->listMembers(); if($member == null){ // if the image don't exists -> error - // Renvoyer erreur + $this->app->setOutput("Error", "No member"); } }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); @@ -500,10 +496,10 @@ class image implements Core{ **/ private function detailMemberImage($image_id, $member_id){ if(!isset($image_id)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect parameter image_id"); } if(!isset($member_id)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect parameter member_id"); } try{ // vérifier existence image @@ -513,12 +509,12 @@ class image implements Core{ $image = $service->getImage($id); if($image == null){ // if the image don't exists -> error - // Renvoyer erreur + $this->app->setOutput("Error", "Image doesn't exist"); } $member = $image->getMember($member_id); - if($member == null){ // if the image don't exists -> error - // Renvoyer erreur + if($member == null){ // if the member don't exists -> error + $this->app->setOutput("Error", "Member doesn't exist"); } }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); @@ -543,24 +539,21 @@ class image implements Core{ **/ private function removeMemberImage($image_id, $member_id){ if(!isset($image_id)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect parameter image_id"); } if(!isset($member_id)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect parameter member_id"); } try{ - // vérifier existence image - // on doit être le proprio de l'image - // vérifier membre existe $service = $this->libClass; $image = $service->getImage($id); if($image == null){ // if the image don't exists -> error - // Renvoyer erreur + $this->app->setOutput("Error", "Image doesn't exist"); } $member = $image->getMember($member_id); if($member == null){ // if the image don't exists -> error - // Renvoyer erreur + $this->app->setOutput("Error", "Member doesn't exist"); } $member->delete(); }catch(BadResponseError $e){ @@ -588,24 +581,21 @@ class image implements Core{ **/ private function updateMemberImage($image_id, $member_id, $status){ if(!isset($image_id)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect parameter image_id"); } if(!isset($member_id)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect parameter member_id"); } try{ - // vérifier existence image - // on doit être le proprio de l'image - // vérifier membre existe $service = $this->libClass; $image = $service->getImage($id); if($image == null){ // if the image don't exists -> error - // Renvoyer erreur + $this->app->setOutput("Error", "Image doesn't exist"); } $member = $image->getMember($member_id); - if($member == null){ // if the image don't exists -> error - // Renvoyer erreur + if($member == null){ // if the member don't exists -> error + $this->app->setOutput("Error", "Member doesn't exist"); } $member->updateStatus($status); }catch(BadResponseError $e){ From 671f03df988218444d5cd889705521415bf14d13 Mon Sep 17 00:00:00 2001 From: Yoggzo Date: Wed, 2 Mar 2016 13:01:51 +0100 Subject: [PATCH 10/28] try to resolve token pb --- server/Test/imageTests.php | 2 +- server/core/Image.php | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/server/Test/imageTests.php b/server/Test/imageTests.php index d21eefb..1bb834b 100644 --- a/server/Test/imageTests.php +++ b/server/Test/imageTests.php @@ -18,7 +18,7 @@ $opt['minRam'] = 10; //Liste des images $images = $image->action("listImage"); - +//$images = $image->listImage(); if(isset($images)){ echo "Images présentes :"; echo "
    "; diff --git a/server/core/Image.php b/server/core/Image.php index 4025595..e341fe0 100644 --- a/server/core/Image.php +++ b/server/core/Image.php @@ -14,6 +14,8 @@ use OpenStack\Common\Error\BaseError; use OpenStack\Common\Error\NotImplementedError; use OpenStack\Common\Error\UserInputError; +include("CoreInterface.php"); + /** * Image Class of the back-end application * From 0161194d08050877e958cab885e7c335f2cca2d9 Mon Sep 17 00:00:00 2001 From: Yoggzo Date: Wed, 2 Mar 2016 15:28:09 +0100 Subject: [PATCH 11/28] pb resolu --- server/Test/imageTests.php | 9 ++++++--- server/core/Image.php | 8 ++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/server/Test/imageTests.php b/server/Test/imageTests.php index 1bb834b..a8f16ce 100644 --- a/server/Test/imageTests.php +++ b/server/Test/imageTests.php @@ -17,14 +17,17 @@ $opt['minRam'] = 10; //$new_image = $image->createImage($opt); //Liste des images -$images = $image->action("listImage"); +$image->action("listImage"); //$images = $image->listImage(); +$im = $App->show(); +error_log(var_export(json_decode($im, true), true), 0); +$images = json_decode($im, true)["Images"]; if(isset($images)){ echo "Images présentes :"; echo "
    "; foreach($images as $i){ - echo $i->name; - if($i->name == "Test"){ + echo $i['name']; + if($i['name'] == "Test"){ $id_image = $i->id; $list = $i->tags; echo $i->status; diff --git a/server/core/Image.php b/server/core/Image.php index e341fe0..6bc2dbd 100644 --- a/server/core/Image.php +++ b/server/core/Image.php @@ -153,7 +153,11 @@ class image implements Core{ */ private function listImage(){ try{ + $result = array(); $l = $this->libClass->listImages(); + foreach($l as $tmp) + $result[] = $tmp; + error_log(var_export($result, true), 0); if(!isset($l)){ // if the list is empty there is no images $this->app->setOutput("Error", "No image"); } @@ -166,8 +170,8 @@ class image implements Core{ }catch(NotImplementedError $e){ $this->app->getErrorInstance->NotImplementedHandler($e); } - return $l; - + //return $l; + $this->app->setOutput("Images", $result); } /** From 66baa3ffc8bd119558eeb1e87cb05c6008df9d6f Mon Sep 17 00:00:00 2001 From: Yoggzo Date: Wed, 2 Mar 2016 15:58:17 +0100 Subject: [PATCH 12/28] Architecture mofification --- server/Test/imageTests.php | 6 ---- server/core/Image.php | 67 ++++++++++++++++++++++++-------------- 2 files changed, 43 insertions(+), 30 deletions(-) diff --git a/server/Test/imageTests.php b/server/Test/imageTests.php index a8f16ce..3af12fc 100644 --- a/server/Test/imageTests.php +++ b/server/Test/imageTests.php @@ -20,18 +20,12 @@ $opt['minRam'] = 10; $image->action("listImage"); //$images = $image->listImage(); $im = $App->show(); -error_log(var_export(json_decode($im, true), true), 0); $images = json_decode($im, true)["Images"]; if(isset($images)){ echo "Images présentes :"; echo "
    "; foreach($images as $i){ echo $i['name']; - if($i['name'] == "Test"){ - $id_image = $i->id; - $list = $i->tags; - echo $i->status; - } echo "
    "; } echo "
    "; diff --git a/server/core/Image.php b/server/core/Image.php index 6bc2dbd..ddd8390 100644 --- a/server/core/Image.php +++ b/server/core/Image.php @@ -79,6 +79,7 @@ class image implements Core{ * **/ private function createImage(array $opt){ + $opt = $this->app->getPostParam("opt"); if(!isset($opt)){ $this->app->setOutput("Error", "Incorrect parameter"); @@ -143,7 +144,7 @@ class image implements Core{ }catch(NotImplementedError $e){ $this->app->getErrorInstance->NotImplementedHandler($e); } - return $image; + $this->app->setOutput("Images", $image); } /** @@ -155,11 +156,8 @@ class image implements Core{ try{ $result = array(); $l = $this->libClass->listImages(); - foreach($l as $tmp) + foreach($l as $tmp){ $result[] = $tmp; - error_log(var_export($result, true), 0); - if(!isset($l)){ // if the list is empty there is no images - $this->app->setOutput("Error", "No image"); } }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); @@ -170,7 +168,6 @@ class image implements Core{ }catch(NotImplementedError $e){ $this->app->getErrorInstance->NotImplementedHandler($e); } - //return $l; $this->app->setOutput("Images", $result); } @@ -181,9 +178,10 @@ class image implements Core{ * identifier of the image * **/ - private function detailsImage($id){ + private function detailsImage(){ + $id = $this->app->getPostParam("id"); if(!isset($id)){ - // Renvoyer erreur + $this->app->setOutput("Error", "Incorrect id parameter"); } try{ $service = $this->libClass; @@ -191,8 +189,7 @@ class image implements Core{ if($image == null){ // if the image don't exists -> error $this->app->setOutput("Error", "Image doesn't exist"); } - - return $image; + $this->app->setOutput("Images", $image); }catch(BadResponseError $e){ $this->app->getErrorInstance()->BadResponseHandler($e); }catch(UserInputError $e){ @@ -213,7 +210,9 @@ class image implements Core{ * @param array $opt * options for the image creation **/ - private function updateImage($id, array $opt){ + private function updateImage(){ + $id = $this->app->getPostParam("id"); + $opt = $this->app->getPostParam("opt"); if(!isset($id)){ $this->app->setOutput("Error", "Incorrect id parameter"); } @@ -260,7 +259,7 @@ class image implements Core{ }catch(NotImplementedError $e){ $this->app->getErrorInstance->NotImplementedHandler($e); } - return $image; + $this->app->setOutput("Images", $image); } /** @@ -269,9 +268,10 @@ class image implements Core{ * @param string $id * identifier of the image **/ - private function deleteImage($id){ + private function deleteImage(){ // si protected = true, demander de le mettre a false // vérifier existence image + $id = $this->app->getPostParam("id"); if(!isset($id)){ $this->app->setOutput("Error", "Image doesn't exist"); } @@ -291,8 +291,7 @@ class image implements Core{ $this->app->getErrorInstance->BaseErrorHandler($e); }catch(NotImplementedError $e){ $this->app->getErrorInstance->NotImplementedHandler($e); - } - + } } /** @@ -301,7 +300,8 @@ class image implements Core{ * @param string $id * identifier of the image **/ - private function reactivateImage($id){ + private function reactivateImage(){ + $id = $this->app->getPostParam("id"); if(!isset($id)){ $this->app->setOutput("Error", "Incorrect parameter"); } @@ -330,7 +330,8 @@ class image implements Core{ * @param string $id * identifier of the image **/ - private function desactivateImage($id){ + private function desactivateImage(){ + $id = $this->app->getPostParam("id"); if(!isset($id)){ $this->app->setOutput("Error", "Incorrect parameter"); } @@ -363,6 +364,9 @@ class image implements Core{ * path of the image **/ private function uploadImage($id, $file_name){ + $id = $this->app->getPostParam("id"); + $file_name = $this->app->getPostParam("file_name"); + if(!isset($id)){ $this->app->setOutput("Error", "Incorrect id parameter"); } @@ -396,6 +400,7 @@ class image implements Core{ * identifier of the image **/ private function downloadImage($id){ + $id = $this->app->getPostParam("id"); if(!isset($id)){ $this->app->setOutput("Error", "Incorrect parameter"); } @@ -416,7 +421,7 @@ class image implements Core{ }catch(NotImplementedError $e){ $this->app->getErrorInstance->NotImplementedHandler($e); } - return $stream; + $this->app->setOutput("Images", $stream); } /** @@ -428,7 +433,10 @@ class image implements Core{ * @param string $member_id * identifier of the member **/ - private function addMemberImage($image_id, $member_id){ + private function addMemberImage(){ + $image_id = $this->app->getPostParam("image_id"); + $member_id = $this->app->getPostParam("member_id"); + if(!isset($image_id)){ $this->app->setOutput("Error", "Incorrect parameter image_id"); } @@ -461,7 +469,9 @@ class image implements Core{ * @param string $image_id * identifier of the image **/ - private function listMemberImage($image_id, $member_id){ + private function listMemberImage(){ + $image_id = $this->app->getPostParam("image_id"); + $member_id = $this->app->getPostParam("member_id"); if(!isset($image_id)){ $this->app->setOutput("Error", "Incorrect parameter image_id"); } @@ -488,7 +498,7 @@ class image implements Core{ }catch(NotImplementedError $e){ $this->app->getErrorInstance->NotImplementedHandler($e); } - return $members; + $this->app->setOutput("Images", $member); } /** @@ -500,7 +510,9 @@ class image implements Core{ * @param string $member_id * identifier of the member **/ - private function detailMemberImage($image_id, $member_id){ + private function detailMemberImage(){ + $image_id = $this->app->getPostParam("image_id"); + $member_id = $this->app->getPostParam("member_id"); if(!isset($image_id)){ $this->app->setOutput("Error", "Incorrect parameter image_id"); } @@ -531,7 +543,7 @@ class image implements Core{ }catch(NotImplementedError $e){ $this->app->getErrorInstance->NotImplementedHandler($e); } - return $member; + $this->app->setOutput("Images", $member); } /** @@ -543,7 +555,10 @@ class image implements Core{ * @param string $member_id * identifier of the member **/ - private function removeMemberImage($image_id, $member_id){ + private function removeMemberImage(){ + $image_id = $this->app->getPostParam("image_id"); + $member_id = $this->app->getPostParam("member_id"); + if(!isset($image_id)){ $this->app->setOutput("Error", "Incorrect parameter image_id"); } @@ -586,6 +601,10 @@ class image implements Core{ * new status for the member **/ private function updateMemberImage($image_id, $member_id, $status){ + $image_id = $this->app->getPostParam("image_id"); + $member_id = $this->app->getPostParam("member_id"); + $status = $this->app->getPostParam("status"); + if(!isset($image_id)){ $this->app->setOutput("Error", "Incorrect parameter image_id"); } From f4e59ee82c5947496d1810d53483c5a0afd57fe8 Mon Sep 17 00:00:00 2001 From: stupidon Date: Sat, 5 Mar 2016 13:58:52 +0100 Subject: [PATCH 13/28] - added more details in the listServers, listImages, listFlavors functions - updated all functions to provide basic error-handling - defined updateServer and deleteServer --- server/core/Compute.php | 111 +++++++++++++++++++++++++++++++++------- 1 file changed, 93 insertions(+), 18 deletions(-) diff --git a/server/core/Compute.php b/server/core/Compute.php index a5b8375..4a50f4a 100644 --- a/server/core/Compute.php +++ b/server/core/Compute.php @@ -12,11 +12,11 @@ class compute protected $libClass; - public function __construct($app) - { - $this->app = $app; - $this->libClass = $app->getLibClass("Compute"); - } + public function __construct($app) + { + $this->app = $app; + $this->libClass = $app->getLibClass("Compute"); + } /** * Execute an action * @@ -41,13 +41,26 @@ class compute $servers[$server->id] = Array(); $server->flavor->retrieve(); $server->image->retrieve(); + $server->retrieve(); $servers[$server->id]["id"] = $server->id; $servers[$server->id]["name"] = $server->name; - $servers[$server->id]["imageId"] = $server->image->id; - $servers[$server->id]["flavorId"] = $server->flavor->id; - $servers[$server->id]["status"] = $server->status; + $servers[$server->id]["image"] = $server->image; $servers[$server->id]["ram"] = $server->flavor->ram; $servers[$server->id]["disk"] = $server->flavor->disk; + $servers[$server->id]["flavor"] = $server->flavor; + $servers[$server->id]["status"] = $server->status; + $servers[$server->id]["created"] = $server->created; + $servers[$server->id]["updated"] = $server->updated; + $servers[$server->id]["ipv4"] = $server->ipv4; + $servers[$server->id]["ipv6"] = $server->ipv6; + $servers[$server->id]["progress"] = $server->progress; + $servers[$server->id]["hostId"] = $server->hostId; + $servers[$server->id]["tenantId"] = $server->tenantId; + $servers[$server->id]["userId"] = $server->userId; + $servers[$server->id]["taskState"] = $server->taskState; + $servers[$server->id]["addresses"] = $server->addresses; + $servers[$server->id]["links"] = $server->links; + $servers[$server->id]["metadata"] = $server->metadata; } $this->app->setOutput("Servers", $servers); return; @@ -62,8 +75,13 @@ class compute $flavors = Array(); foreach($flavorList as $flavor){ $flavors[$flavor->id] = Array(); + $flavor->retrieve(); $flavors[$flavor->id]["id"] = $flavor->id; $flavors[$flavor->id]["name"] = $flavor->name; + $flavors[$flavor->id]["ram"] = $flavor->ram; + $flavors[$flavor->id]["disk"] = $flavor->disk; + $flavors[$flavor->id]["vcpus"] = $flavor->vcpus; + $flavors[$flavor->id]["links"] = $flavor->links; } $this->app->setOutput("Flavors", $flavors); return; @@ -78,8 +96,17 @@ class compute $images = Array(); foreach($imageList as $image){ $images[$image->id] = Array(); + $image->retrieve(); $images[$image->id]["id"] = $image->id; $images[$image->id]["name"] = $image->name; + $images[$image->id]["status"] = $image->status; + $images[$image->id]["created"] = $image->created; + $images[$image->id]["updated"] = $image->updated; + $images[$image->id]["minDisk"] = $image->minDisk; + $images[$image->id]["minRam"] = $image->minRam; + $images[$image->id]["progress"] = $image->progress; + $images[$image->id]["links"] = $image->links; + $images[$image->id]["metadata"] = $image->metadata; } $this->app->setOutput("Images", $images); return; @@ -87,11 +114,18 @@ class compute /** * Create server. * @return array - * + */ public function createServer() { - - $server = $this->libClass->createServer(); + $name = $this->app->getPostParam("name"); + $imageId = $this->app->getPostParam("imageId"); + $flavorId = $this->app->getPostParam("flavorId"); + if(!isset($name) || !isset($imageId) || !isset($flavorId)){ + $this->app->setOutput("Error", "No, we don't let you create a server without a name OR image ID OR flavor ID."); + return; + } + $opt = array('name' => $name, 'imageId' => $imageId, 'flavorId' => $flavorId); + $server = $this->libClass->createServer($opt); } */ /** @@ -101,6 +135,10 @@ class compute public function getServer() { $serverId = $this->app->getPostParam("serverId"); + if(!isset($serverId)){ + $this->app->setOutput("Error", "Server ID is missing, son!"); + return; + } $opt = array('id' => $serverId); $server = $this->libClass->getServer($opt); $server->retrieve(); @@ -114,6 +152,10 @@ class compute public function getFlavor() { $flavorId = $this->app->getPostParam("flavorId"); + if(!isset($serverId)){ + $this->app->setOutput("Error", "Flavor ID is missing, son!"); + return; + } $opt = array('id' => $flavorId); $flavor = $this->libClass->getFlavor($opt); $flavor->retrieve(); @@ -127,23 +169,56 @@ class compute public function getImage() { $imageId = $this->app->getPostParam("imageId"); + if(!isset($serverId)){ + $this->app->setOutput("Error", "Image ID is missing, son!"); + return; + } $opt = array('id' => $imageId); $image = $this->libClass->getImage($opt); $image->retrieve(); $this->app->setOutput("MyImage", $image); return; } - /* working on tests - - public function update() + public function updateServer() { - $image = $this->app->getServer(array $options = []); - + $serverId = $this->app->getPostParam("serverId"); + $newName = $this->app->getPostParam("newName"); + $newIpv4 = $this->app->getPostParam("newIpv4"); + $newIpv6 = $this->app->getPostParam("newIpv6"); + if(!isset($serverId)|| !(isset($newName) || isset($newIpv4) || isset($newIpv6)) ){ + $this->app->setOutput("Error", "You'll have to provide server ID and the new attribute(IP(v4/v6)/Name) you desire to update!"); + return; + } + $opt = array('id' => $serverId); + $server = $this->libClass->getServer($opt); + if (isset($newName)){ + if(isset($newIpv4)){ + if(isset($newIpv6){ + $attr = array('name' => $newName, 'accessIPv4' => $newIPv4, 'accessIPv6' => $newIpv6); + } + $attr = array('name' => $newName, 'accessIPv4' => $newIPv4); + } + $attr = array('name' => $newName); + } + $server->update($attr); + $this->app->setOutput("Success", $serverId." has been updated successfully."); + return; } - public function delete() + */ + public function deleteServer() { - //TODO + $serverId = $this->app->getPostParam("serverId"); + if(!isset($serverId)){ + $this->app->setOutput("Error", "Server ID is missing, son!"); + return; + } + $opt = array('id' => $serverId); + $server = $this->libClass->getServer($opt); + $server->delete(); + $this->app->setOutput("Success", $serverId." has been deleted successfully."); + return; } + /* public function changePassword($newPassword) { //TODO From c43e532f766c3f97a34e6fad3dd990f7992e710b Mon Sep 17 00:00:00 2001 From: stupidon Date: Sat, 5 Mar 2016 14:05:52 +0100 Subject: [PATCH 14/28] added createServer and corrected certain minor bugs --- server/core/Compute.php | 43 ++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/server/core/Compute.php b/server/core/Compute.php index 4a50f4a..8524c86 100644 --- a/server/core/Compute.php +++ b/server/core/Compute.php @@ -111,24 +111,7 @@ class compute $this->app->setOutput("Images", $images); return; } - /** - * Create server. - * @return array - */ - public function createServer() - { - $name = $this->app->getPostParam("name"); - $imageId = $this->app->getPostParam("imageId"); - $flavorId = $this->app->getPostParam("flavorId"); - if(!isset($name) || !isset($imageId) || !isset($flavorId)){ - $this->app->setOutput("Error", "No, we don't let you create a server without a name OR image ID OR flavor ID."); - return; - } - $opt = array('name' => $name, 'imageId' => $imageId, 'flavorId' => $flavorId); - $server = $this->libClass->createServer($opt); - } - */ - /** + /** * Get server details. * @return array */ @@ -179,6 +162,27 @@ class compute $this->app->setOutput("MyImage", $image); return; } + /** + * Create server. + * @return array + */ + public function createServer() + { + $name = $this->app->getPostParam("name"); + $imageId = $this->app->getPostParam("imageId"); + $flavorId = $this->app->getPostParam("flavorId"); + if(!isset($name) || !isset($imageId) || !isset($flavorId)){ + $this->app->setOutput("Error", "No, we don't let you create a server without a name OR image ID OR flavor ID."); + return; + } + $opt = array('name' => $name, 'imageId' => $imageId, 'flavorId' => $flavorId); + $server = $this->libClass->createServer($opt); + } + + /** + * update a server + * @return void + */ public function updateServer() { $serverId = $this->app->getPostParam("serverId"); @@ -204,6 +208,9 @@ class compute $this->app->setOutput("Success", $serverId." has been updated successfully."); return; } + /** + * Delete a server + * @return void */ public function deleteServer() { From dad2e1de334b6c8d9e579a0f75272d8661ed2aa3 Mon Sep 17 00:00:00 2001 From: stupidon Date: Sat, 5 Mar 2016 14:12:27 +0100 Subject: [PATCH 15/28] corrected syntax errors --- server/core/Compute.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/core/Compute.php b/server/core/Compute.php index 8524c86..d134b94 100644 --- a/server/core/Compute.php +++ b/server/core/Compute.php @@ -200,9 +200,9 @@ class compute if(isset($newIpv6){ $attr = array('name' => $newName, 'accessIPv4' => $newIPv4, 'accessIPv6' => $newIpv6); } - $attr = array('name' => $newName, 'accessIPv4' => $newIPv4); + else $attr = array('name' => $newName, 'accessIPv4' => $newIPv4); } - $attr = array('name' => $newName); + else $attr = array('name' => $newName); } $server->update($attr); $this->app->setOutput("Success", $serverId." has been updated successfully."); From eb37fe6b4868b280a8173c57500e1cfd3f77c7e7 Mon Sep 17 00:00:00 2001 From: stupidon Date: Sun, 6 Mar 2016 13:50:17 +0100 Subject: [PATCH 16/28] syntax correction --- server/core/Compute.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/core/Compute.php b/server/core/Compute.php index d134b94..f02eb8b 100644 --- a/server/core/Compute.php +++ b/server/core/Compute.php @@ -197,7 +197,7 @@ class compute $server = $this->libClass->getServer($opt); if (isset($newName)){ if(isset($newIpv4)){ - if(isset($newIpv6){ + if(isset($newIpv6)){ $attr = array('name' => $newName, 'accessIPv4' => $newIPv4, 'accessIPv6' => $newIpv6); } else $attr = array('name' => $newName, 'accessIPv4' => $newIPv4); From 3454c71f0523bd6957e10873d0b95bc191b2f283 Mon Sep 17 00:00:00 2001 From: manzerbredes Date: Sun, 6 Mar 2016 14:42:50 +0100 Subject: [PATCH 17/28] Test request --- client/js/controllers/home/home.js | 5 +++-- client/js/services/Image.js | 14 ++++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/client/js/controllers/home/home.js b/client/js/controllers/home/home.js index f84f625..18133fa 100644 --- a/client/js/controllers/home/home.js +++ b/client/js/controllers/home/home.js @@ -3,7 +3,7 @@ * * @param {$scope} $scope The $scope service from angular */ -mainApp.controller('homeCtrl', [ '$scope', 'Compute', '$rootScope', 'Loading','Identity', function ($scope, Compute, $rootScope, Loading, Identity) +mainApp.controller('homeCtrl', [ '$scope', 'Compute', '$rootScope', 'Loading','Identity', 'Image', function ($scope, Compute, $rootScope, Loading, Identity, Image) { var callMeAfterPullData=function(data){ @@ -17,7 +17,8 @@ mainApp.controller('homeCtrl', [ '$scope', 'Compute', '$rootScope', 'Loading','I Compute.pullData(callMeAfterPullData); } - + + Image.getImages(function(){}); $scope.raiseShowMachineDetailsEvent=function(id){ diff --git a/client/js/services/Image.js b/client/js/services/Image.js index 23b33a8..eccd4af 100644 --- a/client/js/services/Image.js +++ b/client/js/services/Image.js @@ -4,16 +4,22 @@ mainApp.factory('Image',[ '$http', 'Identity', function($http, Identity){ var parseUploadImageAnswer=function(response, failedToSendRequest){ - + console.log(response.data.Images[0]) }; var getImages=function(callback){ var result=$http.post('../server/index.php', - $.param({"token" : Identity.profile.token, "task" : "Image"})); + $.param({"token" : Identity.getToken(), "task" : "image", 'action':'listImage'})); + + // Wait and handle the response + result.then(function (response){ + callback(parseUploadImageAnswer(response, false)); + },function(response){ + callback(parseUploadImageAnswer(response, true)); + }); - }; @@ -21,7 +27,7 @@ mainApp.factory('Image',[ '$http', 'Identity', function($http, Identity){ // Return services objects return { - uploadImage: uploadImage + getImages:getImages }; From 96094547dd793868092dda4c2699a839287fa175 Mon Sep 17 00:00:00 2001 From: manzerbredes Date: Sun, 6 Mar 2016 14:51:50 +0100 Subject: [PATCH 18/28] Add image view, controller. --- client/index.html | 1 + client/js/app.js | 8 ++++++-- client/js/controllers/image/image.js | 9 +++++++++ client/partials/home/{main.html => home.html} | 0 client/partials/image/image.html | 8 ++++++++ client/partials/menu.html | 3 ++- client/partials/network/{main.html => network.html} | 0 7 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 client/js/controllers/image/image.js rename client/partials/home/{main.html => home.html} (100%) create mode 100644 client/partials/image/image.html rename client/partials/network/{main.html => network.html} (100%) diff --git a/client/index.html b/client/index.html index 48ea4a0..a06994c 100644 --- a/client/index.html +++ b/client/index.html @@ -89,6 +89,7 @@ + diff --git a/client/js/app.js b/client/js/app.js index e2d5b9b..1602e65 100644 --- a/client/js/app.js +++ b/client/js/app.js @@ -13,12 +13,16 @@ mainApp.config(['$routeProvider', function($routeProvider){ $routeProvider. when('/home',{ - templateUrl: 'partials/home/main.html', + templateUrl: 'partials/home/home.html', controller: 'homeCtrl' }). when('/network',{ - templateUrl: 'partials/network/main.html', + templateUrl: 'partials/network/network.html', controller: 'networkCtrl' + }). + when('/image',{ + templateUrl: 'partials/image/image.html', + controller: 'imageCtrl' }).otherwise({ redirectTo: '/home' }); diff --git a/client/js/controllers/image/image.js b/client/js/controllers/image/image.js new file mode 100644 index 0000000..036dec3 --- /dev/null +++ b/client/js/controllers/image/image.js @@ -0,0 +1,9 @@ +/** + * The image controller + * + * @param {$scope} $scope The $scope service from angular + */ +mainApp.controller('imageCtrl', function ($scope) +{ + $scope.title="Test"; +}); diff --git a/client/partials/home/main.html b/client/partials/home/home.html similarity index 100% rename from client/partials/home/main.html rename to client/partials/home/home.html diff --git a/client/partials/image/image.html b/client/partials/image/image.html new file mode 100644 index 0000000..586f003 --- /dev/null +++ b/client/partials/image/image.html @@ -0,0 +1,8 @@ +
    +
    + Image +
    +
    + Main Content +
    +
    diff --git a/client/partials/menu.html b/client/partials/menu.html index dfd5842..a473fd8 100644 --- a/client/partials/menu.html +++ b/client/partials/menu.html @@ -1,4 +1,5 @@ \ No newline at end of file + Images + diff --git a/client/partials/network/main.html b/client/partials/network/network.html similarity index 100% rename from client/partials/network/main.html rename to client/partials/network/network.html From b0b2dc9a6451fc1a2d41b255600094da1ece6485 Mon Sep 17 00:00:00 2001 From: manzerbredes Date: Sun, 6 Mar 2016 15:04:47 +0100 Subject: [PATCH 19/28] Avalaible images can be display --- client/js/controllers/image/image.js | 10 +++++++--- client/js/services/Image.js | 29 ++++++++++++++++++++++++++-- client/partials/image/image.html | 8 +++++--- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/client/js/controllers/image/image.js b/client/js/controllers/image/image.js index 036dec3..a8346b3 100644 --- a/client/js/controllers/image/image.js +++ b/client/js/controllers/image/image.js @@ -3,7 +3,11 @@ * * @param {$scope} $scope The $scope service from angular */ -mainApp.controller('imageCtrl', function ($scope) +mainApp.controller('imageCtrl', ['$scope', 'Image', function ($scope, Image) { - $scope.title="Test"; -}); + var callbackTest=function(){ + $scope.images=Image.getData().images; + }; + + Image.getImages(callbackTest); +}]); diff --git a/client/js/services/Image.js b/client/js/services/Image.js index eccd4af..2e8c56f 100644 --- a/client/js/services/Image.js +++ b/client/js/services/Image.js @@ -1,10 +1,31 @@ mainApp.factory('Image',[ '$http', 'Identity', function($http, Identity){ + var data={}; + data.images=null; var parseUploadImageAnswer=function(response, failedToSendRequest){ - console.log(response.data.Images[0]) + + // Defined return object + var requestParserResult={}; + requestParserResult.status=1; + requestParserResult.failReason=null; + + + if (typeof response.data.Images !== 'undefined') { + // Set status code + requestParserResult.status=0; + data.images=response.data.Images; + + } + else if(failedToSendRequest){ + requestParserResult.failReason="Failed to send request"; + } + else{ + requestParserResult.failReason="Error"; + } + return requestParserResult; }; @@ -24,10 +45,14 @@ mainApp.factory('Image',[ '$http', 'Identity', function($http, Identity){ }; + var getData=function(response){ + return data; + }; // Return services objects return { - getImages:getImages + getImages:getImages, + getData:getData }; diff --git a/client/partials/image/image.html b/client/partials/image/image.html index 586f003..8af8af5 100644 --- a/client/partials/image/image.html +++ b/client/partials/image/image.html @@ -1,8 +1,10 @@ -
    +
    - Image + Images disponibles
    - Main Content +
    + {{image.name}} +
    From 3b569b6d008d5b1936ee04948cf5c1cc08790f39 Mon Sep 17 00:00:00 2001 From: manzerbredes Date: Sun, 6 Mar 2016 15:10:34 +0100 Subject: [PATCH 20/28] Make some test --- client/js/controllers/home/home.js | 5 +++++ client/js/controllers/image/image.js | 12 ++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/client/js/controllers/home/home.js b/client/js/controllers/home/home.js index 18133fa..4402e62 100644 --- a/client/js/controllers/home/home.js +++ b/client/js/controllers/home/home.js @@ -16,6 +16,11 @@ mainApp.controller('homeCtrl', [ '$scope', 'Compute', '$rootScope', 'Loading','I Loading.start(); Compute.pullData(callMeAfterPullData); } + else{ + if(Identity.isAlreadyLogin()){ + callMeAfterPullData(); + } + } Image.getImages(function(){}); diff --git a/client/js/controllers/image/image.js b/client/js/controllers/image/image.js index a8346b3..e298fcc 100644 --- a/client/js/controllers/image/image.js +++ b/client/js/controllers/image/image.js @@ -3,11 +3,19 @@ * * @param {$scope} $scope The $scope service from angular */ -mainApp.controller('imageCtrl', ['$scope', 'Image', function ($scope, Image) +mainApp.controller('imageCtrl', ['$scope', 'Image', 'Loading', function ($scope, Image, Loading) { var callbackTest=function(){ $scope.images=Image.getData().images; + Loading.stop(); }; - Image.getImages(callbackTest); + if(Image.getData().images==null){ + Loading.start(); + Image.getImages(callbackTest); + } + else{ + callbackTest(); + } + }]); From 78a4f8574fb074fef30b2a646c052f68743ee37e Mon Sep 17 00:00:00 2001 From: Yoggzo Date: Wed, 9 Mar 2016 14:31:14 +0100 Subject: [PATCH 21/28] modif in image constructor --- server/core/Image.php | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/server/core/Image.php b/server/core/Image.php index ddd8390..426cf9d 100644 --- a/server/core/Image.php +++ b/server/core/Image.php @@ -43,18 +43,8 @@ class image implements Core{ if(!isset($app)){ $this->app->setOutput("Error", "Incorrect parameter"); } - try{ - $this->app = $app; - $this->libClass = $app->getLibClass("Image"); - }catch(BadResponseError $e){ - $this->app->getErrorInstance()->BadResponseHandler($e); - }catch(UserInputError $e){ - $this->app->getErrorInstance->UserInputHandler($e); - }catch(BaseError $e){ - $this->app->getErrorInstance->BaseErrorHandler($e); - }catch(NotImplementedError $e){ - $this->app->getErrorInstance->NotImplementedHandler($e); - } + $this->app = $app; + $this->libClass = $app->getLibClass("Image"); } From 73c33feded940dcfc542b54394cd1e3efd9ba9d7 Mon Sep 17 00:00:00 2001 From: Yoggzo Date: Wed, 9 Mar 2016 14:35:08 +0100 Subject: [PATCH 22/28] modifs on Image constructor --- server/core/Image.php | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/server/core/Image.php b/server/core/Image.php index ddd8390..426cf9d 100644 --- a/server/core/Image.php +++ b/server/core/Image.php @@ -43,18 +43,8 @@ class image implements Core{ if(!isset($app)){ $this->app->setOutput("Error", "Incorrect parameter"); } - try{ - $this->app = $app; - $this->libClass = $app->getLibClass("Image"); - }catch(BadResponseError $e){ - $this->app->getErrorInstance()->BadResponseHandler($e); - }catch(UserInputError $e){ - $this->app->getErrorInstance->UserInputHandler($e); - }catch(BaseError $e){ - $this->app->getErrorInstance->BaseErrorHandler($e); - }catch(NotImplementedError $e){ - $this->app->getErrorInstance->NotImplementedHandler($e); - } + $this->app = $app; + $this->libClass = $app->getLibClass("Image"); } From c8d1eeda92d2c4720dc495313a1006ec81510693 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 9 Mar 2016 15:21:46 +0100 Subject: [PATCH 23/28] MAJ Library --- server/core/App.php | 8 ++++---- server/core/ErrorManagement.php | 10 +++++----- server/core/Identity.php | 2 +- server/core/LibOverride/genTokenOptions.php | 8 ++++---- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/server/core/App.php b/server/core/App.php index edb75f6..ceda7c9 100755 --- a/server/core/App.php +++ b/server/core/App.php @@ -3,10 +3,10 @@ include_once("core/Plugin_Api.php"); include_once("core/LibOverride/genTokenOptions.php"); include_once("core/ErrorManagement.php"); -use OpenStack\Common\Error\BadResponseError; -use OpenStack\Common\Error\BaseError; -use OpenStack\Common\Error\NotImplementedError; -use OpenStack\Common\Error\UserInputError; +use OpenCloud\Common\Error\BadResponseError; +use OpenCloud\Common\Error\BaseError; +use OpenCloud\Common\Error\NotImplementedError; +use OpenCloud\Common\Error\UserInputError; class App{ diff --git a/server/core/ErrorManagement.php b/server/core/ErrorManagement.php index 6bff61f..4ba3493 100755 --- a/server/core/ErrorManagement.php +++ b/server/core/ErrorManagement.php @@ -1,9 +1,9 @@ \ No newline at end of file +?> diff --git a/server/core/Identity.php b/server/core/Identity.php index 2638985..7100c9f 100755 --- a/server/core/Identity.php +++ b/server/core/Identity.php @@ -9,7 +9,7 @@ * * @todo Complete the functions and finish the descriptions */ -use OpenStack\Common\Error; +use OpenCloud\Common\Error; /** * Identity Class of the back-end application diff --git a/server/core/LibOverride/genTokenOptions.php b/server/core/LibOverride/genTokenOptions.php index 50826ed..18d880f 100755 --- a/server/core/LibOverride/genTokenOptions.php +++ b/server/core/LibOverride/genTokenOptions.php @@ -1,12 +1,12 @@ Date: Wed, 9 Mar 2016 15:26:01 +0100 Subject: [PATCH 24/28] solve syntax error --- server/core/Image.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/core/Image.php b/server/core/Image.php index 426cf9d..b21073b 100644 --- a/server/core/Image.php +++ b/server/core/Image.php @@ -68,7 +68,7 @@ class image implements Core{ * options for the image creation * **/ - private function createImage(array $opt){ + private function createImage(){ $opt = $this->app->getPostParam("opt"); if(!isset($opt)){ From d69adc4f9d1f6019927de235ef84885c68e6e508 Mon Sep 17 00:00:00 2001 From: EoleDev Date: Wed, 9 Mar 2016 15:31:02 +0100 Subject: [PATCH 25/28] New library --- server/composer.json | 3 +- server/composer.lock | 54 ++++++++++++++++++++++-- server/vendor/composer/autoload_psr4.php | 3 ++ server/vendor/composer/installed.json | 49 ++++++++++++++++++++- 4 files changed, 103 insertions(+), 6 deletions(-) diff --git a/server/composer.json b/server/composer.json index d5e2dbc..9d44d6e 100644 --- a/server/composer.json +++ b/server/composer.json @@ -1,5 +1,6 @@ { "require": { - "php-opencloud/openstack": "dev-master" + "php-opencloud/openstack": "dev-master", + "php-opencloud/common": "dev-master" } } diff --git a/server/composer.lock b/server/composer.lock index c6598db..4a9581a 100644 --- a/server/composer.lock +++ b/server/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "e7cbd5d3df36fb1a3f3378b837068196", - "content-hash": "125e4702f7a417475a4150c889ac6c3d", + "hash": "7647ed348aee68f2db6b71e4d2fb1fe7", + "content-hash": "82731500d050a65f09e92b70c1f96ea9", "packages": [ { "name": "guzzlehttp/guzzle", @@ -244,6 +244,51 @@ ], "time": "2016-01-25 15:43:01" }, + { + "name": "php-opencloud/common", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-opencloud/common.git", + "reference": "fd027b817c3dd8f83b0c8d9fb1df34ebf25f8c62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-opencloud/common/zipball/fd027b817c3dd8f83b0c8d9fb1df34ebf25f8c62", + "reference": "fd027b817c3dd8f83b0c8d9fb1df34ebf25f8c62", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "~6.1", + "justinrainbow/json-schema": "~1.3", + "php": "~7.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "~1.0", + "jakub-onderka/php-parallel-lint": "0.*", + "phpunit/phpunit": "~4.0", + "psr/log": "~1.0", + "sami/sami": "dev-master", + "satooshi/php-coveralls": "~1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "OpenCloud\\": "src/", + "OpenCloud\\Test\\": "tests/unit/", + "OpenCloud\\Integration\\": "tests/integration/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "authors": [ + { + "name": "Jamie Hannaford", + "email": "jamie.hannaford@rackspace.com", + "homepage": "https://github.com/jamiehannaford" + } + ], + "time": "2016-03-08 12:56:34" + }, { "name": "php-opencloud/openstack", "version": "dev-master", @@ -254,7 +299,7 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-opencloud/openstack/zipball/15aca73f423166c7ef8337ba08615c103c66e931", + "url": "https://api.github.com/repos/php-opencloud/openstack/zipball/f2ee77024843659d970817a9e7055bb40a3724f9", "reference": "15aca73f423166c7ef8337ba08615c103c66e931", "shasum": "" }, @@ -344,7 +389,8 @@ "aliases": [], "minimum-stability": "stable", "stability-flags": { - "php-opencloud/openstack": 20 + "php-opencloud/openstack": 20, + "php-opencloud/common": 20 }, "prefer-stable": false, "prefer-lowest": false, diff --git a/server/vendor/composer/autoload_psr4.php b/server/vendor/composer/autoload_psr4.php index 6c2e482..077c577 100644 --- a/server/vendor/composer/autoload_psr4.php +++ b/server/vendor/composer/autoload_psr4.php @@ -10,6 +10,9 @@ return array( 'OpenStack\\Test\\' => array($vendorDir . '/php-opencloud/openstack/tests/unit'), 'OpenStack\\Integration\\' => array($vendorDir . '/php-opencloud/openstack/tests/integration'), 'OpenStack\\' => array($vendorDir . '/php-opencloud/openstack/src'), + 'OpenCloud\\Test\\' => array($vendorDir . '/php-opencloud/common/tests/unit'), + 'OpenCloud\\Integration\\' => array($vendorDir . '/php-opencloud/common/tests/integration'), + 'OpenCloud\\' => array($vendorDir . '/php-opencloud/common/src'), 'JsonSchema\\' => array($vendorDir . '/justinrainbow/json-schema/src/JsonSchema'), 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'), 'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'), diff --git a/server/vendor/composer/installed.json b/server/vendor/composer/installed.json index 1dfb8d2..70c1b5b 100644 --- a/server/vendor/composer/installed.json +++ b/server/vendor/composer/installed.json @@ -178,7 +178,7 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-opencloud/openstack/zipball/15aca73f423166c7ef8337ba08615c103c66e931", + "url": "https://api.github.com/repos/php-opencloud/openstack/zipball/f2ee77024843659d970817a9e7055bb40a3724f9", "reference": "15aca73f423166c7ef8337ba08615c103c66e931", "shasum": "" }, @@ -342,5 +342,52 @@ "stream", "uri" ] + }, + { + "name": "php-opencloud/common", + "version": "dev-master", + "version_normalized": "9999999-dev", + "source": { + "type": "git", + "url": "https://github.com/php-opencloud/common.git", + "reference": "fd027b817c3dd8f83b0c8d9fb1df34ebf25f8c62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-opencloud/common/zipball/fd027b817c3dd8f83b0c8d9fb1df34ebf25f8c62", + "reference": "fd027b817c3dd8f83b0c8d9fb1df34ebf25f8c62", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "~6.1", + "justinrainbow/json-schema": "~1.3", + "php": "~7.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "~1.0", + "jakub-onderka/php-parallel-lint": "0.*", + "phpunit/phpunit": "~4.0", + "psr/log": "~1.0", + "sami/sami": "dev-master", + "satooshi/php-coveralls": "~1.0" + }, + "time": "2016-03-08 12:56:34", + "type": "library", + "installation-source": "source", + "autoload": { + "psr-4": { + "OpenCloud\\": "src/", + "OpenCloud\\Test\\": "tests/unit/", + "OpenCloud\\Integration\\": "tests/integration/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "authors": [ + { + "name": "Jamie Hannaford", + "email": "jamie.hannaford@rackspace.com", + "homepage": "https://github.com/jamiehannaford" + } + ] } ] From c479658f0bb953ded4b29ca573404a318f1e798f Mon Sep 17 00:00:00 2001 From: EoleDev Date: Wed, 9 Mar 2016 15:36:02 +0100 Subject: [PATCH 26/28] New Library --- server/vendor/php-opencloud/common/.gitignore | 10 + .../vendor/php-opencloud/common/composer.json | 36 ++ .../php-opencloud/common/phpunit.xml.dist | 21 + .../common/src/Common/Api/AbstractApi.php | 33 ++ .../common/src/Common/Api/AbstractParams.php | 100 +++++ .../common/src/Common/Api/ApiInterface.php | 20 + .../common/src/Common/Api/Operation.php | 136 ++++++ .../common/src/Common/Api/Operator.php | 173 ++++++++ .../src/Common/Api/OperatorInterface.php | 51 +++ .../common/src/Common/Api/Parameter.php | 389 ++++++++++++++++++ .../common/src/Common/ArrayAccessTrait.php | 67 +++ .../common/src/Common/Auth/AuthHandler.php | 73 ++++ .../common/src/Common/Auth/Catalog.php | 20 + .../src/Common/Auth/IdentityService.php | 13 + .../common/src/Common/Auth/Token.php | 15 + .../src/Common/Error/BadResponseError.php | 40 ++ .../common/src/Common/Error/BaseError.php | 12 + .../common/src/Common/Error/Builder.php | 179 ++++++++ .../src/Common/Error/NotImplementedError.php | 12 + .../src/Common/Error/UserInputError.php | 12 + .../src/Common/HydratorStrategyTrait.php | 35 ++ .../common/src/Common/JsonPath.php | 119 ++++++ .../src/Common/JsonSchema/JsonPatch.php | 115 ++++++ .../common/src/Common/JsonSchema/Schema.php | 72 ++++ .../src/Common/Resource/AbstractResource.php | 243 +++++++++++ .../common/src/Common/Resource/Creatable.php | 19 + .../common/src/Common/Resource/Deletable.php | 18 + .../src/Common/Resource/HasMetadata.php | 67 +++ .../src/Common/Resource/HasWaiterTrait.php | 124 ++++++ .../common/src/Common/Resource/Iterator.php | 97 +++++ .../common/src/Common/Resource/Listable.php | 28 ++ .../src/Common/Resource/ResourceInterface.php | 29 ++ .../src/Common/Resource/Retrievable.php | 18 + .../common/src/Common/Resource/Updateable.php | 18 + .../src/Common/Service/AbstractService.php | 14 + .../common/src/Common/Service/Builder.php | 170 ++++++++ .../src/Common/Service/ServiceInterface.php | 14 + .../src/Common/Transport/HandlerStack.php | 19 + .../src/Common/Transport/JsonSerializer.php | 95 +++++ .../src/Common/Transport/Middleware.php | 94 +++++ .../Common/Transport/RequestSerializer.php | 85 ++++ .../common/src/Common/Transport/Utils.php | 88 ++++ .../tests/integration/DefaultLogger.php | 20 + .../common/tests/integration/Runner.php | 112 +++++ .../tests/integration/SampleManager.php | 104 +++++ .../integration/SampleManagerInterface.php | 10 + .../common/tests/integration/TestCase.php | 115 ++++++ .../tests/integration/TestInterface.php | 16 + .../common/tests/integration/Utils.php | 59 +++ .../common/tests/integration/run.php | 10 + .../tests/integration/script/compute_v2 | 3 + .../tests/integration/script/identity_v3 | 3 + .../tests/integration/script/networking_v2 | 3 + .../tests/integration/script/objectstore_v2 | 3 + .../tests/unit/Common/Api/OperationTest.php | 74 ++++ .../tests/unit/Common/Api/OperatorTest.php | 137 ++++++ .../tests/unit/Common/Api/ParameterTest.php | 203 +++++++++ .../unit/Common/Api/fixtures/headers.php | 25 ++ .../unit/Common/Api/fixtures/jsonBody.php | 27 ++ .../unit/Common/ArrayAccessTraitTest.php | 59 +++ .../unit/Common/Auth/AuthHandlerTest.php | 59 +++ .../common/tests/unit/Common/DateTime.php | 16 + .../Common/Error/BadResponseErrorTest.php | 34 ++ .../tests/unit/Common/Error/BuilderTest.php | 117 ++++++ .../unit/Common/HydratorStrategyTraitTes.php | 52 +++ .../common/tests/unit/Common/JsonPathTest.php | 70 ++++ .../JsonSchema/Fixtures/jsonPatchTests.json | 231 +++++++++++ .../unit/Common/JsonSchema/JsonPatchTest.php | 28 ++ .../unit/Common/JsonSchema/SchemaTest.php | 102 +++++ .../Common/Resource/AbstractResourceTest.php | 161 ++++++++ .../Resource/Fixtures/servers-empty.resp | 6 + .../Resource/Fixtures/servers-page1.resp | 77 ++++ .../Resource/Fixtures/servers-page2.resp | 77 ++++ .../tests/unit/Common/Service/BuilderTest.php | 164 ++++++++ .../Common/Transport/HandlerStackTest.php | 15 + .../Common/Transport/JsonSerializerTest.php | 85 ++++ .../unit/Common/Transport/MiddlewareTest.php | 59 +++ .../Transport/RequestSerializerTest.php | 112 +++++ .../tests/unit/Common/Transport/UtilsTest.php | 30 ++ .../tests/unit/Fixtures/ComputeV2Api.php | 107 +++++ .../tests/unit/Fixtures/IdentityV2Api.php | 36 ++ .../tests/unit/Fixtures/IdentityV3Api.php | 75 ++++ .../common/tests/unit/TestCase.php | 99 +++++ 83 files changed, 5788 insertions(+) create mode 100644 server/vendor/php-opencloud/common/.gitignore create mode 100644 server/vendor/php-opencloud/common/composer.json create mode 100644 server/vendor/php-opencloud/common/phpunit.xml.dist create mode 100644 server/vendor/php-opencloud/common/src/Common/Api/AbstractApi.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Api/AbstractParams.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Api/ApiInterface.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Api/Operation.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Api/Operator.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Api/OperatorInterface.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Api/Parameter.php create mode 100644 server/vendor/php-opencloud/common/src/Common/ArrayAccessTrait.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Auth/AuthHandler.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Auth/Catalog.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Auth/IdentityService.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Auth/Token.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Error/BadResponseError.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Error/BaseError.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Error/Builder.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Error/NotImplementedError.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Error/UserInputError.php create mode 100644 server/vendor/php-opencloud/common/src/Common/HydratorStrategyTrait.php create mode 100644 server/vendor/php-opencloud/common/src/Common/JsonPath.php create mode 100644 server/vendor/php-opencloud/common/src/Common/JsonSchema/JsonPatch.php create mode 100644 server/vendor/php-opencloud/common/src/Common/JsonSchema/Schema.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Resource/AbstractResource.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Resource/Creatable.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Resource/Deletable.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Resource/HasMetadata.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Resource/HasWaiterTrait.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Resource/Iterator.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Resource/Listable.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Resource/ResourceInterface.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Resource/Retrievable.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Resource/Updateable.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Service/AbstractService.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Service/Builder.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Service/ServiceInterface.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Transport/HandlerStack.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Transport/JsonSerializer.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Transport/Middleware.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Transport/RequestSerializer.php create mode 100644 server/vendor/php-opencloud/common/src/Common/Transport/Utils.php create mode 100644 server/vendor/php-opencloud/common/tests/integration/DefaultLogger.php create mode 100644 server/vendor/php-opencloud/common/tests/integration/Runner.php create mode 100644 server/vendor/php-opencloud/common/tests/integration/SampleManager.php create mode 100644 server/vendor/php-opencloud/common/tests/integration/SampleManagerInterface.php create mode 100644 server/vendor/php-opencloud/common/tests/integration/TestCase.php create mode 100644 server/vendor/php-opencloud/common/tests/integration/TestInterface.php create mode 100644 server/vendor/php-opencloud/common/tests/integration/Utils.php create mode 100644 server/vendor/php-opencloud/common/tests/integration/run.php create mode 100755 server/vendor/php-opencloud/common/tests/integration/script/compute_v2 create mode 100755 server/vendor/php-opencloud/common/tests/integration/script/identity_v3 create mode 100755 server/vendor/php-opencloud/common/tests/integration/script/networking_v2 create mode 100755 server/vendor/php-opencloud/common/tests/integration/script/objectstore_v2 create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Api/OperationTest.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Api/OperatorTest.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Api/ParameterTest.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Api/fixtures/headers.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Api/fixtures/jsonBody.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/ArrayAccessTraitTest.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Auth/AuthHandlerTest.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/DateTime.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Error/BadResponseErrorTest.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Error/BuilderTest.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/HydratorStrategyTraitTes.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/JsonPathTest.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/JsonSchema/Fixtures/jsonPatchTests.json create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/JsonSchema/JsonPatchTest.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/JsonSchema/SchemaTest.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Resource/AbstractResourceTest.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Resource/Fixtures/servers-empty.resp create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Resource/Fixtures/servers-page1.resp create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Resource/Fixtures/servers-page2.resp create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Service/BuilderTest.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Transport/HandlerStackTest.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Transport/JsonSerializerTest.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Transport/MiddlewareTest.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Transport/RequestSerializerTest.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Common/Transport/UtilsTest.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Fixtures/ComputeV2Api.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Fixtures/IdentityV2Api.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/Fixtures/IdentityV3Api.php create mode 100644 server/vendor/php-opencloud/common/tests/unit/TestCase.php diff --git a/server/vendor/php-opencloud/common/.gitignore b/server/vendor/php-opencloud/common/.gitignore new file mode 100644 index 0000000..7ad09a8 --- /dev/null +++ b/server/vendor/php-opencloud/common/.gitignore @@ -0,0 +1,10 @@ +.idea/ +.test/ +coverage/ +vendor/ + +*.pyc + +phpunit.xml +coverage.xml +composer.lock diff --git a/server/vendor/php-opencloud/common/composer.json b/server/vendor/php-opencloud/common/composer.json new file mode 100644 index 0000000..f2520ad --- /dev/null +++ b/server/vendor/php-opencloud/common/composer.json @@ -0,0 +1,36 @@ +{ + "name": "php-opencloud/common", + "authors": [ + { + "name": "Jamie Hannaford", + "email": "jamie.hannaford@rackspace.com", + "homepage" : "https://github.com/jamiehannaford" + } + ], + "autoload": { + "psr-4": { + "OpenCloud\\": "src/", + "OpenCloud\\Test\\": "tests/unit/", + "OpenCloud\\Integration\\": "tests/integration/" + } + }, + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/php-opencloud/Sami" + } + ], + "require": { + "php": "~7.0", + "guzzlehttp/guzzle": "~6.1", + "justinrainbow/json-schema": "~1.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "sami/sami": "dev-master", + "psr/log": "~1.0", + "satooshi/php-coveralls": "~1.0", + "jakub-onderka/php-parallel-lint": "0.*", + "fabpot/php-cs-fixer": "~1.0" + } +} diff --git a/server/vendor/php-opencloud/common/phpunit.xml.dist b/server/vendor/php-opencloud/common/phpunit.xml.dist new file mode 100644 index 0000000..cf698d5 --- /dev/null +++ b/server/vendor/php-opencloud/common/phpunit.xml.dist @@ -0,0 +1,21 @@ + + + + + + tests/unit + + + + + + ./src + + ./src + ./src + ./src + + + + + \ No newline at end of file diff --git a/server/vendor/php-opencloud/common/src/Common/Api/AbstractApi.php b/server/vendor/php-opencloud/common/src/Common/Api/AbstractApi.php new file mode 100644 index 0000000..beee5e8 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Api/AbstractApi.php @@ -0,0 +1,33 @@ + true]); + } + + protected function notRequired(array $param) + { + return array_merge($param, ['required' => false]); + } + + protected function query(array $param) + { + return array_merge($param, ['location' => AbstractParams::QUERY]); + } + + protected function url(array $param) + { + return array_merge($param, ['location' => AbstractParams::URL]); + } + + public function documented(array $param) + { + return array_merge($param, ['required' => true]); + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/Api/AbstractParams.php b/server/vendor/php-opencloud/common/src/Common/Api/AbstractParams.php new file mode 100644 index 0000000..225e025 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Api/AbstractParams.php @@ -0,0 +1,100 @@ + self::INT_TYPE, + 'location' => 'query', + 'description' => << 'string', + 'location' => 'query', + 'description' => << sprintf("The unique ID, or identifier, for the %s", $type), + 'type' => self::STRING_TYPE, + 'location' => self::JSON, + ]; + } + + public function idPath() + { + return [ + 'type' => self::STRING_TYPE, + 'location' => self::URL, + 'description' => 'The unique ID of the resource', + ]; + } + + public function name($resource) + { + return [ + 'description' => sprintf("The name of the %s", $resource), + 'type' => self::STRING_TYPE, + 'location' => self::JSON, + ]; + } + + + public function sortDir() + { + return [ + 'type' => self::STRING_TYPE, + 'location' => self::QUERY, + 'description' => "Sorts by one or more sets of attribute and sort direction combinations.", + 'enum' => ['asc', 'desc'] + ]; + } + + public function sortKey() + { + return [ + 'type' => self::STRING_TYPE, + 'location' => self::QUERY, + 'description' => "Sorts by one or more sets of attribute and sort direction combinations.", + ]; + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/Api/ApiInterface.php b/server/vendor/php-opencloud/common/src/Common/Api/ApiInterface.php new file mode 100644 index 0000000..d5d26a0 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Api/ApiInterface.php @@ -0,0 +1,20 @@ +method = $definition['method']; + $this->path = $definition['path']; + + if (isset($definition['jsonKey'])) { + $this->jsonKey = $definition['jsonKey']; + } + + $this->params = self::toParamArray($definition['params']); + } + + /** + * @return string + */ + public function getPath() + { + return $this->path; + } + + /** + * @return string + */ + public function getMethod() + { + return $this->method; + } + + /** + * Indicates whether this operation supports a parameter. + * + * @param $key The name of a parameter + * + * @return bool + */ + public function hasParam($key) + { + return isset($this->params[$key]); + } + + /** + * @param $name + * + * @return Parameter + */ + public function getParam($name) + { + return isset($this->params[$name]) ? $this->params[$name] : null; + } + + /** + * @return string + */ + public function getJsonKey() + { + return $this->jsonKey; + } + + /** + * A convenience method that will take a generic array of data and convert it into an array of + * {@see Parameter} objects. + * + * @param array $data A generic data array + * + * @return array + */ + public static function toParamArray(array $data) + { + $params = []; + + foreach ($data as $name => $param) { + $params[$name] = new Parameter($param + ['name' => $name]); + } + + return $params; + } + + /** + * This method will validate all of the user-provided values and throw an exception if any + * failures are detected. This is useful for basic sanity-checking before a request is + * serialized and sent to the API. + * + * @param array $userValues The user-defined values + * + * @return bool TRUE if validation passes + * @throws \Exception If validate fails + */ + public function validate(array $userValues) + { + foreach ($this->params as $paramName => $param) { + if (array_key_exists($paramName, $userValues)) { + $param->validate($userValues[$paramName]); + } elseif ($param->isRequired()) { + throw new \Exception(sprintf('"%s" is a required option, but it was not provided', $paramName)); + } + } + + return true; + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/Api/Operator.php b/server/vendor/php-opencloud/common/src/Common/Api/Operator.php new file mode 100644 index 0000000..4325b69 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Api/Operator.php @@ -0,0 +1,173 @@ +client = $client; + $this->api = $api; + } + + /** + * Magic method for dictating how objects are rendered when var_dump is called. + * For the benefit of users, extremely verbose and heavy properties (such as HTTP clients) are + * removed to provide easier access to normal state, such as resource attributes. + * + * @codeCoverageIgnore + * @return array + */ + public function __debugInfo() + { + $excludedVars = ['client', 'errorBuilder', 'api']; + + $output = []; + + foreach (get_object_vars($this) as $key => $val) { + if (!in_array($key, $excludedVars)) { + $output[$key] = $val; + } + } + + return $output; + } + + /** + * Retrieves a populated Operation according to the definition and values provided. A + * HTTP client is also injected into the object to allow it to communicate with the remote API. + * + * @param array $definition The data that dictates how the operation works + * + * @return Operation + */ + public function getOperation(array $definition) + { + return new Operation($definition); + } + + protected function sendRequest(Operation $operation, array $userValues = [], $async = false) + { + $operation->validate($userValues); + + $options = (new RequestSerializer)->serializeOptions($operation, $userValues); + $method = $async ? 'requestAsync' : 'request'; + $uri = uri_template($operation->getPath(), $userValues); + + return $this->client->$method($operation->getMethod(), $uri, $options); + } + + /** + * {@inheritDoc} + */ + public function execute(array $definition, array $userValues = []) + { + return $this->sendRequest($this->getOperation($definition), $userValues); + } + + /** + * {@inheritDoc} + */ + public function executeAsync(array $definition, array $userValues = []) + { + return $this->sendRequest($this->getOperation($definition), $userValues, true); + } + + /** + * {@inheritDoc} + */ + public function model($class, $data = null) + { + $model = new $class($this->client, $this->api); + + // @codeCoverageIgnoreStart + if (!$model instanceof ResourceInterface) { + throw new \RuntimeException(sprintf('%s does not implement %s', $class, ResourceInterface::class)); + } + // @codeCoverageIgnoreEnd + + if ($data instanceof ResponseInterface) { + $model->populateFromResponse($data); + } elseif (is_array($data)) { + $model->populateFromArray($data); + } + + return $model; + } + + /** + * Will create a new instance of this class with the current HTTP client and API injected in. This + * is useful when enumerating over a collection since multiple copies of the same resource class + * are needed. + * + * @return static + */ + public function newInstance() + { + return new static($this->client, $this->api); + } + + /** + * @return \GuzzleHttp\Psr7\Uri + */ + protected function getHttpBaseUrl() + { + return $this->client->getConfig('base_uri'); + } + + /** + * Magic method which intercepts async calls, finds the sequential version, and wraps it in a + * {@see Promise} object. In order for this to happen, the called methods need to be in the + * following format: `createAsync`, where `create` is the sequential method being wrapped. + * + * @param $methodName The name of the method being invoked. + * @param $args The arguments to be passed to the sequential method. + * + * @throws \RuntimeException If method does not exist + * + * @return Promise + */ + public function __call($methodName, $args) + { + $e = function ($name) { + return new \RuntimeException(sprintf('%s::%s is not defined', get_class($this), $name)); + }; + + if (substr($methodName, -5) === 'Async') { + $realMethod = substr($methodName, 0, -5); + if (!method_exists($this, $realMethod)) { + throw $e($realMethod); + } + + $promise = new Promise( + function () use (&$promise, $realMethod, $args) { + $value = call_user_func_array([$this, $realMethod], $args); + $promise->resolve($value); + } + ); + + return $promise; + } + + throw $e($methodName); + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/Api/OperatorInterface.php b/server/vendor/php-opencloud/common/src/Common/Api/OperatorInterface.php new file mode 100644 index 0000000..43c6ce2 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Api/OperatorInterface.php @@ -0,0 +1,51 @@ +hydrate($data); + + $this->required = (bool)$this->required; + + $this->stockLocation($data); + $this->stockItemSchema($data); + $this->stockProperties($data); + } + + private function stockLocation(array $data) + { + $this->location = isset($data['location']) ? $data['location'] : self::DEFAULT_LOCATION; + + if (!AbstractParams::isSupportedLocation($this->location)) { + throw new \RuntimeException(sprintf("%s is not a permitted location", $this->location)); + } + } + + private function stockItemSchema(array $data) + { + if (isset($data['items'])) { + $this->itemSchema = new Parameter($data['items']); + } + } + + private function stockProperties(array $data) + { + if (isset($data['properties'])) { + if (stripos($this->name, 'metadata') !== false) { + $this->properties = new Parameter($data['properties']); + } else { + foreach ($data['properties'] as $name => $property) { + $this->properties[$name] = new Parameter($property + ['name' => $name]); + } + } + } + } + + /** + * Retrieve the name that will be used over the wire. + * + * @return string + */ + public function getName() + { + return $this->sentAs ?: $this->name; + } + + /** + * Indicates whether the user must provide a value for this parameter. + * + * @return bool + */ + public function isRequired() + { + return $this->required === true; + } + + /** + * Validates a given user value and checks whether it passes basic sanity checking, such as types. + * + * @param $userValues The value provided by the user + * + * @return bool TRUE if the validation passes + * @throws \Exception If validation fails + */ + public function validate($userValues) + { + $this->validateEnums($userValues); + $this->validateType($userValues); + + if ($this->isArray()) { + $this->validateArray($userValues); + } elseif ($this->isObject()) { + $this->validateObject($userValues); + } + + return true; + } + + private function validateEnums($userValues) + { + if (!empty($this->enum) && $this->type == 'string' && !in_array($userValues, $this->enum)) { + throw new \Exception(sprintf( + 'The only permitted values are %s. You provided %s', implode(', ', $this->enum), print_r($userValues, true) + )); + } + } + + private function validateType($userValues) + { + if (!$this->hasCorrectType($userValues)) { + throw new \Exception(sprintf( + 'The key provided "%s" has the wrong value type. You provided %s (%s) but was expecting %s', + $this->name, print_r($userValues, true), gettype($userValues), $this->type + )); + } + } + + private function validateArray($userValues) + { + foreach ($userValues as $userValue) { + $this->itemSchema->validate($userValue); + } + } + + private function validateObject($userValues) + { + foreach ($userValues as $key => $userValue) { + $property = $this->getNestedProperty($key); + $property->validate($userValue); + } + } + + /** + * Internal method which retrieves a nested property for object parameters. + * + * @param $key The name of the child parameter + * + * @returns Parameter + * @throws \Exception + */ + private function getNestedProperty($key) + { + if (stripos($this->name, 'metadata') !== false && $this->properties instanceof Parameter) { + return $this->properties; + } elseif (isset($this->properties[$key])) { + return $this->properties[$key]; + } else { + throw new \Exception(sprintf('The key provided "%s" is not defined', $key)); + } + } + + /** + * Internal method which indicates whether the user value is of the same type as the one expected + * by this parameter. + * + * @param $userValue The value being checked + * + * @return bool + */ + private function hasCorrectType($userValue) + { + // Helper fn to see whether an array is associative (i.e. a JSON object) + $isAssociative = function ($value) { + return is_array($value) && array_keys($value) !== range(0, count($value) - 1); + }; + + // For params defined as objects, we'll let the user get away with + // passing in an associative array - since it's effectively a hash + if ($this->type == 'object' && $isAssociative($userValue)) { + return true; + } + + if (class_exists($this->type) || interface_exists($this->type)) { + return is_a($userValue, $this->type); + } + + if (!$this->type) { + return true; + } + + return gettype($userValue) == $this->type; + } + + /** + * Indicates whether this parameter represents an array type + * + * @return bool + */ + public function isArray() + { + return $this->type == 'array' && $this->itemSchema instanceof Parameter; + } + + /** + * Indicates whether this parameter represents an object type + * + * @return bool + */ + public function isObject() + { + return $this->type == 'object' && !empty($this->properties); + } + + public function getLocation() + { + return $this->location; + } + + /** + * Verifies whether the given location matches the parameter's location. + * + * @param $value + * + * @return bool + */ + public function hasLocation($value) + { + return $this->location == $value; + } + + /** + * Retrieves the parameter's path. + * + * @return string|null + */ + public function getPath() + { + return $this->path; + } + + /** + * Retrieves the common schema that an array parameter applies to all its child elements. + * + * @return Parameter + */ + public function getItemSchema() + { + return $this->itemSchema; + } + + /** + * Sets the name of the parameter to a new value + * + * @param string $name + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * Retrieves the child parameter for an object parameter. + * + * @param string $name The name of the child property + * + * @return null|Parameter + */ + public function getProperty($name) + { + if ($this->properties instanceof Parameter) { + $this->properties->setName($name); + return $this->properties; + } + + return isset($this->properties[$name]) ? $this->properties[$name] : null; + } + + /** + * Retrieves the prefix for a parameter, if any. + * + * @return string|null + */ + public function getPrefix() + { + return $this->prefix; + } + + public function getPrefixedName() + { + return $this->prefix . $this->getName(); + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/ArrayAccessTrait.php b/server/vendor/php-opencloud/common/src/Common/ArrayAccessTrait.php new file mode 100644 index 0000000..72bcfce --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/ArrayAccessTrait.php @@ -0,0 +1,67 @@ +internalState[] = $value; + } else { + $this->internalState[$offset] = $value; + } + } + + /** + * Checks whether an internal key exists. + * + * @param string $offset + * + * @return bool + */ + public function offsetExists($offset) + { + return isset($this->internalState[$offset]); + } + + /** + * Unsets an internal key. + * + * @param string $offset + */ + public function offsetUnset($offset) + { + unset($this->internalState[$offset]); + } + + /** + * Retrieves an internal key. + * + * @param string $offset + * + * @return mixed|null + */ + public function offsetGet($offset) + { + return $this->offsetExists($offset) ? $this->internalState[$offset] : null; + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/Auth/AuthHandler.php b/server/vendor/php-opencloud/common/src/Common/Auth/AuthHandler.php new file mode 100644 index 0000000..1a36cc0 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Auth/AuthHandler.php @@ -0,0 +1,73 @@ +nextHandler = $nextHandler; + $this->tokenGenerator = $tokenGenerator; + $this->token = $token; + } + + /** + * This method is invoked before every HTTP request is sent to the API. When this happens, it + * checks to see whether a token is set and valid, and then sets the ``X-Auth-Token`` header + * for the HTTP request before letting it continue on its merry way. + * + * @param RequestInterface $request + * @param array $options + * + * @return mixed|void + */ + public function __invoke(RequestInterface $request, array $options) + { + $fn = $this->nextHandler; + + if ($this->shouldIgnore($request)) { + return $fn($request, $options); + } + + if (!$this->token || $this->token->hasExpired()) { + $this->token = call_user_func($this->tokenGenerator); + } + + $modify = ['set_headers' => ['X-Auth-Token' => $this->token->getId()]]; + + return $fn(modify_request($request, $modify), $options); + } + + /** + * Internal method which prevents infinite recursion. For certain requests, like the initial + * auth call itself, we do NOT want to send a token. + * + * @param RequestInterface $request + * + * @return bool + */ + private function shouldIgnore(RequestInterface $request) + { + return strpos((string) $request->getUri(), 'tokens') !== false && $request->getMethod() == 'POST'; + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/Auth/Catalog.php b/server/vendor/php-opencloud/common/src/Common/Auth/Catalog.php new file mode 100644 index 0000000..b4ab381 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Auth/Catalog.php @@ -0,0 +1,20 @@ +request = $request; + } + + public function setResponse(ResponseInterface $response) + { + $this->response = $response; + } + + public function getRequest() + { + return $this->request; + } + + public function getResponse() + { + return $this->response; + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/Error/BaseError.php b/server/vendor/php-opencloud/common/src/Common/Error/BaseError.php new file mode 100644 index 0000000..a7cb26e --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Error/BaseError.php @@ -0,0 +1,12 @@ +client = $client ?: new Client(); + } + + /** + * Internal method used when outputting headers in the error description. + * + * @param $name + * + * @return string + */ + private function header($name) + { + return sprintf("%s\n%s\n", $name, str_repeat('~', strlen($name))); + } + + /** + * Before outputting custom links, it is validated to ensure that the user is not + * directed off to a broken link. If a 404 is detected, it is hidden. + * + * @param $link The proposed link + * + * @return bool + */ + private function linkIsValid($link) + { + $link = $this->docDomain . $link; + + try { + return $this->client->request('HEAD', $link)->getStatusCode() < 400; + } catch (ClientException $e) { + return false; + } + } + + /** + * @param MessageInterface $message + * + * @codeCoverageIgnore + * @return string + */ + public function str(MessageInterface $message) + { + if ($message instanceof RequestInterface) { + $msg = trim($message->getMethod() . ' ' + . $message->getRequestTarget()) + . ' HTTP/' . $message->getProtocolVersion(); + if (!$message->hasHeader('host')) { + $msg .= "\r\nHost: " . $message->getUri()->getHost(); + } + } elseif ($message instanceof ResponseInterface) { + $msg = 'HTTP/' . $message->getProtocolVersion() . ' ' + . $message->getStatusCode() . ' ' + . $message->getReasonPhrase(); + } + + foreach ($message->getHeaders() as $name => $values) { + $msg .= "\r\n{$name}: " . implode(', ', $values); + } + + if ($message->getBody()->getSize() < ini_get('memory_limit')) { + $msg .= "\r\n\r\n" . $message->getBody(); + } + + return $msg; + } + + /** + * Helper method responsible for constructing and returning {@see BadResponseError} exceptions. + * + * @param RequestInterface $request The faulty request + * @param ResponseInterface $response The error-filled response + * + * @return BadResponseError + */ + public function httpError(RequestInterface $request, ResponseInterface $response) + { + $message = $this->header('HTTP Error'); + + $message .= sprintf("The remote server returned a \"%d %s\" error for the following transaction:\n\n", + $response->getStatusCode(), $response->getReasonPhrase()); + + $message .= $this->header('Request'); + $message .= trim($this->str($request)) . PHP_EOL . PHP_EOL; + + $message .= $this->header('Response'); + $message .= trim($this->str($response)) . PHP_EOL . PHP_EOL; + + $message .= $this->header('Further information'); + $message .= $this->getStatusCodeMessage($response->getStatusCode()); + + $message .= "Visit http://docs.php-opencloud.com/en/latest/http-codes for more information about debugging " + . "HTTP status codes, or file a support issue on https://github.com/php-opencloud/openstack/issues."; + + $e = new BadResponseError($message); + $e->setRequest($request); + $e->setResponse($response); + + return $e; + } + + private function getStatusCodeMessage($statusCode) + { + $errors = [ + 400 => 'Please ensure that your input values are valid and well-formed. ', + 401 => 'Please ensure that your authentication credentials are valid. ', + 404 => "Please ensure that the resource you're trying to access actually exists. ", + 500 => 'Please try this operation again once you know the remote server is operational. ', + ]; + + return isset($errors[$statusCode]) ? $errors[$statusCode] : ''; + } + + /** + * Helper method responsible for constructing and returning {@see UserInputError} exceptions. + * + * @param string $expectedType The type that was expected from the user + * @param mixed $userValue The incorrect value the user actually provided + * @param string|null $furtherLink A link to further information if necessary (optional). + * + * @return UserInputError + */ + public function userInputError($expectedType, $userValue, $furtherLink = null) + { + $message = $this->header('User Input Error'); + + $message .= sprintf("%s was expected, but the following value was passed in:\n\n%s\n", + $expectedType, print_r($userValue, true)); + + $message .= "Please ensure that the value adheres to the expectation above. "; + + if ($furtherLink && $this->linkIsValid($furtherLink)) { + $message .= sprintf("Visit %s for more information about input arguments. ", $this->docDomain . $furtherLink); + } + + $message .= 'If you run into trouble, please open a support issue on https://github.com/php-opencloud/openstack/issues.'; + + return new UserInputError($message); + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/Error/NotImplementedError.php b/server/vendor/php-opencloud/common/src/Common/Error/NotImplementedError.php new file mode 100644 index 0000000..3e01d74 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Error/NotImplementedError.php @@ -0,0 +1,12 @@ + $val) { + $key = isset($aliases[$key]) ? $aliases[$key] : $key; + if (property_exists($this, $key)) { + $this->$key = $val; + } + } + } + + private function set($key, $property, array $data, callable $fn = null) + { + if (isset($data[$key]) && property_exists($this, $property)) { + $value = $fn ? call_user_func($fn, $data[$key]) : $data[$key]; + $this->$property = $value; + } + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/JsonPath.php b/server/vendor/php-opencloud/common/src/Common/JsonPath.php new file mode 100644 index 0000000..0a6372e --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/JsonPath.php @@ -0,0 +1,119 @@ +['foo' => ['bar' => ['baz' => 'some_value']]] + * + * and you wanted to insert or extract an element. Usually, you would use: + * + *
    $array['foo']['bar']['baz'] = 'new_value';
    + * + * but sometimes you do not have access to the variable - so a string representation is needed. Using + * XPath-like syntax, this class allows you to do this: + * + *
    $jsonPath = new JsonPath($array);
    + * $jsonPath->set('foo.bar.baz', 'new_value');
    + * $val = $jsonPath->get('foo.bar.baz');
    + * 
    + * + * @package OpenCloud\Common + */ +class JsonPath +{ + /** @var array */ + private $jsonStructure; + + /** + * @param $structure The initial data structure to extract from and insert into. Typically this will be a + * multidimensional associative array; but well-formed JSON strings are also acceptable. + */ + public function __construct($structure) + { + $this->jsonStructure = is_string($structure) ? json_decode($structure, true) : $structure; + } + + /** + * Set a node in the structure + * + * @param $path The XPath to use + * @param $value The new value of the node + */ + public function set($path, $value) + { + $this->jsonStructure = $this->setPath($path, $value, $this->jsonStructure); + } + + /** + * Internal method for recursive calls. + * + * @param $path + * @param $value + * @param $json + * @return mixed + */ + private function setPath($path, $value, $json) + { + $nodes = explode('.', $path); + $point = array_shift($nodes); + + if (!isset($json[$point])) { + $json[$point] = []; + } + + if (!empty($nodes)) { + $json[$point] = $this->setPath(implode('.', $nodes), $value, $json[$point]); + } else { + $json[$point] = $value; + } + + return $json; + } + + /** + * Return the updated structure. + * + * @return mixed + */ + public function getStructure() + { + return $this->jsonStructure; + } + + /** + * Get a path's value. If no path can be matched, NULL is returned. + * + * @param $path + * @return mixed|null + */ + public function get($path) + { + return $this->getPath($path, $this->jsonStructure); + } + + /** + * Internal method for recursion. + * + * @param $path + * @param $json + * @return null + */ + private function getPath($path, $json) + { + $nodes = explode('.', $path); + $point = array_shift($nodes); + + if (!isset($json[$point])) { + return null; + } + + if (empty($nodes)) { + return $json[$point]; + } else { + return $this->getPath(implode('.', $nodes), $json[$point]); + } + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/JsonSchema/JsonPatch.php b/server/vendor/php-opencloud/common/src/Common/JsonSchema/JsonPatch.php new file mode 100644 index 0000000..2c12ec0 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/JsonSchema/JsonPatch.php @@ -0,0 +1,115 @@ +makeDiff($src, $dest); + } + + public function makeDiff($srcStruct, $desStruct, $path = '') + { + $changes = []; + + if (is_object($srcStruct)) { + $changes = $this->handleObject($srcStruct, $desStruct, $path); + } elseif (is_array($srcStruct)) { + $changes = $this->handleArray($srcStruct, $desStruct, $path); + } elseif ($srcStruct != $desStruct) { + $changes[] = $this->makePatch(self::OP_REPLACE, $path, $desStruct); + } + + return $changes; + } + + protected function handleArray($srcStruct, $desStruct, $path) + { + $changes = []; + + if ($diff = $this->arrayDiff($desStruct, $srcStruct)) { + foreach ($diff as $key => $val) { + if (is_object($val)) { + $changes = array_merge($changes, $this->makeDiff($srcStruct[$key], $val, $this->path($path, $key))); + } else { + $op = array_key_exists($key, $srcStruct) && !in_array($srcStruct[$key], $desStruct, true) + ? self::OP_REPLACE : self::OP_ADD; + $changes[] = $this->makePatch($op, $this->path($path, $key), $val); + } + } + } elseif ($srcStruct != $desStruct) { + foreach ($srcStruct as $key => $val) { + if (!in_array($val, $desStruct, true)) { + $changes[] = $this->makePatch(self::OP_REMOVE, $this->path($path, $key)); + } + } + } + + return $changes; + } + + protected function handleObject($srcStruct, $desStruct, $path) + { + $changes = []; + + if ($this->shouldPartiallyReplace($srcStruct, $desStruct)) { + foreach ($desStruct as $key => $val) { + if (!property_exists($srcStruct, $key)) { + $changes[] = $this->makePatch(self::OP_ADD, $this->path($path, $key), $val); + } elseif ($srcStruct->$key != $val) { + $changes = array_merge($changes, $this->makeDiff($srcStruct->$key, $val, $this->path($path, $key))); + } + } + } elseif ($this->shouldPartiallyReplace($desStruct, $srcStruct)) { + foreach ($srcStruct as $key => $val) { + if (!property_exists($desStruct, $key)) { + $changes[] = $this->makePatch(self::OP_REMOVE, $this->path($path, $key)); + } + } + } + + return $changes; + } + + protected function shouldPartiallyReplace($o1, $o2) + { + return count(array_diff_key((array) $o1, (array) $o2)) < count($o1); + } + + protected function arrayDiff(array $a1, array $a2) + { + $result = []; + + foreach ($a1 as $key => $val) { + if (!in_array($val, $a2, true)) { + $result[$key] = $val; + } + } + + return $result; + } + + protected function path($root, $path) + { + if ($path === '_empty_') { + $path = ''; + } + + return rtrim($root, '/') . '/' . ltrim($path, '/'); + } + + protected function makePatch($op, $path, $val = null) + { + switch ($op) { + default: + return ['op' => $op, 'path' => $path, 'value' => $val]; + case self::OP_REMOVE: + return ['op' => $op, 'path' => $path]; + } + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/JsonSchema/Schema.php b/server/vendor/php-opencloud/common/src/Common/JsonSchema/Schema.php new file mode 100644 index 0000000..a1cd380 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/JsonSchema/Schema.php @@ -0,0 +1,72 @@ +body = (object) $body; + $this->validator = $validator ?: new Validator(); + } + + public function getPropertyPaths() + { + $paths = []; + + foreach ($this->body->properties as $propertyName => $property) { + $paths[] = sprintf("/%s", $propertyName); + } + + return $paths; + } + + public function normalizeObject($subject, array $aliases) + { + $out = new \stdClass; + + foreach ($this->body->properties as $propertyName => $property) { + $name = isset($aliases[$propertyName]) ? $aliases[$propertyName] : $propertyName; + if (isset($property->readOnly) && $property->readOnly === true) { + continue; + } elseif (property_exists($subject, $name)) { + $out->$propertyName = $subject->$name; + } elseif (property_exists($subject, $propertyName)) { + $out->$propertyName = $subject->$propertyName; + } + } + + return $out; + } + + public function validate($data) + { + $this->validator->check($data, $this->body); + } + + public function isValid() + { + return $this->validator->isValid(); + } + + public function getErrors() + { + return $this->validator->getErrors(); + } + + public function getErrorString() + { + $msg = "Provided values do not validate. Errors:\n"; + + foreach ($this->getErrors() as $error) { + $msg .= sprintf("[%s] %s\n", $error['property'], $error['message']); + } + + return $msg; + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/Resource/AbstractResource.php b/server/vendor/php-opencloud/common/src/Common/Resource/AbstractResource.php new file mode 100644 index 0000000..9f79b07 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Resource/AbstractResource.php @@ -0,0 +1,243 @@ + 'fooBar' + * + * will extract FOO_BAR from the response, and save it as 'fooBar' in the resource. + * + * @var array + */ + protected $aliases = []; + + /** + * Populates the current resource from a response object. + * + * @param ResponseInterface $response + * + * @return $this|ResourceInterface + */ + public function populateFromResponse(ResponseInterface $response) + { + if (strpos($response->getHeaderLine('Content-Type'), 'application/json') === 0) { + $json = Utils::jsonDecode($response); + if (!empty($json)) { + $this->populateFromArray(Utils::flattenJson($json, $this->resourceKey)); + } + } + + return $this; + } + + /** + * Populates the current resource from a data array. + * + * @param array $array + * + * @return mixed|void + */ + public function populateFromArray(array $array) + { + $reflClass = new \ReflectionClass($this); + + foreach ($array as $key => $val) { + $propertyName = isset($this->aliases[$key]) ? $this->aliases[$key] : $key; + + if (property_exists($this, $propertyName)) { + if ($type = $this->extractTypeFromDocBlock($reflClass, $propertyName)) { + $val = $this->parseDocBlockValue($type, $val); + } + + $this->$propertyName = $val; + } + } + } + + private function parseDocBlockValue($type, $val) + { + if (strpos($type, '[]') === 0 && is_array($val)) { + $array = []; + foreach ($val as $subVal) { + $array[] = $this->model($this->normalizeModelClass(substr($type, 2)), $subVal); + } + $val = $array; + } elseif (strcasecmp($type, '\datetimeimmutable') === 0) { + $val = new \DateTimeImmutable($val); + } elseif ($this->isNotNativeType($type)) { + $val = $this->model($this->normalizeModelClass($type), $val); + } + + return $val; + } + + private function isNotNativeType($type) + { + return !in_array($type, [ + 'string', 'bool', 'boolean', 'double', 'null', 'array', 'object', 'int', 'integer', 'float', 'numeric', + 'mixed' + ]); + } + + private function normalizeModelClass($class) + { + if (strpos($class, '\\') === false) { + $currentNamespace = (new \ReflectionClass($this))->getNamespaceName(); + $class = sprintf("%s\\%s", $currentNamespace, $class); + } + + return $class; + } + + private function extractTypeFromDocBlock(\ReflectionClass $reflClass, $propertyName) + { + $docComment = $reflClass->getProperty($propertyName)->getDocComment(); + + if (!$docComment) { + return false; + } + + $matches = []; + preg_match('#@var ((\[\])?[\w|\\\]+)#', $docComment, $matches); + return isset($matches[1]) ? $matches[1] : null; + } + + /** + * Internal method which retrieves the values of provided keys. + * + * @param array $keys + * + * @return array + */ + protected function getAttrs(array $keys) + { + $output = []; + + foreach ($keys as $key) { + if (property_exists($this, $key) && $this->$key !== null) { + $output[$key] = $this->$key; + } + } + + return $output; + } + + /** + * @param array $definition + * + * @return mixed + */ + public function executeWithState(array $definition) + { + return $this->execute($definition, $this->getAttrs(array_keys($definition['params']))); + } + + private function getResourcesKey() + { + $resourcesKey = $this->resourcesKey; + + if (!$resourcesKey) { + $class = substr(static::class, strrpos(static::class, '\\') + 1); + $resourcesKey = strtolower(preg_replace('/([a-z])([A-Z])/', '$1_$2', $class)) . 's'; + } + + return $resourcesKey; + } + + /** + * {@inheritDoc} + */ + public function enumerate(array $def, array $userVals = [], callable $mapFn = null) + { + $operation = $this->getOperation($def); + + $requestFn = function ($marker) use ($operation, $userVals) { + if ($marker) { + $userVals['marker'] = $marker; + } + return $this->sendRequest($operation, $userVals); + }; + + $resourceFn = function (array $data) { + $resource = $this->newInstance(); + $resource->populateFromArray($data); + return $resource; + }; + + $opts = [ + 'limit' => isset($userVals['limit']) ? $userVals['limit'] : null, + 'resourcesKey' => $this->getResourcesKey(), + 'markerKey' => $this->markerKey, + 'mapFn' => $mapFn, + ]; + + $iterator = new Iterator($opts, $requestFn, $resourceFn); + return $iterator(); + } + + public function extractMultipleInstances(ResponseInterface $response, $key = null) + { + $key = $key ?: $this->getResourcesKey(); + $resourcesData = Utils::jsonDecode($response)[$key]; + + $resources = []; + + foreach ($resourcesData as $resourceData) { + $resource = $this->newInstance(); + $resource->populateFromArray($resourceData); + $resources[] = $resource; + } + + return $resources; + } + + protected function getService() + { + $class = static::class; + $service = substr($class, 0, strpos($class, 'Models') - 1) . '\\Service'; + + return new $service($this->client, $this->api); + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/Resource/Creatable.php b/server/vendor/php-opencloud/common/src/Common/Resource/Creatable.php new file mode 100644 index 0000000..19579c1 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Resource/Creatable.php @@ -0,0 +1,19 @@ + 'val3', 'Baz' => 'val4']); is called, then the resource will have the following + * metadata: + * + * Foo: val3 + * Bar: val2 + * Baz: val4 + * + * You will notice that any metadata items which are not specified in the call are preserved. + * + * @param array $metadata The new metadata items + * + * @return mixed + */ + public function mergeMetadata(array $metadata); + + /** + * Replaces all of the existing metadata items for a resource with a new set of values. Any metadata items which + * are not provided in the call are removed from the resource. For example, if the resource has this metadata + * already set: + * + * Foo: val1 + * Bar: val2 + * + * and resetMetadata(['Foo' => 'val3', 'Baz' => 'val4']); is called, then the resource will have the following + * metadata: + * + * Foo: val3 + * Baz: val4 + * + * @param array $metadata The new metadata items + * + * @return mixed + */ + public function resetMetadata(array $metadata); + + /** + * Extracts metadata from a response object and returns it in the form of an associative array. + * + * @param ResponseInterface $response + * + * @return array + */ + public function parseMetadata(ResponseInterface $response); +} diff --git a/server/vendor/php-opencloud/common/src/Common/Resource/HasWaiterTrait.php b/server/vendor/php-opencloud/common/src/Common/Resource/HasWaiterTrait.php new file mode 100644 index 0000000..519be7e --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Resource/HasWaiterTrait.php @@ -0,0 +1,124 @@ +retrieve(); + + if ($this->status == $status || $this->shouldHalt($timeout, $startTime)) { + break; + } + + sleep($sleepPeriod); + } + } + + /** + * Provides a blocking operation until the resource has reached a particular state. The method + * will enter a loop, executing the callback until TRUE is returned. This provides great + * flexibility. + * + * @param callable $fn An anonymous function that will be executed on every iteration. You can + * encapsulate your own logic to determine whether the resource has + * successfully transitioned. When TRUE is returned by the callback, + * the loop will end. + * @param int|bool $timeout The maximum timeout in seconds. If the total time taken by the waiter has reached + * or exceed this timeout, the blocking operation will immediately cease. If FALSE + * is provided, the timeout will never be considered. + * @param int $sleepPeriod The amount of time to pause between each HTTP request. + */ + public function waitWithCallback(callable $fn, $timeout = 60, $sleepPeriod = 1) + { + $startTime = time(); + + while (true) { + $this->retrieve(); + + $response = call_user_func_array($fn, [$this]); + + if ($response === true || $this->shouldHalt($timeout, $startTime)) { + break; + } + + sleep($sleepPeriod); + } + } + + /** + * Internal method used to identify whether a timeout has been exceeded. + * + * @param bool|int $timeout + * @param int $startTime + * + * @return bool + */ + private function shouldHalt($timeout, $startTime) + { + if ($timeout === false) { + return false; + } + + return time() - $startTime >= $timeout; + } + + /** + * Convenience method providing a blocking operation until the resource transitions to an + * ``ACTIVE`` status. + * + * @param int|bool $timeout The maximum timeout in seconds. If the total time taken by the waiter has reached + * or exceed this timeout, the blocking operation will immediately cease. If FALSE + * is provided, the timeout will never be considered. + */ + public function waitUntilActive($timeout = false) + { + $this->waitUntil('ACTIVE', $timeout); + } + + public function waitUntilDeleted($timeout = 60, $sleepPeriod = 1) + { + $startTime = time(); + + while (true) { + try { + $this->retrieve(); + } catch (BadResponseError $e) { + if ($e->getResponse()->getStatusCode() === 404) { + break; + } + throw $e; + } + + if ($this->shouldHalt($timeout, $startTime)) { + break; + } + + sleep($sleepPeriod); + } + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/Resource/Iterator.php b/server/vendor/php-opencloud/common/src/Common/Resource/Iterator.php new file mode 100644 index 0000000..63d4455 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Resource/Iterator.php @@ -0,0 +1,97 @@ +limit = isset($options['limit']) ? $options['limit'] : false; + $this->count = 0; + + if (isset($options['resourcesKey'])) { + $this->resourcesKey = $options['resourcesKey']; + } + + if (isset($options['markerKey'])) { + $this->markerKey = $options['markerKey']; + } + + if (isset($options['mapFn']) && is_callable($options['mapFn'])) { + $this->mapFn = $options['mapFn']; + } + + $this->requestFn = $requestFn; + $this->resourceFn = $resourceFn; + } + + private function fetchResources() + { + if ($this->shouldNotSendAnotherRequest()) { + return false; + } + + $response = call_user_func($this->requestFn, $this->currentMarker); + + $json = Utils::flattenJson(Utils::jsonDecode($response), $this->resourcesKey); + + if ($response->getStatusCode() === 204 || empty($json)) { + return false; + } + + return $json; + } + + private function assembleResource(array $data) + { + $resource = call_user_func($this->resourceFn, $data); + + // Invoke user-provided fn if provided + if ($this->mapFn) { + call_user_func_array($this->mapFn, [&$resource]); + } + + // Update marker if operation supports it + if ($this->markerKey) { + $this->currentMarker = $resource->{$this->markerKey}; + } + + return $resource; + } + + private function totalReached() + { + return $this->limit && $this->count >= $this->limit; + } + + private function shouldNotSendAnotherRequest() + { + return $this->totalReached() || ($this->count > 0 && !$this->markerKey); + } + + public function __invoke() + { + while ($resources = $this->fetchResources()) { + foreach ($resources as $resourceData) { + if ($this->totalReached()) { + break; + } + + $this->count++; + + yield $this->assembleResource($resourceData); + } + } + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/Resource/Listable.php b/server/vendor/php-opencloud/common/src/Common/Resource/Listable.php new file mode 100644 index 0000000..8e255c0 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Resource/Listable.php @@ -0,0 +1,28 @@ + '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($serviceName, $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 $serviceName The name of the service as it appears in the OpenCloud\* namespace + * @param $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($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/vendor/php-opencloud/common/src/Common/Service/ServiceInterface.php b/server/vendor/php-opencloud/common/src/Common/Service/ServiceInterface.php new file mode 100644 index 0000000..6ad3089 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Service/ServiceInterface.php @@ -0,0 +1,14 @@ +push(Middleware::httpErrors()); + $stack->push(Middleware::prepareBody()); + + return $stack; + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/Transport/JsonSerializer.php b/server/vendor/php-opencloud/common/src/Common/Transport/JsonSerializer.php new file mode 100644 index 0000000..11b31d3 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Transport/JsonSerializer.php @@ -0,0 +1,95 @@ +getName(); + if ($path = $param->getPath()) { + $jsonPath = new JsonPath($json); + $jsonPath->set(sprintf("%s.%s", $path, $name), $userValue); + $json = $jsonPath->getStructure(); + } elseif ($name) { + $json[$name] = $userValue; + } else { + $json[] = $userValue; + } + + return $json; + } + + /** + * Populates a value into an array-like structure. + * + * @param Parameter $param The schema that defines how the JSON field is being populated + * @param mixed $userValue The user value that is populating a JSON field + * + * @return array|mixed + */ + private function stockArrayJson(Parameter $param, $userValue) + { + $elems = []; + foreach ($userValue as $item) { + $elems = $this->stockJson($param->getItemSchema(), $item, $elems); + } + return $elems; + } + + /** + * Populates a value into an object-like structure. + * + * @param Parameter $param The schema that defines how the JSON field is being populated + * @param mixed $userValue The user value that is populating a JSON field + * + * @return array + */ + private function stockObjectJson(Parameter $param, $userValue) + { + $object = []; + foreach ($userValue as $key => $val) { + $object = $this->stockJson($param->getProperty($key), $val, $object); + } + return $object; + } + + /** + * A generic method that will populate a JSON structure with a value according to a schema. It + * supports multiple types and will delegate accordingly. + * + * @param Parameter $param The schema that defines how the JSON field is being populated + * @param mixed $userValue The user value that is populating a JSON field + * @param array $json The existing JSON structure that will be populated + * + * @return array + */ + public function stockJson(Parameter $param, $userValue, $json) + { + if ($param->isArray()) { + $userValue = $this->stockArrayJson($param, $userValue); + } elseif ($param->isObject()) { + $userValue = $this->stockObjectJson($param, $userValue); + } + // Populate the final value + return $this->stockValue($param, $userValue, $json); + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/Transport/Middleware.php b/server/vendor/php-opencloud/common/src/Common/Transport/Middleware.php new file mode 100644 index 0000000..916ff22 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Transport/Middleware.php @@ -0,0 +1,94 @@ +then( + function (ResponseInterface $response) use ($request, $handler) { + if ($response->getStatusCode() < 400) { + return $response; + } + throw (new Builder())->httpError($request, $response); + } + ); + }; + }; + } + + /** + * @param callable $tokenGenerator + * @param Token $token + * + * @return callable + */ + public static function authHandler(callable $tokenGenerator, Token $token = null) + { + return function (callable $handler) use ($tokenGenerator, $token) { + return new AuthHandler($handler, $tokenGenerator, $token); + }; + } + + /** + * @codeCoverageIgnore + */ + public static function history(array &$container) + { + return GuzzleMiddleware::history($container); + } + + /** + * @codeCoverageIgnore + */ + public static function retry(callable $decider, callable $delay = null) + { + return GuzzleMiddleware::retry($decider, $delay); + } + + /** + * @codeCoverageIgnore + */ + public static function log(LoggerInterface $logger, MessageFormatter $formatter, $logLevel = LogLevel::INFO) + { + return GuzzleMiddleware::log($logger, $formatter, $logLevel); + } + + /** + * @codeCoverageIgnore + */ + public static function prepareBody() + { + return GuzzleMiddleware::prepareBody(); + } + + /** + * @codeCoverageIgnore + */ + public static function mapRequest(callable $fn) + { + return GuzzleMiddleware::mapRequest($fn); + } + + /** + * @codeCoverageIgnore + */ + public static function mapResponse(callable $fn) + { + return GuzzleMiddleware::mapResponse($fn); + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/Transport/RequestSerializer.php b/server/vendor/php-opencloud/common/src/Common/Transport/RequestSerializer.php new file mode 100644 index 0000000..30f04af --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Transport/RequestSerializer.php @@ -0,0 +1,85 @@ +jsonSerializer = $jsonSerializer ?: new JsonSerializer(); + } + + public function serializeOptions(Operation $operation, array $userValues = []) + { + $options = ['headers' => []]; + + foreach ($userValues as $paramName => $paramValue) { + if (null === ($schema = $operation->getParam($paramName))) { + continue; + } + + $method = sprintf('stock%s', ucfirst($schema->getLocation())); + $this->$method($schema, $paramValue, $options); + } + + if (!empty($options['json'])) { + if ($key = $operation->getJsonKey()) { + $options['json'] = [$key => $options['json']]; + } + if (strpos(json_encode($options['json']), '\/') !== false) { + $options['body'] = json_encode($options['json'], JSON_UNESCAPED_SLASHES); + $options['headers']['Content-Type'] = 'application/json'; + unset($options['json']); + } + } + + return $options; + } + + private function stockUrl() + { + } + + private function stockQuery(Parameter $schema, $paramValue, array &$options) + { + $options['query'][$schema->getName()] = $paramValue; + } + + private function stockHeader(Parameter $schema, $paramValue, array &$options) + { + $paramName = $schema->getName(); + + if (stripos($paramName, 'metadata') !== false) { + return $this->stockMetadataHeader($schema, $paramValue, $options); + } + + $options['headers'] += is_scalar($paramValue) ? [$schema->getPrefixedName() => $paramValue] : []; + } + + private function stockMetadataHeader(Parameter $schema, $paramValue, array &$options) + { + foreach ($paramValue as $key => $keyVal) { + $schema = $schema->getItemSchema() ?: new Parameter(['prefix' => $schema->getPrefix(), 'name' => $key]); + $this->stockHeader($schema, $keyVal, $options); + } + } + + private function stockJson(Parameter $schema, $paramValue, array &$options) + { + $json = isset($options['json']) ? $options['json'] : []; + $options['json'] = $this->jsonSerializer->stockJson($schema, $paramValue, $json); + } + + private function stockRaw(Parameter $schema, $paramValue, array &$options) + { + $options['body'] = $paramValue; + } +} diff --git a/server/vendor/php-opencloud/common/src/Common/Transport/Utils.php b/server/vendor/php-opencloud/common/src/Common/Transport/Utils.php new file mode 100644 index 0000000..c2a2dc1 --- /dev/null +++ b/server/vendor/php-opencloud/common/src/Common/Transport/Utils.php @@ -0,0 +1,88 @@ + 'JSON_ERROR_DEPTH - Maximum stack depth exceeded', + JSON_ERROR_STATE_MISMATCH => 'JSON_ERROR_STATE_MISMATCH - Underflow or the modes mismatch', + JSON_ERROR_CTRL_CHAR => 'JSON_ERROR_CTRL_CHAR - Unexpected control character found', + JSON_ERROR_SYNTAX => 'JSON_ERROR_SYNTAX - Syntax error, malformed JSON', + JSON_ERROR_UTF8 => 'JSON_ERROR_UTF8 - Malformed UTF-8 characters, possibly incorrectly encoded' + ]; + + $responseBody = (string) $response->getBody(); + + if (strlen($responseBody) === 0) { + return $responseBody; + } + + $data = json_decode($responseBody, $assoc); + + if (JSON_ERROR_NONE !== json_last_error()) { + $last = json_last_error(); + throw new \InvalidArgumentException( + 'Unable to parse JSON data: ' . (isset($jsonErrors[$last]) ? $jsonErrors[$last] : 'Unknown error') + ); + } + + return $data; + } + + /** + * Method for flattening a nested array. + * + * @param array $data The nested array + * @param null $key The key to extract + * + * @return array + */ + public static function flattenJson($data, $key = null) + { + return (!empty($data) && $key && isset($data[$key])) ? $data[$key] : $data; + } + + /** + * Method for normalize an URL string. + * + * Append the http:// prefix if not present, and add a + * closing url separator when missing. + * + * @param string $url The url representation. + * + * @return string + */ + public static function normalizeUrl($url) + { + if (strpos($url, 'http') === false) { + $url = 'http://' . $url; + } + + return rtrim($url, '/') . '/'; + } + + /** + * Add an unlimited list of paths to a given URI. + * + * @param UriInterface $uri + * @param ...$paths + * + * @return UriInterface + */ + public static function addPaths(UriInterface $uri, ...$paths) + { + return uri_for(rtrim((string) $uri, '/') . '/' . implode('/', $paths)); + } + + public static function appendPath(UriInterface $uri, $path) + { + return uri_for(rtrim((string) $uri, '/') . '/' . $path); + } +} diff --git a/server/vendor/php-opencloud/common/tests/integration/DefaultLogger.php b/server/vendor/php-opencloud/common/tests/integration/DefaultLogger.php new file mode 100644 index 0000000..a546c70 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/integration/DefaultLogger.php @@ -0,0 +1,20 @@ +format($level, $message, $context); + } + + private function format($level, $message, $context) + { + $msg = strtr($message, $context); + + return sprintf("%s: %s\n", strtoupper($level), $msg); + } +} diff --git a/server/vendor/php-opencloud/common/tests/integration/Runner.php b/server/vendor/php-opencloud/common/tests/integration/Runner.php new file mode 100644 index 0000000..98d094c --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/integration/Runner.php @@ -0,0 +1,112 @@ +basePath = $basePath; + $this->logger = new DefaultLogger(); + $this->assembleServicesFromSamples(); + } + + private function traverse($path) + { + return new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS); + } + + private function assembleServicesFromSamples() + { + foreach ($this->traverse($this->basePath) as $servicePath) { + if ($servicePath->isDir()) { + foreach ($this->traverse($servicePath) as $versionPath) { + $this->services[$servicePath->getBasename()][] = $versionPath->getBasename(); + } + } + } + } + + private function getOpts() + { + $opts = getopt('s:v:t:', ['service:', 'version:', 'test::', 'debug::', 'help::']); + + $getOpt = function (array $keys, $default) use ($opts) { + foreach ($keys as $key) { + if (isset($opts[$key])) { + return $opts[$key]; + } + } + return $default; + }; + + return [ + $getOpt(['s', 'service'], 'all'), + $getOpt(['n', 'version'], 'all'), + $getOpt(['t', 'test'], ''), + isset($opts['debug']) ? (int) $opts['debug'] : 0, + ]; + } + + private function getRunnableServices($service, $version) + { + $services = $this->services; + + if ($service != 'all') { + if (!isset($this->services[$service])) { + throw new \InvalidArgumentException(sprintf("%s service does not exist", $service)); + } + + $versions = ($version == 'all') ? $this->services[$service] : [$version]; + $services = [$service => $versions]; + } + + return $services; + } + + /** + * @return TestInterface + */ + private function getTest($serviceName, $version, $verbosity) + { + $namespace = (new \ReflectionClass($this))->getNamespaceName(); + $className = sprintf("%s\\%s\\%sTest", $namespace, Utils::toCamelCase($serviceName), ucfirst($version)); + + if (!class_exists($className)) { + throw new \RuntimeException(sprintf("%s does not exist", $className)); + } + + $basePath = $this->basePath . DIRECTORY_SEPARATOR . $serviceName . DIRECTORY_SEPARATOR . $version; + $smClass = sprintf("%s\\SampleManager", $namespace); + $class = new $className($this->logger, new $smClass($basePath, $verbosity)); + + if (!($class instanceof TestInterface)) { + throw new \RuntimeException(sprintf("%s does not implement TestInterface", $className)); + } + + return $class; + } + + public function runServices() + { + list($serviceOpt, $versionOpt, $testMethodOpt, $verbosityOpt) = $this->getOpts(); + + foreach ($this->getRunnableServices($serviceOpt, $versionOpt) as $serviceName => $versions) { + foreach ($versions as $version) { + $testRunner = $this->getTest($serviceName, $version, $verbosityOpt); + + if ($testMethodOpt) { + $testRunner->runOneTest($testMethodOpt); + } else { + $testRunner->runTests(); + } + + $testRunner->teardown(); + } + } + } +} diff --git a/server/vendor/php-opencloud/common/tests/integration/SampleManager.php b/server/vendor/php-opencloud/common/tests/integration/SampleManager.php new file mode 100644 index 0000000..4bd8b9a --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/integration/SampleManager.php @@ -0,0 +1,104 @@ +basePath = $basePath; + $this->verbosity = $verbosity; + } + + public function deletePaths() + { + if (!empty($this->paths)) { + foreach ($this->paths as $path) { + unlink($path); + } + } + } + + protected function getGlobalReplacements() + { + return [ + '{userId}' => getenv('OS_USER_ID'), + '{username}' => getenv('OS_USERNAME'), + '{password}' => getenv('OS_PASSWORD'), + '{domainId}' => getenv('OS_DOMAIN_ID'), + '{authUrl}' => getenv('OS_AUTH_URL'), + '{tenantId}' => getenv('OS_TENANT_ID'), + '{region}' => getenv('OS_REGION'), + '{projectId}' => getenv('OS_PROJECT_ID'), + '{projectName}' => getenv('OS_PROJECT_NAME'), + ]; + } + + protected function getConnectionTemplate() + { + if ($this->verbosity === 1) { + $subst = <<<'EOL' +use OpenCloud\Integration\DefaultLogger; +use OpenCloud\Integration\Utils; +use GuzzleHttp\MessageFormatter; + +$options = [ + 'debugLog' => true, + 'logger' => new DefaultLogger(), + 'messageFormatter' => new MessageFormatter(), +]; +$openstack = new OpenCloud\OpenCloud(Utils::getAuthOpts($options)); +EOL; + } elseif ($this->verbosity === 2) { + $subst = <<<'EOL' +use OpenCloud\Integration\DefaultLogger; +use OpenCloud\Integration\Utils; +use GuzzleHttp\MessageFormatter; + +$options = [ + 'debugLog' => true, + 'logger' => new DefaultLogger(), + 'messageFormatter' => new MessageFormatter(MessageFormatter::DEBUG), +]; +$openstack = new OpenCloud\OpenCloud(Utils::getAuthOpts($options)); +EOL; + } else { + $subst = <<<'EOL' +use OpenCloud\Integration\Utils; + +$openstack = new OpenCloud\OpenCloud(Utils::getAuthOpts()); +EOL; + } + + return $subst; + } + + public function write($path, array $replacements) + { + $replacements = array_merge($this->getGlobalReplacements(), $replacements); + + $sampleFile = rtrim($this->basePath, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $path; + + if (!file_exists($sampleFile) || !is_readable($sampleFile)) { + throw new \RuntimeException(sprintf("%s either does not exist or is not readable", $sampleFile)); + } + + $content = strtr(file_get_contents($sampleFile), $replacements); + $content = str_replace("'vendor/'", "'" . dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . "vendor'", $content); + + $subst = $this->getConnectionTemplate(); + $content = preg_replace('/\([^)]+\)/', '', $content, 1); + $content = str_replace('$openstack = new OpenCloud\OpenCloud;', $subst, $content); + + $tmp = tempnam(sys_get_temp_dir(), 'openstack'); + file_put_contents($tmp, $content); + + $this->paths[] = $tmp; + + return $tmp; + } +} diff --git a/server/vendor/php-opencloud/common/tests/integration/SampleManagerInterface.php b/server/vendor/php-opencloud/common/tests/integration/SampleManagerInterface.php new file mode 100644 index 0000000..f0fe848 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/integration/SampleManagerInterface.php @@ -0,0 +1,10 @@ +logger = $logger; + $this->sampleManager = $sampleManager; + } + + public function teardown() + { + $this->sampleManager->deletePaths(); + } + + public function runOneTest($name) + { + if (!method_exists($this, $name)) { + throw new \InvalidArgumentException(sprintf("%s method does not exist", $name)); + } + + $this->startTimer(); + $this->$name(); + $this->outputTimeTaken(); + } + + protected function startTimer() + { + $this->startPoint = $this->lastPoint = microtime(true); + } + + private function wrapColor($message, $colorPrefix) + { + return sprintf("%s%s", $colorPrefix, $message) . "\033[0m\033[1;0m"; + } + + protected function logStep($message, array $context = []) + { + $duration = microtime(true) - $this->lastPoint; + + $stepTimeTaken = sprintf('(%s)', $this->formatSecDifference($duration)); + + if ($duration >= 10) { + $color = "\033[0m\033[1;31m"; // red + } elseif ($duration >= 2) { + $color = "\033[0m\033[1;33m"; // yellow + } else { + $color = "\033[0m\033[1;32m"; // green + } + + $message = '{timeTaken} ' . $message; + $context['{timeTaken}'] = $this->wrapColor($stepTimeTaken, $color); + + $this->logger->info($message, $context); + + $this->lastPoint = microtime(true); + } + + protected function randomStr($length = 5) + { + $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + $charsLen = strlen($chars); + + $randomString = ''; + for ($i = 0; $i < $length; $i++) { + $randomString .= $chars[rand(0, $charsLen - 1)]; + } + + return 'phptest_' . $randomString; + } + + private function formatMinDifference($duration) + { + $output = ''; + + if (($minutes = floor($duration / 60)) > 0) { + $output .= $minutes . 'min' . (($minutes > 1) ? 's' : ''); + } + + if (($seconds = number_format(fmod($duration, 60), 2)) > 0) { + if ($minutes > 0) { + $output .= ' '; + } + $output .= $seconds . 's'; + } + + return $output; + } + + private function formatSecDifference($duration) + { + return number_format($duration, 2) . 's'; + } + + protected function outputTimeTaken() + { + $output = $this->formatMinDifference(microtime(true) - $this->startPoint); + + $this->logger->info('Finished all tests! Time taken: {output}.', ['{output}' => $output]); + } + + protected function sampleFile(array $replacements, $path) + { + return $this->sampleManager->write($path, $replacements); + } +} diff --git a/server/vendor/php-opencloud/common/tests/integration/TestInterface.php b/server/vendor/php-opencloud/common/tests/integration/TestInterface.php new file mode 100644 index 0000000..a89e8af --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/integration/TestInterface.php @@ -0,0 +1,16 @@ + getenv('OS_AUTH_URL'), + 'region' => getenv('OS_REGION_NAME'), + 'user' => [ + 'id' => getenv('OS_USER_ID'), + 'password' => getenv('OS_PASSWORD'), + ], + 'scope' => [ + 'project' => [ + 'id' => getenv('OS_PROJECT_ID'), + ] + ] + ]; + } + + public static function getAuthOptsV2() + { + $httpClient = new Client([ + 'base_uri' => CommonUtils::normalizeUrl(getenv('OS_AUTH_URL')), + 'handler' => HandlerStack::create(), + ]); + return [ + 'authUrl' => getenv('OS_AUTH_URL'), + 'region' => getenv('OS_REGION_NAME'), + 'username' => getenv('OS_USERNAME'), + 'password' => getenv('OS_PASSWORD'), + 'tenantName' => getenv('OS_TENANT_NAME'), + 'identityService' => new Service($httpClient, new Api), + ]; + } + + public static function getAuthOpts(array $options = []) + { + $authOptions = getenv('OS_IDENTITY_API_VERSION') == '2.0' + ? self::getAuthOptsV2() + : self::getAuthOptsV3(); + + return array_merge($authOptions, $options); + } + + public static function toCamelCase($word, $separator = '_') + { + return str_replace($separator, '', ucwords($word, $separator)); + } +} diff --git a/server/vendor/php-opencloud/common/tests/integration/run.php b/server/vendor/php-opencloud/common/tests/integration/run.php new file mode 100644 index 0000000..5bc5548 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/integration/run.php @@ -0,0 +1,10 @@ +runServices(); diff --git a/server/vendor/php-opencloud/common/tests/integration/script/compute_v2 b/server/vendor/php-opencloud/common/tests/integration/script/compute_v2 new file mode 100755 index 0000000..5e90b05 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/integration/script/compute_v2 @@ -0,0 +1,3 @@ +#!/bin/bash + +php tests/integration/Runner.php -s compute -v v2 diff --git a/server/vendor/php-opencloud/common/tests/integration/script/identity_v3 b/server/vendor/php-opencloud/common/tests/integration/script/identity_v3 new file mode 100755 index 0000000..cd175b5 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/integration/script/identity_v3 @@ -0,0 +1,3 @@ +#!/bin/bash + +php tests/integration/Runner.php -s identity -v v3 diff --git a/server/vendor/php-opencloud/common/tests/integration/script/networking_v2 b/server/vendor/php-opencloud/common/tests/integration/script/networking_v2 new file mode 100755 index 0000000..9583f68 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/integration/script/networking_v2 @@ -0,0 +1,3 @@ +#!/bin/bash + +php tests/integration/Runner.php -s networking -v v2 diff --git a/server/vendor/php-opencloud/common/tests/integration/script/objectstore_v2 b/server/vendor/php-opencloud/common/tests/integration/script/objectstore_v2 new file mode 100755 index 0000000..3fb893a --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/integration/script/objectstore_v2 @@ -0,0 +1,3 @@ +#!/bin/bash + +php tests/integration/Runner.php -s objectstore -v v2 diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Api/OperationTest.php b/server/vendor/php-opencloud/common/tests/unit/Common/Api/OperationTest.php new file mode 100644 index 0000000..ea0f7c8 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Api/OperationTest.php @@ -0,0 +1,74 @@ +postServer(); + + $this->operation = new Operation($def); + } + + public function test_it_reveals_whether_params_are_set_or_not() + { + $this->assertFalse($this->operation->hasParam('foo')); + $this->assertTrue($this->operation->hasParam('name')); + } + + public function test_it_gets_params() + { + $this->assertInstanceOf(Parameter::class, $this->operation->getParam('name')); + } + + public function test_it_validates_params() + { + $this->assertTrue($this->operation->validate([ + 'name' => 'foo', + 'imageId' => 'bar', + 'flavorId' => 'baz', + ])); + } + + /** + * @expectedException \Exception + */ + public function test_exceptions_are_propagated() + { + $this->assertFalse($this->operation->validate([ + 'name' => true, + 'imageId' => 'bar', + 'flavorId' => 'baz', + ])); + } + + /** + * @expectedException \Exception + */ + public function test_an_exception_is_thrown_when_user_does_not_provide_required_options() + { + $this->operation->validate([]); + } + + /** + * @expectedException \Exception + */ + public function test_it_throws_exception_when_user_provides_undefined_options() + { + $userData = ['name' => 'new_server', 'undefined_opt' => 'bah']; + + $this->operation->validate($userData); + } + + public function test_it_gets_json_key() + { + $this->assertEquals('server', $this->operation->getJsonKey()); + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Api/OperatorTest.php b/server/vendor/php-opencloud/common/tests/unit/Common/Api/OperatorTest.php new file mode 100644 index 0000000..43c5804 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Api/OperatorTest.php @@ -0,0 +1,137 @@ +rootFixturesDir = __DIR__; + + $this->def = [ + 'method' => 'GET', + 'path' => 'test', + 'params' => [], + ]; + + $this->operator = new TestOperator($this->client->reveal(), new ComputeV2Api()); + } + + public function test_it_returns_operations() + { + $this->assertInstanceOf( + 'OpenCloud\Common\Api\Operation', + $this->operator->getOperation($this->def, []) + ); + } + + public function test_it_sends_a_request_when_operations_are_executed() + { + $this->client->request('GET', 'test', ['headers' => []])->willReturn(new Request('GET', 'test')); + + $this->operator->execute($this->def, []); + } + + public function test_it_sends_a_request_when_async_operations_are_executed() + { + $this->client->requestAsync('GET', 'test', ['headers' => []])->willReturn(new Promise()); + + $this->operator->executeAsync($this->def, []); + } + + public function test_it_returns_a_model_instance() + { + $this->assertInstanceOf(ResourceInterface::class, $this->operator->model(TestResource::class)); + } + + public function test_it_populates_models_from_response() + { + $this->assertInstanceOf(ResourceInterface::class, $this->operator->model(TestResource::class, new Response(200))); + } + + public function test_it_populates_models_from_arrays() + { + $data = ['flavor' => [], 'image' => []]; + $this->assertInstanceOf(ResourceInterface::class, $this->operator->model(TestResource::class, $data)); + } + + public function test_it_wraps_sequential_ops_in_promise_when_async_is_appended_to_method_name() + { + $promise = $this->operator->createAsync('something'); + + $this->assertInstanceOf(Promise::class, $promise); + + $promise->then(function ($val) { + $this->assertEquals('Created something', $val); + }); + + $promise->wait(); + } + + /** + * @expectedException \RuntimeException + */ + public function test_it_throws_exception_when_async_is_called_on_a_non_existent_method() + { + $this->operator->fooAsync(); + } + + public function test_it_retrieves_base_http_url() + { + $returnedUri = uri_for('http://foo.com'); + + $this->client->getConfig('base_uri')->shouldBeCalled()->willReturn($returnedUri); + + $uri = $this->operator->testBaseUri(); + + $this->assertInstanceOf(Uri::class, $uri); + $this->assertEquals($returnedUri, $uri); + } + + /** + * @expectedException \Exception + */ + public function test_undefined_methods_result_in_error() + { + $this->operator->foo(); + } +} + +class TestResource extends AbstractResource +{ +} + +class TestOperator extends Operator +{ + public function testBaseUri() + { + return $this->getHttpBaseUrl(); + } + + public function create($str) + { + return 'Created ' . $str; + } + + public function fail() + { + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Api/ParameterTest.php b/server/vendor/php-opencloud/common/tests/unit/Common/Api/ParameterTest.php new file mode 100644 index 0000000..65d4760 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Api/ParameterTest.php @@ -0,0 +1,203 @@ +api = new ComputeV2Api(); + + $this->data = $this->api->postServer()['params']['name'] + ['name' => 'name']; + $this->param = new Parameter($this->data); + } + + /** + * @expectedException \RuntimeException + */ + public function test_exception_is_thrown_for_invalid_locations() + { + $data = $this->data; + $data['location'] = 'foo'; + new Parameter($data); + } + + public function test_it_should_provide_access_to_a_name() + { + $this->assertEquals($this->data['name'], $this->param->getName()); + } + + public function test_it_should_use_sentAs_alias_for_name_if_one_is_set() + { + $data = $this->data + ['sentAs' => 'foo']; + $param = new Parameter($data); + + $this->assertEquals($data['sentAs'], $param->getName()); + } + + public function test_it_indicates_whether_it_is_required_or_not() + { + $this->assertTrue($this->param->isRequired()); + } + + public function test_it_indicates_its_item_schema() + { + $data = $this->api->postServer()['params']['networks'] + ['name' => 'networks']; + $param = new Parameter($data); + + $this->assertInstanceOf(self::PARAMETER_CLASS, $param->getItemSchema()); + } + + public function test_it_allows_property_retrieval() + { + $definition = $this->api->postServer()['params']['networks']['items'] + ['name' => 'network']; + $param = new Parameter($definition); + + $this->assertInstanceOf(self::PARAMETER_CLASS, $param->getProperty('uuid')); + } + + public function test_it_indicates_its_path() + { + $path = 'foo.bar.baz'; + $param = new Parameter($this->data + ['path' => $path]); + + $this->assertEquals($path, $param->getPath()); + } + + public function test_it_verifies_a_given_location_with_a_boolean() + { + $this->assertFalse($this->param->hasLocation('foo')); + $this->assertTrue($this->param->hasLocation('json')); + } + + public function test_it_should_return_true_when_required_attributes_are_provided_and_match_their_definitions() + { + $this->assertTrue($this->param->validate('TestName')); + } + + /** + * @expectedException \Exception + */ + public function test_it_throws_exception_when_values_do_not_match_their_definition_types() + { + $data = $this->api->postServer()['params']['networks'] + ['name' => 'networks']; + $param = new Parameter($data); + + $param->validate('a_network!'); // should be an array + } + + /** + * @expectedException \Exception + */ + public function test_it_throws_exception_when_deeply_nested_values_have_wrong_types() + { + $data = $this->api->postServer()['params']['networks'] + ['name' => 'networks']; + + $param = new Parameter($data); + $param->validate(['name' => false]); // value should be a string, not bool + } + + public function test_metadata_properties_are_handled_differently() + { + $params = [ + 'name' => 'metadata', + 'type' => 'object', + 'properties' => [ + 'type' => 'string', + ], + ]; + + $userValues = ['some' => 'value']; + + $param = new Parameter($params); + $this->assertTrue($param->validate($userValues)); + } + + public function test_it_passes_validation_when_array_values_pass() + { + $params = [ + 'name' => 'foo', + 'type' => 'array', + 'items' => ['type' => 'string'], + ]; + + $userVals = ['1', '2', '3']; + + $param = new Parameter($params); + $this->assertTrue($param->validate($userVals)); + } + + /** + * @expectedException \Exception + */ + public function test_an_exception_is_thrown_when_an_undefined_property_is_provided() + { + $params = ['type' => 'object', 'properties' => ['foo' => ['type' => 'string']]]; + $userVals = ['bar' => 'baz']; + + $param = new Parameter($params); + $param->validate($userVals); + } + + public function test_it_passes_validation_when_all_subproperties_pass() + { + $params = ['type' => 'object', 'properties' => ['foo' => ['type' => 'string']]]; + $userVals = ['foo' => 'baz']; + + $param = new Parameter($params); + $this->assertTrue($param->validate($userVals)); + } + + public function test_it_sets_name() + { + $this->param->setName('foo'); + $this->assertEquals($this->param->getName(), 'foo'); + } + + public function test_it_gets_property() + { + $property = new Parameter([ + 'name' => 'metadata', + 'properties' => [ + 'type' => 'string', + 'prefix' => 'foo', + ], + ]); + + $prop = $property->getProperty('metadata'); + + $this->assertInstanceOf(Parameter::class, $prop); + $this->assertEquals('foo', $prop->getPrefix()); + } + + public function test_it_gets_prefixed_name() + { + $property = new Parameter([ + 'name' => 'metadata', + 'prefix' => 'foo-', + ]); + + $this->assertEquals('foo-metadata', $property->getPrefixedName()); + } + + /** + * @expectedException \Exception + */ + public function test_exception_is_thrown_when_value_is_not_in_enum_list() + { + $data = $this->data; + $data['enum'] = ['foo']; + + $param = new Parameter($data); + $param->validate('blah'); + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Api/fixtures/headers.php b/server/vendor/php-opencloud/common/tests/unit/Common/Api/fixtures/headers.php new file mode 100644 index 0000000..f428992 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Api/fixtures/headers.php @@ -0,0 +1,25 @@ + 'POST', + 'path' => 'something', + 'params' => [ + 'name' => [ + 'type' => 'string', + 'location' => 'header', + 'sentAs' => 'X-Foo-Name' + ], + 'age' => [ + 'type' => 'integer', + 'location' => 'header' + ], + 'metadata' => [ + 'type' => 'object', + 'location' => 'header', + 'items' => [ + 'prefix' => 'X-Meta-' + ] + ], + 'other' => ['type' => 'string'] // should not be a header + ], +]; diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Api/fixtures/jsonBody.php b/server/vendor/php-opencloud/common/tests/unit/Common/Api/fixtures/jsonBody.php new file mode 100644 index 0000000..350affd --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Api/fixtures/jsonBody.php @@ -0,0 +1,27 @@ + 'POST', + 'path' => 'something', + 'params' => [ + 'name' => [ + 'type' => 'string', + 'sentAs' => 'server_name', + ], + 'other' => [ + 'type' => 'array', + 'sentAs' => 'other_params', + 'items' => [ + 'type' => 'string' + ] + ], + 'etc' => [ + 'type' => 'object', + 'sentAs' => 'etcetc', + 'properties' => [ + 'dob' => ['type' => 'string'], + 'age' => ['type' => 'integer', 'sentAs' => 'current_age'], + ] + ], + ], +]; diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/ArrayAccessTraitTest.php b/server/vendor/php-opencloud/common/tests/unit/Common/ArrayAccessTraitTest.php new file mode 100644 index 0000000..f5d1fdb --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/ArrayAccessTraitTest.php @@ -0,0 +1,59 @@ +aa = new ArrayAccess(); + } + + public function test_offset_is_set() + { + $this->aa->offsetSet('foo', 'bar'); + $this->assertEquals(['foo' => 'bar'], $this->aa->getElements()); + } + + public function test_it_appends_if_no_key_is_set() + { + $this->aa->offsetSet(null, 'bar'); + $this->assertEquals(['bar'], $this->aa->getElements()); + } + + public function test_if_checks_if_offset_exists() + { + $this->aa->offsetSet('bar', 'foo'); + $this->assertTrue($this->aa->offsetExists('bar')); + $this->assertFalse($this->aa->offsetExists('baz')); + } + + public function test_if_gets_offset() + { + $this->aa->offsetSet('bar', 'foo'); + $this->assertEquals('foo', $this->aa->offsetGet('bar')); + $this->assertNull($this->aa->offsetGet('baz')); + } + + public function test_it_unsets_offset() + { + $this->aa->offsetSet('bar', 'foo'); + $this->aa->offsetUnset('bar'); + $this->assertNull($this->aa->offsetGet('bar')); + } +} + +class ArrayAccess +{ + use ArrayAccessTrait; + + public function getElements() + { + return $this->internalState; + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Auth/AuthHandlerTest.php b/server/vendor/php-opencloud/common/tests/unit/Common/Auth/AuthHandlerTest.php new file mode 100644 index 0000000..3c77dde --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Auth/AuthHandlerTest.php @@ -0,0 +1,59 @@ +generator = function () { + $token = $this->prophesize(FakeToken::class); + $token->getId()->shouldBeCalled()->willReturn(self::TOKEN_ID); + return $token->reveal(); + }; + + $this->handler = function (RequestInterface $r) { + return $r; + }; + + $this->handler = new AuthHandler($this->handler, $this->generator); + } + + public function test_it_should_bypass_auth_http_requests() + { + // Fake a Keystone request + $request = new Request('POST', 'https://my-openstack.org:5000/v2.0/tokens'); + + $this->assertEquals($request, call_user_func_array($this->handler, [$request, []])); + } + + public function test_it_should_generate_a_new_token_if_the_current_token_is_either_expired_or_not_set() + { + $token = $this->prophesize(Token::class); + + // force the mock token to indicate that its expired + $token->getId()->willReturn(''); + $token->hasExpired()->willReturn(true); + + $request = new Request('GET', ''); + + $handler = new AuthHandler($this->handler, $this->generator, $token->reveal()); + $handler($request, []); + } +} + +class FakeToken implements Token { + public function getId() {} + public function hasExpired() {} +} \ No newline at end of file diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/DateTime.php b/server/vendor/php-opencloud/common/tests/unit/Common/DateTime.php new file mode 100644 index 0000000..512ba30 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/DateTime.php @@ -0,0 +1,16 @@ +format(self::ISO8601); + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Error/BadResponseErrorTest.php b/server/vendor/php-opencloud/common/tests/unit/Common/Error/BadResponseErrorTest.php new file mode 100644 index 0000000..7aa4bf1 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Error/BadResponseErrorTest.php @@ -0,0 +1,34 @@ +e = new BadResponseError(); + } + + public function test_it_gets_request() + { + $r = new Request('GET', ''); + + $this->e->setRequest($r); + $this->assertEquals($this->e->getRequest(), $r); + } + + public function test_it_gets_response() + { + $r = new Response(500); + + $this->e->setResponse($r); + $this->assertEquals($this->e->getResponse(), $r); + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Error/BuilderTest.php b/server/vendor/php-opencloud/common/tests/unit/Common/Error/BuilderTest.php new file mode 100644 index 0000000..e23806d --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Error/BuilderTest.php @@ -0,0 +1,117 @@ +client = $this->prophesize(ClientInterface::class); + $this->builder = new Builder($this->client->reveal()); + } + + public function test_it_injects_client() + { + $this->assertInstanceOf(Builder::class, new Builder($this->client->reveal())); + } + + public function test_it_builds_http_errors() + { + $request = new Request('POST', '/servers'); + $response = new Response(400, [], stream_for('Invalid parameters')); + + $requestStr = trim($this->builder->str($request)); + $responseStr = trim($this->builder->str($response)); + + $errorMessage = <<setRequest($request); + $e->setResponse($response); + + $this->assertEquals($e, $this->builder->httpError($request, $response)); + } + + public function test_it_builds_user_input_errors() + { + $expected = 'A well-formed string'; + $value = ['foo' => true]; + $link = 'http://docs.php-opencloud.com/en/latest/index.html'; + + $errorMessage = << 1 +) + +Please ensure that the value adheres to the expectation above. Visit $link for more information about input arguments. If you run into trouble, please open a support issue on https://github.com/php-opencloud/openstack/issues. +EOT; + + $this->client + ->request('HEAD', $link) + ->shouldBeCalled() + ->willReturn(new Response(200)); + + $e = new UserInputError($errorMessage); + + $this->assertEquals($e, $this->builder->userInputError($expected, $value, 'index.html')); + } + + public function test_dead_links_are_ignored() + { + $expected = 'A well-formed string'; + $value = ['foo' => true]; + + $errorMessage = << 1 +) + +Please ensure that the value adheres to the expectation above. If you run into trouble, please open a support issue on https://github.com/php-opencloud/openstack/issues. +EOT; + + $this->client + ->request('HEAD', 'http://docs.php-opencloud.com/en/latest/sdffsda') + ->shouldBeCalled() + ->willThrow(ClientException::class); + + $e = new UserInputError($errorMessage); + + $this->assertEquals($e, $this->builder->userInputError($expected, $value, 'sdffsda')); + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/HydratorStrategyTraitTes.php b/server/vendor/php-opencloud/common/tests/unit/Common/HydratorStrategyTraitTes.php new file mode 100644 index 0000000..6841002 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/HydratorStrategyTraitTes.php @@ -0,0 +1,52 @@ +fixture = new Fixture(); + } + + public function test_it_hydrates() + { + $data = ['foo' => 1, 'bar' => 2, 'baz' => 3, 'boo' => 4]; + + $this->fixture->hydrate($data); + + $this->assertEquals(1, $this->fixture->foo); + $this->assertEquals(2, $this->fixture->getBar()); + $this->assertEquals(3, $this->fixture->getBaz()); + } + + public function test_it_hydrates_aliases() + { + $this->fixture->hydrate(['FOO!' => 1], ['FOO!' => 'foo']); + + $this->assertEquals(1, $this->fixture->foo); + } +} + +class Fixture +{ + public $foo; + protected $bar; + private $baz; + + use HydratorStrategyTrait; + + public function getBar() + { + return $this->bar; + } + public function getBaz() + { + return $this->baz; + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/JsonPathTest.php b/server/vendor/php-opencloud/common/tests/unit/Common/JsonPathTest.php new file mode 100644 index 0000000..1410076 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/JsonPathTest.php @@ -0,0 +1,70 @@ +jsonPath = new JsonPath([]); + } + + public function test_it_sets_values_according_to_paths() + { + $this->jsonPath->set('foo.bar.baz', 'VALUE'); + + $expected = [ + 'foo' => [ + 'bar' => [ + 'baz' => 'VALUE', + ] + ] + ]; + + $this->assertEquals($expected, $this->jsonPath->getStructure()); + } + + public function test_it_sets_arrays_according_to_paths() + { + $jsonPath = new JsonPath([ + 'foo' => [ + 'bar' => [ + 'value' => 'VALUE', + ] + ] + ]); + + $jsonPath->set('foo.bar.items', ['item_1', 'item_2']); + + $expected = [ + 'foo' => [ + 'bar' => [ + 'value' => 'VALUE', + 'items' => ['item_1', 'item_2'], + ] + ] + ]; + + $this->assertEquals($expected, $jsonPath->getStructure()); + } + + public function test_it_gets_values_according_to_paths() + { + $jsonPath = new JsonPath([ + 'foo' => [ + 'bar' => [ + 'baz' => 'VALUE_1', + 'lol' => 'VALUE_2', + ] + ] + ]); + + $this->assertEquals('VALUE_1', $jsonPath->get('foo.bar.baz')); + $this->assertEquals('VALUE_2', $jsonPath->get('foo.bar.lol')); + $this->assertNull($jsonPath->get('foo.bar.boo')); + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/JsonSchema/Fixtures/jsonPatchTests.json b/server/vendor/php-opencloud/common/tests/unit/Common/JsonSchema/Fixtures/jsonPatchTests.json new file mode 100644 index 0000000..e7f3579 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/JsonSchema/Fixtures/jsonPatchTests.json @@ -0,0 +1,231 @@ +[ + { "comment": "empty list, empty docs", + "doc": {}, + "patch": [], + "expected": {} }, + + { "comment": "empty patch list", + "doc": {"foo": 1}, + "patch": [], + "expected": {"foo": 1} }, + + { "comment": "rearrangements OK?", + "doc": {"foo": 1, "bar": 2}, + "patch": [], + "expected": {"bar":2, "foo": 1} }, + + { "comment": "rearrangements OK? How about one level down ... array", + "doc": [{"foo": 1, "bar": 2}], + "patch": [], + "expected": [{"bar":2, "foo": 1}] }, + + { "comment": "rearrangements OK? How about one level down...", + "doc": {"foo":{"foo": 1, "bar": 2}}, + "patch": [], + "expected": {"foo":{"bar":2, "foo": 1}} }, + + { "comment": "toplevel array", + "doc": [], + "patch": [{"op": "add", "path": "/0", "value": "foo"}], + "expected": ["foo"] }, + + { "comment": "toplevel array, no change", + "doc": ["foo"], + "patch": [], + "expected": ["foo"] }, + + { "comment": "toplevel object, numeric string", + "doc": {}, + "patch": [{"op": "add", "path": "/foo", "value": "1"}], + "expected": {"foo":"1"} }, + + { "comment": "toplevel object, integer", + "doc": {}, + "patch": [{"op": "add", "path": "/foo", "value": 1}], + "expected": {"foo":1} }, + + { "comment": "Toplevel scalar values OK?", + "doc": "foo", + "patch": [{"op": "replace", "path": "", "value": "bar"}], + "expected": "bar", + "disabled": true }, + + { "comment": "Add, / target", + "doc": {}, + "patch": [ {"op": "add", "path": "/", "value":1 } ], + "expected": {"":1} }, + + { "comment": "Add composite value at top level", + "doc": {"foo": 1}, + "patch": [{"op": "add", "path": "/bar", "value": [1, 2]}], + "expected": {"foo": 1, "bar": [1, 2]} }, + + { "comment": "Add into composite value", + "doc": {"foo": 1, "baz": [{"qux": "hello"}]}, + "patch": [{"op": "add", "path": "/baz/0/foo", "value": "world"}], + "expected": {"foo": 1, "baz": [{"qux": "hello", "foo": "world"}]} }, + + { "doc": {"bar": [1, 2]}, + "patch": [{"op": "add", "path": "/bar/8", "value": "5"}], + "error": "Out of bounds (upper)" }, + + { "doc": {"bar": [1, 2]}, + "patch": [{"op": "add", "path": "/bar/-1", "value": "5"}], + "error": "Out of bounds (lower)" }, + + { "doc": {"foo": 1}, + "patch": [{"op": "add", "path": "/bar", "value": true}], + "expected": {"foo": 1, "bar": true} }, + + { "doc": {"foo": 1}, + "patch": [{"op": "add", "path": "/bar", "value": false}], + "expected": {"foo": 1, "bar": false} }, + + { "doc": {"foo": 1}, + "patch": [{"op": "add", "path": "/bar", "value": null}], + "expected": {"foo": 1, "bar": null} }, + + { "comment": "0 can be an array index or object element name", + "doc": {"foo": 1}, + "patch": [{"op": "add", "path": "/0", "value": "bar"}], + "expected": {"foo": 1, "0": "bar" } }, + + { "doc": ["foo"], + "patch": [{"op": "add", "path": "/1", "value": "bar"}], + "expected": ["foo", "bar"] }, + + { "doc": ["foo", "sil"], + "patch": [{"op": "add", "path": "/1", "value": "bar"}], + "expected": ["foo", "bar", "sil"] }, + + { "doc": ["foo", "sil"], + "patch": [{"op": "add", "path": "/0", "value": "bar"}], + "expected": ["bar", "foo", "sil"] }, + + { "comment": "push item to array via last index + 1", + "doc": ["foo", "sil"], + "patch": [{"op":"add", "path": "/2", "value": "bar"}], + "expected": ["foo", "sil", "bar"] }, + + { "comment": "add item to array at index > length should fail", + "doc": ["foo", "sil"], + "patch": [{"op":"add", "path": "/3", "value": "bar"}], + "error": "index is greater than number of items in array" }, + + { "doc": ["foo", "sil"], + "patch": [{"op": "add", "path": "/bar", "value": 42}], + "error": "Object operation on array target" }, + + { "doc": ["foo", "sil"], + "patch": [{"op": "add", "path": "/1", "value": ["bar", "baz"]}], + "expected": ["foo", ["bar", "baz"], "sil"], + "comment": "value in array add not flattened" }, + + { "doc": {"foo": 1, "bar": [1, 2, 3, 4]}, + "patch": [{"op": "remove", "path": "/bar"}], + "expected": {"foo": 1} }, + + { "doc": {"foo": 1, "baz": [{"qux": "hello"}]}, + "patch": [{"op": "remove", "path": "/baz/0/qux"}], + "expected": {"foo": 1, "baz": [{}]} }, + + { "doc": {"foo": 1, "baz": [{"qux": "hello"}]}, + "patch": [{"op": "replace", "path": "/foo", "value": [1, 2, 3, 4]}], + "expected": {"foo": [1, 2, 3, 4], "baz": [{"qux": "hello"}]} }, + + { "doc": {"foo": [1, 2, 3, 4], "baz": [{"qux": "hello"}]}, + "patch": [{"op": "replace", "path": "/baz/0/qux", "value": "world"}], + "expected": {"foo": [1, 2, 3, 4], "baz": [{"qux": "world"}]} }, + + { "doc": ["foo"], + "patch": [{"op": "replace", "path": "/0", "value": "bar"}], + "expected": ["bar"] }, + + { "doc": [""], + "patch": [{"op": "replace", "path": "/0", "value": 0}], + "expected": [0] }, + + { "doc": [""], + "patch": [{"op": "replace", "path": "/0", "value": true}], + "expected": [true] }, + + { "doc": [""], + "patch": [{"op": "replace", "path": "/0", "value": false}], + "expected": [false] }, + + { "doc": [""], + "patch": [{"op": "replace", "path": "/0", "value": null}], + "expected": [null] }, + + { "doc": ["foo", "sil"], + "patch": [{"op": "replace", "path": "/1", "value": ["bar", "baz"]}], + "expected": ["foo", ["bar", "baz"]], + "comment": "value in array replace not flattened" }, + + { "comment": "replace whole document", + "disabled": true, + "doc": {"foo": "bar"}, + "patch": [{"op": "replace", "path": "", "value": {"baz": "qux"}}], + "expected": {"baz": "qux"} }, + + { "doc": {"foo": null}, + "patch": [{"op": "replace", "path": "/foo", "value": "truthy"}], + "expected": {"foo": "truthy"}, + "comment": "null value should be valid obj property to be replaced with something truthy" }, + + { "doc": {"foo": null}, + "patch": [{"op": "remove", "path": "/foo"}], + "expected": {}, + "comment": "null value should be valid obj property to be removed" }, + + { "doc": {"foo": "bar"}, + "patch": [{"op": "replace", "path": "/foo", "value": null}], + "expected": {"foo": null}, + "comment": "null value should still be valid obj property replace other value" }, + + { "comment": "test remove with bad number should fail", + "doc": {"foo": 1, "baz": [{"qux": "hello"}]}, + "patch": [{"op": "remove", "path": "/baz/1e0/qux"}], + "error": "remove op shouldn't remove from array with bad number" }, + + { "comment": "test remove on array", + "doc": [1, 2, 3, 4], + "patch": [{"op": "remove", "path": "/0"}], + "expected": [2, 3, 4] }, + + { "comment": "test repeated removes", + "doc": [1, 2, 3, 4], + "patch": [{ "op": "remove", "path": "/1" }, + { "op": "remove", "path": "/3" }], + "expected": [1, 3] }, + + { "comment": "test remove with bad index should fail", + "doc": [1, 2, 3, 4], + "patch": [{"op": "remove", "path": "/1e0"}], + "error": "remove op shouldn't remove from array with bad number" }, + + { "comment": "test replace with bad number should fail", + "doc": [""], + "patch": [{"op": "replace", "path": "/1e0", "value": false}], + "error": "replace op shouldn't replace in array with bad number" }, + + { "comment": "test add with bad number should fail", + "doc": ["foo", "sil"], + "patch": [{"op": "add", "path": "/1e0", "value": "bar"}], + "error": "add op shouldn't add to array with bad number" }, + + { "comment": "missing 'value' parameter to add", + "doc": [ 1 ], + "patch": [ { "op": "add", "path": "/-" } ], + "error": "missing 'value' parameter" }, + + { "comment": "missing 'value' parameter to replace", + "doc": [ 1 ], + "patch": [ { "op": "replace", "path": "/0" } ], + "error": "missing 'value' parameter" }, + + { "comment": "unrecognized op should fail", + "doc": {"foo": 1}, + "patch": [{"op": "spam", "path": "/foo", "value": 1}], + "error": "Unrecognized op 'spam'" } +] \ No newline at end of file diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/JsonSchema/JsonPatchTest.php b/server/vendor/php-opencloud/common/tests/unit/Common/JsonSchema/JsonPatchTest.php new file mode 100644 index 0000000..ee7db9e --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/JsonSchema/JsonPatchTest.php @@ -0,0 +1,28 @@ +disabled) || !isset($fixture->expected)) { + continue; + } + + $actual = JsonPatch::diff($fixture->doc, $fixture->expected); + + $this->assertEquals( + json_encode($fixture->patch, JSON_UNESCAPED_SLASHES), + json_encode($actual, JSON_UNESCAPED_SLASHES), + isset($fixture->comment) ? sprintf("Failed asserting test: %s\n", $fixture->comment) : '' + ); + } + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/JsonSchema/SchemaTest.php b/server/vendor/php-opencloud/common/tests/unit/Common/JsonSchema/SchemaTest.php new file mode 100644 index 0000000..22663ef --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/JsonSchema/SchemaTest.php @@ -0,0 +1,102 @@ +body = [ + 'properties' => [ + 'foo' => (object)[], + 'bar' => (object)[], + 'baz' => (object)['readOnly' => true], + ], + ]; + + $this->validator = $this->prophesize(Validator::class); + $this->schema = new Schema($this->body, $this->validator->reveal()); + } + + public function test_it_gets_errors() + { + $this->validator->getErrors() + ->shouldBeCalled() + ->willReturn([]); + + $this->assertEquals([], $this->schema->getErrors()); + } + + public function test_it_gets_error_string() + { + $this->validator->getErrors() + ->shouldBeCalled() + ->willReturn([['property' => 'foo', 'message' => 'bar']]); + + $errorMsg = sprintf("Provided values do not validate. Errors:\n[foo] bar\n"); + + $this->assertEquals($errorMsg, $this->schema->getErrorString()); + } + + public function test_it_gets_property_paths() + { + $this->assertEquals(['/foo', '/bar', '/baz'], $this->schema->getPropertyPaths()); + } + + public function test_it_ignores_readOnly_attrs() + { + $expected = (object)[ + 'foo' => true, + 'bar' => false, + ]; + + $subject = (object)[ + 'foo' => true, + 'bar' => false, + 'baz' => true, + ]; + + $this->assertEquals((object)$expected, $this->schema->normalizeObject((object)$subject, [])); + } + + public function test_it_stocks_aliases() + { + $subject = (object)[ + 'fooAlias' => true, + 'bar' => false, + 'other' => true, + ]; + + $expected = (object)[ + 'foo' => true, + 'bar' => false, + ]; + + $this->assertEquals($expected, $this->schema->normalizeObject($subject, ['foo' => 'fooAlias', 'bar' => 'lol'])); + } + + public function test_it_validates() + { + $this->validator->check([], (object) $this->body)->shouldBeCalled(); + + $this->schema->validate([]); + } + + public function test_it_checks_validity() + { + $this->validator->isValid()->shouldBeCalled(); + + $this->schema->isValid(); + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Resource/AbstractResourceTest.php b/server/vendor/php-opencloud/common/tests/unit/Common/Resource/AbstractResourceTest.php new file mode 100644 index 0000000..f334292 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Resource/AbstractResourceTest.php @@ -0,0 +1,161 @@ +rootFixturesDir = __DIR__; + $this->resource = new TestResource($this->client->reveal(), new ComputeV2Api()); + } + + public function test_it_populates_from_response() + { + $response = new Response(200, ['Content-Type' => 'application/json'], stream_for( + json_encode(['foo' => ['bar' => '1']]) + )); + + $this->resource->populateFromResponse($response); + + $this->assertEquals('1', $this->resource->bar); + } + + public function test_it_populates_datetimes_from_arrays() + { + $dt = new \DateTimeImmutable('2015'); + + $this->resource->populateFromArray(['created' => '2015']); + + $this->assertEquals($this->resource->created, $dt); + } + + public function test_it_populates_arrays_from_arrays() + { + $this->resource->populateFromArray(['children' => [$this->resource, $this->resource]]); + + $this->assertInstanceOf(TestResource::class, $this->resource->children[0]); + } + + public function test_it_gets_attrs() + { + $this->resource->bar = 'foo'; + + $this->assertEquals(['bar' => 'foo'], $this->resource->getAttrs(['bar'])); + } + + public function test_it_executes_with_state() + { + $this->resource->id = 'foo'; + $this->resource->bar = 'bar'; + + $expectedJson = ['id' => 'foo', 'bar' => 'bar']; + + $this->setupMock('GET', 'foo', $expectedJson, [], new Response(204)); + + $this->resource->executeWithState((new ComputeV2Api())->test()); + } + + public function test_it_executes_operations_until_a_204_is_received() + { + $this->client + ->request('GET', 'servers', ['headers' => []]) + ->shouldBeCalled() + ->willReturn($this->getFixture('servers-page1')); + + $this->client + ->request('GET', 'servers', ['query' => ['marker' => '5'], 'headers' => []]) + ->shouldBeCalled() + ->willReturn(new Response(204)); + + $count = 0; + + $api = new ComputeV2Api(); + + foreach ($this->resource->enumerate($api->getServers()) as $item) { + $count++; + $this->assertInstanceOf(TestResource::class, $item); + } + + $this->assertEquals(5, $count); + } + + public function test_it_invokes_function_if_provided() + { + $this->client + ->request('GET', 'servers', ['headers' => []]) + ->shouldBeCalled() + ->willReturn($this->getFixture('servers-page1')); + + $this->client + ->request('GET', 'servers', ['query' => ['marker' => '5'], 'headers' => []]) + ->shouldBeCalled() + ->willReturn(new Response(204)); + + $api = new ComputeV2Api(); + + $count = 0; + + $fn = function () use (&$count) { + $count++; + }; + + foreach ($this->resource->enumerate($api->getServers(), [], $fn) as $item) { + } + + $this->assertEquals(5, $count); + } + + public function test_it_halts_when_user_provided_limit_is_reached() + { + $this->client + ->request('GET', 'servers', ['query' => ['limit' => 2], 'headers' => []]) + ->shouldBeCalled() + ->willReturn($this->getFixture('servers-page1')); + + $count = 0; + + $api = new ComputeV2Api(); + + foreach ($this->resource->enumerate($api->getServers(), ['limit' => 2]) as $item) { + $count++; + } + + $this->assertEquals(2, $count); + } +} + +class TestResource extends AbstractResource +{ + protected $resourceKey = 'foo'; + protected $resourcesKey = 'servers'; + protected $markerKey = 'id'; + + /** @var string */ + public $bar; + + public $id; + + /** @var \DateTimeImmutable */ + public $created; + + /** @var []TestResource */ + public $children; + + public function getAttrs(array $keys) + { + return parent::getAttrs($keys); + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Resource/Fixtures/servers-empty.resp b/server/vendor/php-opencloud/common/tests/unit/Common/Resource/Fixtures/servers-empty.resp new file mode 100644 index 0000000..655a35b --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Resource/Fixtures/servers-empty.resp @@ -0,0 +1,6 @@ +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "servers": [] +} \ No newline at end of file diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Resource/Fixtures/servers-page1.resp b/server/vendor/php-opencloud/common/tests/unit/Common/Resource/Fixtures/servers-page1.resp new file mode 100644 index 0000000..adebcaf --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Resource/Fixtures/servers-page1.resp @@ -0,0 +1,77 @@ +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "servers": [ + { + "id": "1", + "links": [ + { + "href": "http://openstack.example.com/v2/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "self" + }, + { + "href": "http://openstack.example.com/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "bookmark" + } + ], + "name": "server1" + }, + { + "id": "2", + "links": [ + { + "href": "http://openstack.example.com/v2/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "self" + }, + { + "href": "http://openstack.example.com/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "bookmark" + } + ], + "name": "server2" + }, + { + "id": "3", + "links": [ + { + "href": "http://openstack.example.com/v2/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "self" + }, + { + "href": "http://openstack.example.com/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "bookmark" + } + ], + "name": "server3" + }, + { + "id": "4", + "links": [ + { + "href": "http://openstack.example.com/v2/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "self" + }, + { + "href": "http://openstack.example.com/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "bookmark" + } + ], + "name": "server4" + }, + { + "id": "5", + "links": [ + { + "href": "http://openstack.example.com/v2/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "self" + }, + { + "href": "http://openstack.example.com/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "bookmark" + } + ], + "name": "server5" + } + ] +} \ No newline at end of file diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Resource/Fixtures/servers-page2.resp b/server/vendor/php-opencloud/common/tests/unit/Common/Resource/Fixtures/servers-page2.resp new file mode 100644 index 0000000..6be6b04 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Resource/Fixtures/servers-page2.resp @@ -0,0 +1,77 @@ +HTTP/1.1 200 OK +Content-Type: application/json + +{ + "servers": [ + { + "id": "6", + "links": [ + { + "href": "http://openstack.example.com/v2/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "self" + }, + { + "href": "http://openstack.example.com/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "bookmark" + } + ], + "name": "server6" + }, + { + "id": "7", + "links": [ + { + "href": "http://openstack.example.com/v2/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "self" + }, + { + "href": "http://openstack.example.com/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "bookmark" + } + ], + "name": "server7" + }, + { + "id": "8", + "links": [ + { + "href": "http://openstack.example.com/v2/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "self" + }, + { + "href": "http://openstack.example.com/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "bookmark" + } + ], + "name": "server8" + }, + { + "id": "9", + "links": [ + { + "href": "http://openstack.example.com/v2/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "self" + }, + { + "href": "http://openstack.example.com/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "bookmark" + } + ], + "name": "server9" + }, + { + "id": "10", + "links": [ + { + "href": "http://openstack.example.com/v2/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "self" + }, + { + "href": "http://openstack.example.com/openstack/servers/616fb98f-46ca-475e-917e-2563e5a8cd19", + "rel": "bookmark" + } + ], + "name": "server10" + } + ] +} \ No newline at end of file diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Service/BuilderTest.php b/server/vendor/php-opencloud/common/tests/unit/Common/Service/BuilderTest.php new file mode 100644 index 0000000..09e9918 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Service/BuilderTest.php @@ -0,0 +1,164 @@ +builder = new Builder([]); + + $this->opts = [ + 'username' => '1', + 'password' => '2', + 'tenantId' => '3', + 'authUrl' => '4', + 'region' => '5', + 'catalogName' => '6', + 'catalogType' => '7', + ]; + } + + /** + * @expectedException \Exception + */ + public function test_it_throws_exception_if_username_is_missing() + { + $this->builder->createService('Compute', 2, []); + } + + /** + * @expectedException \Throwable + */ + public function test_it_throws_exception_if_password_is_missing() + { + $this->builder->createService('Compute', 2, ['username' => 1]); + } + + /** + * @expectedException \Throwable + */ + public function test_it_throws_exception_if_both_tenantId_and_tenantName_is_missing() + { + $this->builder->createService('Compute', 2, [ + 'username' => 1, 'password' => 2, 'authUrl' => 4, 'region' => 5, 'catalogName' => 6, 'catalogType' => 7, + ]); + } + + /** + * @expectedException \Throwable + */ + public function test_it_throws_exception_if_authUrl_is_missing() + { + $this->builder->createService('Compute', 2, ['username' => 1, 'password' => 2, 'tenantId' => 3]); + } + + /** + * @expectedException \Throwable + */ + public function test_it_throws_exception_if_region_is_missing() + { + $this->builder->createService('Compute', 2, [ + 'username' => 1, 'password' => 2, 'tenantId' => 3, 'authUrl' => 4, + ]); + } + + /** + * @expectedException \Throwable + */ + public function test_it_throws_exception_if_catalogName_is_missing() + { + $this->builder->createService('Compute', 2, [ + 'username' => 1, 'password' => 2, 'tenantId' => 3, 'authUrl' => 4, + ]); + } + + /** + * @expectedException \Throwable + */ + public function test_it_throws_exception_if_catalogType_is_missing() + { + $this->builder->createService('Compute', 2, [ + 'username' => 1, 'password' => 2, 'tenantId' => 3, 'authUrl' => 4, 'region' => 5, 'catalogName' => 6, + ]); + } + +// public function test_it_builds_services_with_custom_identity_service() +// { +// $this->rootFixturesDir = dirname(dirname(__DIR__)) . '/Identity/v2/'; +// +// $token = $this->prophesize(FakeToken::class)->reveal(); +// $service = $this->prophesize(IdentityService::class); +// $service->authenticate(Argument::type('array'))->shouldBeCalled()->willReturn([$token, '']); +// +// $this->opts += [ +// 'identityService' => $service->reveal(), +// 'catalogName' => 'nova', +// 'catalogType' => 'compute', +// 'region' => 'RegionOne', +// ]; +// +// $service = $this->builder->createService('Compute', 2, $this->opts); +// $this->assertInstanceOf(ComputeV2::class, $service); +// } + + private function setupHttpClient() + { + $this->rootFixturesDir = dirname(dirname(__DIR__)) . '/Identity/v3/'; + + $response = $this->getFixture('token-get'); + + $expectedJson = [ + 'auth' => [ + 'identity' => [ + 'methods' => ['password'], + 'password' => ['user' => ['id' => '0ca8f6', 'password' => 'secretsecret']] + ] + ] + ]; + + $httpClient = $this->prophesize(ClientInterface::class); + $httpClient->request('POST', 'tokens', ['json' => $expectedJson])->shouldBeCalled()->willReturn($response); + + return $httpClient; + } + + public function it_builds_services_with_default_identity() + { + $httpClient = $this->setupHttpClient(); + + $options = [ + 'httpClient' => $httpClient->reveal(), + 'catalogName' => 'nova', + 'catalogType' => 'compute', + 'region' => 'RegionOne', + 'user' => [ + 'id' => '0ca8f6', + 'password' => 'secretsecret', + ] + ]; + + $service = $this->builder->createService('Compute', 2, $options); + $this->assertInstanceOf(ComputeV2::class, $service); + } + +// public function test_it_does_not_authenticate_when_creating_identity_services() +// { +// $this->assertInstanceOf(IdentityV3::class, $this->builder->createService('Identity', 3, [ +// 'authUrl' => 'foo.com', +// ])); +// } +} \ No newline at end of file diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Transport/HandlerStackTest.php b/server/vendor/php-opencloud/common/tests/unit/Common/Transport/HandlerStackTest.php new file mode 100644 index 0000000..ec1cf85 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Transport/HandlerStackTest.php @@ -0,0 +1,15 @@ +assertInstanceOf(HandlerStack::class, HandlerStack::create(new MockHandler())); + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Transport/JsonSerializerTest.php b/server/vendor/php-opencloud/common/tests/unit/Common/Transport/JsonSerializerTest.php new file mode 100644 index 0000000..9075594 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Transport/JsonSerializerTest.php @@ -0,0 +1,85 @@ +serializer = new JsonSerializer(); + } + + public function test_it_embeds_params_according_to_path() + { + $param = $this->prophesize(Parameter::class); + $param->isArray()->shouldBeCalled()->willReturn(false); + $param->isObject()->shouldBeCalled()->willReturn(false); + $param->getName()->shouldBeCalled()->willReturn('username'); + $param->getPath()->shouldBeCalled()->willReturn('auth.passwordCredentials'); + + $userValue = 'fooBar'; + + $expected = [ + 'auth' => [ + 'passwordCredentials' => [ + 'username' => $userValue, + ], + ], + ]; + + $actual = $this->serializer->stockJson($param->reveal(), $userValue, []); + + $this->assertEquals($expected, $actual); + } + + public function test_it_serializes_arrays() + { + $param = $this->prophesize(Parameter::class); + $param->isArray()->shouldBeCalled()->willReturn(true); + $param->getName()->shouldBeCalled()->willReturn('fooBar'); + $param->getPath()->shouldBeCalled()->willReturn(false); + + $itemSchema = $this->prophesize(Parameter::class); + $itemSchema->isArray()->shouldBeCalled()->willReturn(false); + $itemSchema->isObject()->shouldBeCalled()->willReturn(false); + $itemSchema->getName()->shouldBeCalled()->willReturn(null); + $itemSchema->getPath()->shouldBeCalled()->willReturn(null); + + $param->getItemSchema()->shouldBeCalled()->willReturn($itemSchema); + + $userValues = ['1', '2', '3']; + + $expected = ['fooBar' => $userValues]; + + $actual = $this->serializer->stockJson($param->reveal(), $userValues, []); + + $this->assertEquals($expected, $actual); + } + + public function test_it_serializes_objects() + { + $prop = $this->prophesize(Parameter::class); + $prop->isArray()->shouldBeCalled()->willReturn(false); + $prop->isObject()->shouldBeCalled()->willReturn(false); + $prop->getName()->shouldBeCalled()->willReturn('foo'); + $prop->getPath()->shouldBeCalled()->willReturn(null); + + $param = $this->prophesize(Parameter::class); + $param->isArray()->shouldBeCalled()->willReturn(false); + $param->isObject()->shouldBeCalled()->willReturn(true); + $param->getName()->shouldBeCalled()->willReturn('topLevel'); + $param->getPath()->shouldBeCalled()->willReturn(false); + $param->getProperty('foo')->shouldBeCalled()->willReturn($prop); + + $expected = ['topLevel' => ['foo' => true]]; + + $json = $this->serializer->stockJson($param->reveal(), ['foo' => true], []); + + $this->assertEquals($expected, $json); + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Transport/MiddlewareTest.php b/server/vendor/php-opencloud/common/tests/unit/Common/Transport/MiddlewareTest.php new file mode 100644 index 0000000..c445783 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Transport/MiddlewareTest.php @@ -0,0 +1,59 @@ +assertEquals('pending', $promise->getState()); + + $promise->wait(); + $this->assertEquals('rejected', $promise->getState()); + } + + public function test_responses_are_left_alone_when_status_under_400() + { + $middleware = Middleware::httpErrors(); + + $response = new Response(204); + $handler = new MockHandler([$response]); + $fn = $middleware($handler); + + $promise = $fn(new Request('GET', 'http://foo.com'), []); + + $promise->then(function ($val) use ($response) { + $this->assertEquals($val, $response); + }); + + $promise->wait(); + } + + public function test_auth_handler_is_returned() + { + $generator = function () {}; + + $middleware = Middleware::authHandler($generator); + + $handler = new MockHandler([new Response(204)]); + $fn = $middleware($handler); + + $this->assertInstanceOf(AuthHandler::class, $fn); + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Transport/RequestSerializerTest.php b/server/vendor/php-opencloud/common/tests/unit/Common/Transport/RequestSerializerTest.php new file mode 100644 index 0000000..cf06220 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Transport/RequestSerializerTest.php @@ -0,0 +1,112 @@ +js = $this->prophesize(JsonSerializer::class); + + $this->rs = new RequestSerializer($this->js->reveal()); + } + + public function test_it_ignores_undefined_params() + { + $op = $this->prophesize(Operation::class); + $op->getParam('foo')->shouldBeCalled()->willReturn(null); + + $this->assertEquals(['headers' => []], $this->rs->serializeOptions($op->reveal(), ['foo' => 'bar'])); + } + + public function test_it_serializes_queries() + { + $sch = $this->prophesize(Parameter::class); + $sch->getName()->shouldBeCalled()->willReturn('fooAlias'); + $sch->getLocation()->shouldBeCalled()->willReturn('query'); + + $op = $this->prophesize(Operation::class); + $op->getParam('foo')->shouldBeCalled()->willReturn($sch); + + $actual = $this->rs->serializeOptions($op->reveal(), ['foo' => 'bar']); + $expected = ['query' => ['fooAlias' => 'bar'], 'headers' => []]; + + $this->assertEquals($expected, $actual); + } + + public function test_it_serializes_headers() + { + $sch = $this->prophesize(Parameter::class); + $sch->getLocation()->shouldBeCalled()->willReturn('header'); + $sch->getName()->shouldBeCalled()->willReturn('fooAlias'); + $sch->getPrefixedName()->shouldBeCalled()->willReturn('prefix-fooAlias'); + + $op = $this->prophesize(Operation::class); + $op->getParam('foo')->shouldBeCalled()->willReturn($sch); + + $actual = $this->rs->serializeOptions($op->reveal(), ['foo' => 'bar']); + $expected = ['headers' => ['prefix-fooAlias' => 'bar']]; + + $this->assertEquals($expected, $actual); + } + + public function test_it_serializes_metadata_headers() + { + $itemSch = $this->prophesize(Parameter::class); + $itemSch->getName()->shouldBeCalled()->willReturn('foo'); + $itemSch->getPrefixedName()->shouldBeCalled()->willReturn('prefix-foo'); + + $sch = $this->prophesize(Parameter::class); + $sch->getItemSchema()->shouldBeCalled()->willReturn($itemSch); + $sch->getLocation()->shouldBeCalled()->willReturn('header'); + $sch->getName()->shouldBeCalled()->willReturn('metadata'); + + $op = $this->prophesize(Operation::class); + $op->getParam('metadata')->shouldBeCalled()->willReturn($sch); + + $actual = $this->rs->serializeOptions($op->reveal(), ['metadata' => ['foo' => 'bar']]); + $expected = ['headers' => ['prefix-foo' => 'bar']]; + + $this->assertEquals($expected, $actual); + } + + public function test_it_serializes_json() + { + $sch = $this->prophesize(Parameter::class); + $sch->getLocation()->shouldBeCalled()->willReturn('json'); + + $op = $this->prophesize(Operation::class); + $op->getParam('foo')->shouldBeCalled()->willReturn($sch); + $op->getJsonKey()->shouldBeCalled()->willReturn('jsonKey'); + + $this->js->stockJson($sch, 'bar', [])->shouldBeCalled()->willReturn(['foo' => 'bar']); + + $actual = $this->rs->serializeOptions($op->reveal(), ['foo' => 'bar']); + $expected = ['json' => ['jsonKey' => ['foo' => 'bar']], 'headers' => []]; + + $this->assertEquals($expected, $actual); + } + + public function test_it_serializes_raw_vals() + { + $sch = $this->prophesize(Parameter::class); + $sch->getLocation()->shouldBeCalled()->willReturn('raw'); + + $op = $this->prophesize(Operation::class); + $op->getParam('foo')->shouldBeCalled()->willReturn($sch); + + $actual = $this->rs->serializeOptions($op->reveal(), ['foo' => 'bar']); + $expected = ['body' => 'bar', 'headers' => []]; + + $this->assertEquals($expected, $actual); + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Common/Transport/UtilsTest.php b/server/vendor/php-opencloud/common/tests/unit/Common/Transport/UtilsTest.php new file mode 100644 index 0000000..3103ad4 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Common/Transport/UtilsTest.php @@ -0,0 +1,30 @@ +assertInstanceOf(Uri::class, $uri); + $this->assertEquals(uri_for('http://openstack.org/foo/bar/baz/1/2'), $uri); + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Fixtures/ComputeV2Api.php b/server/vendor/php-opencloud/common/tests/unit/Fixtures/ComputeV2Api.php new file mode 100644 index 0000000..d395d10 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Fixtures/ComputeV2Api.php @@ -0,0 +1,107 @@ + 'string', 'required' => true, 'location' => 'url']; + + public function getImage() + { + return [ + 'method' => 'GET', + 'path' => 'images/{id}', + 'params' => [self::$idParam] + ]; + } + + public function postServer() + { + return [ + 'path' => 'servers', + 'method' => 'POST', + 'jsonKey' => 'server', + 'params' => [ + 'removeMetadata' => [ + 'type' => 'object', + 'properties' => ['type' => 'string'], + ], + 'securityGroups' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'name' => ['type' => 'string'] + ] + ], + 'sentAs' => 'security_groups', + ], + 'userData' => ['type' => 'string', 'sentAs' => 'user_data'], + 'availabilityZone' => ['type' => 'string', 'sentAs' => 'availability_zone'], + 'imageId' => ['type' => 'string', 'required' => true, 'sentAs' => 'imageRef'], + 'flavorId' => ['type' => 'string', 'required' => true, 'sentAs' => 'flavorRef'], + 'networks' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'uuid' => ['type' => 'string'], + 'port' => ['type' => 'string'], + ] + ] + ], + 'name' => ['type' => 'string', 'required' => true], + 'metadata' => ['type' => 'object', 'location' => 'json'], + 'personality' => ['type' => 'string'], + 'blockDeviceMapping' => [ + 'type' => 'array', + 'sentAs' => 'block_device_mapping_v2', + 'items' => [ + 'type' => 'object', + 'properties' => [ + 'configDrive' => ['type' => 'string', 'sentAs' => 'config_drive'], + 'bootIndex' => ['type' => 'string', 'sentAs' => 'boot_index'], + 'deleteOnTermination' => ['type' => 'boolean', 'sentAs' => 'delete_on_termination'], + 'guestFormat' => ['type' => 'string', 'sentAs' => 'guest_format'], + 'destinationType' => ['type' => 'string', 'sentAs' => 'destination_type'], + 'sourceType' => ['type' => 'string', 'sentAs' => 'source_type'], + 'deviceName' => ['type' => 'string', 'sentAs' => 'device_name'], + ] + ], + ], + ] + ]; + } + + public function test() + { + return [ + 'method' => 'GET', + 'path' => 'foo', + 'params' => [ + 'id' => ['type' => 'string', 'location' => 'json'], + 'bar' => ['type' => 'string', 'location' => 'json'], + ] + ]; + } + + public function getServers() + { + return [ + 'method' => 'GET', + 'path' => 'servers', + 'params' => [ + 'changesSince' => ['sentAs' => 'changes-since', 'type' => 'string', 'location' => 'query'], + 'imageId' => ['sentAs' => 'image', 'type' => 'string', 'location' => 'query'], + 'flavorId' => ['sentAs' => 'flavor', 'type' => 'string', 'location' => 'query'], + 'name' => ['type' => 'string', 'location' => 'query'], + 'marker' => ['type' => 'string', 'location' => 'query'], + 'limit' => ['type' => 'integer', 'location' => 'query'], + 'status' => ['type' => 'string', 'location' => 'query'], + 'host' => ['type' => 'string', 'location' => 'query'] + ], + ]; + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Fixtures/IdentityV2Api.php b/server/vendor/php-opencloud/common/tests/unit/Fixtures/IdentityV2Api.php new file mode 100644 index 0000000..4cc66b5 --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Fixtures/IdentityV2Api.php @@ -0,0 +1,36 @@ + 'POST', + 'path' => 'tokens', + 'params' => [ + 'username' => [ + 'type' => 'string', + 'required' => true, + 'path' => 'auth.passwordCredentials' + ], + 'password' => [ + 'type' => 'string', + 'required' => true, + 'path' => 'auth.passwordCredentials' + ], + 'tenantId' => [ + 'type' => 'string', + 'path' => 'auth', + ], + 'tenantName' => [ + 'type' => 'string', + 'path' => 'auth', + ] + ], + ]; + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/Fixtures/IdentityV3Api.php b/server/vendor/php-opencloud/common/tests/unit/Fixtures/IdentityV3Api.php new file mode 100644 index 0000000..2fc922f --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/Fixtures/IdentityV3Api.php @@ -0,0 +1,75 @@ + 'object', + 'params' => [ + 'id' => ['type' => 'string'], + 'name' => ['type' => 'string'] + ] + ]; + } + + private function projectParam() + { + return [ + 'type' => 'object', + 'params' => [ + 'id' => ['type' => 'string'], + 'name' => ['type' => 'string'], + 'domain' => $this->domainParam(), + ] + ]; + } + + public function postTokens() + { + return [ + 'method' => 'POST', + 'path' => 'tokens', + 'params' => [ + 'methods' => [ + 'type' => 'array', + 'path' => 'auth.identity', + 'items' => [ + 'type' => 'string' + ] + ], + 'user' => [ + 'path' => 'auth.identity.password', + 'type' => 'object', + 'properties' => [ + 'id' => [ + 'type' => 'string', + ], + 'name' => [ + 'type' => 'string', + ], + 'password' => [ + 'type' => 'string', + ], + 'domain' => $this->domainParam() + ] + ], + 'tokenId' => [ + 'type' => 'string', + 'path' => 'auth.identity.token', + 'sentAs' => 'id', + ], + 'scope' => [ + 'type' => 'object', + 'path' => 'auth', + 'properties' => [ + 'project' => $this->projectParam(), + 'domain' => $this->domainParam() + ] + ] + ] + ]; + } +} diff --git a/server/vendor/php-opencloud/common/tests/unit/TestCase.php b/server/vendor/php-opencloud/common/tests/unit/TestCase.php new file mode 100644 index 0000000..610d88a --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/unit/TestCase.php @@ -0,0 +1,99 @@ +client = $this->prophesize(ClientInterface::class); + } + + protected function createResponse($status, array $headers, array $json) + { + return new Response($status, $headers, stream_for(json_encode($json))); + } + + protected function getFixture($file) + { + if (!$this->rootFixturesDir) { + throw new \RuntimeException('Root fixtures dir not set'); + } + + $path = $this->rootFixturesDir . '/Fixtures/' . $file . '.resp'; + + if (!file_exists($path)) { + throw new \RuntimeException(sprintf("%s does not exist", $path)); + } + + return parse_response(file_get_contents($path)); + } + + protected function setupMock($method, $path, $body = null, array $headers = [], $response) + { + $options = ['headers' => $headers]; + + if (!empty($body)) { + $options[is_array($body) ? 'json' : 'body'] = $body; + } + + if (is_string($response)) { + $response = $this->getFixture($response); + } + + $this->client + ->request($method, $path, $options) + ->shouldBeCalled() + ->willReturn($response); + } + + protected function createFn($receiver, $method, $args) + { + return function () use ($receiver, $method, $args) { + return $receiver->$method($args); + }; + } + + protected function listTest(callable $call, $urlPath, $modelName = null, $responseFile = null) + { + $modelName = $modelName ?: $urlPath; + $responseFile = $responseFile ?: $urlPath; + + $this->setupMock('GET', $urlPath, null, [], $responseFile); + + $resources = call_user_func($call); + + $this->assertInstanceOf('\Generator', $resources); + + $count = 0; + + foreach ($resources as $resource) { + $this->assertInstanceOf('OpenStack\Identity\v3\Models\\' . ucfirst($modelName), $resource); + ++$count; + } + + $this->assertEquals(2, $count); + } + + protected function getTest(callable $call, $modelName) + { + $resource = call_user_func($call); + + $this->assertInstanceOf('OpenStack\Identity\v3\Models\\' . ucfirst($modelName), $resource); + $this->assertEquals('id', $resource->id); + } +} From aee0bda9d47f9d279ff9b5b4a4a263fc5613863e Mon Sep 17 00:00:00 2001 From: Yoggzo Date: Wed, 9 Mar 2016 15:39:43 +0100 Subject: [PATCH 27/28] correct errors --- server/core/Image.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/core/Image.php b/server/core/Image.php index b21073b..f509cd6 100644 --- a/server/core/Image.php +++ b/server/core/Image.php @@ -353,7 +353,7 @@ class image implements Core{ * @param string $file_name * path of the image **/ - private function uploadImage($id, $file_name){ + private function uploadImage(){ $id = $this->app->getPostParam("id"); $file_name = $this->app->getPostParam("file_name"); @@ -389,7 +389,7 @@ class image implements Core{ * @param string $id * identifier of the image **/ - private function downloadImage($id){ + private function downloadImage(){ $id = $this->app->getPostParam("id"); if(!isset($id)){ $this->app->setOutput("Error", "Incorrect parameter"); @@ -590,7 +590,7 @@ class image implements Core{ * @param string $status * new status for the member **/ - private function updateMemberImage($image_id, $member_id, $status){ + private function updateMemberImage(){ $image_id = $this->app->getPostParam("image_id"); $member_id = $this->app->getPostParam("member_id"); $status = $this->app->getPostParam("status"); From 03ef74d0cfe675a6e18a91f039182ca1b248d8f5 Mon Sep 17 00:00:00 2001 From: EoleDev Date: Wed, 9 Mar 2016 16:03:46 +0100 Subject: [PATCH 28/28] MAJ Librarys --- server/vendor/composer/autoload_psr4.php | 2 - server/vendor/composer/installed.json | 317 +++++++++--------- .../vendor/guzzlehttp/promises/CHANGELOG.md | 6 + .../guzzlehttp/promises/src/EachPromise.php | 20 +- .../guzzlehttp/promises/src/Promise.php | 27 +- .../guzzlehttp/promises/src/TaskQueue.php | 1 + .../guzzlehttp/promises/src/functions.php | 8 +- .../promises/tests/EachPromiseTest.php | 48 ++- .../guzzlehttp/promises/tests/PromiseTest.php | 12 + server/vendor/guzzlehttp/psr7/CHANGELOG.md | 6 + server/vendor/guzzlehttp/psr7/README.md | 4 +- .../guzzlehttp/psr7/src/CachingStream.php | 9 +- .../guzzlehttp/psr7/src/InflateStream.php | 27 +- .../psr7/tests/CachingStreamTest.php | 27 ++ .../psr7/tests/InflateStreamTest.php | 23 ++ .../vendor/guzzlehttp/psr7/tests/UriTest.php | 2 +- server/vendor/php-opencloud/openstack | 2 +- 17 files changed, 347 insertions(+), 194 deletions(-) diff --git a/server/vendor/composer/autoload_psr4.php b/server/vendor/composer/autoload_psr4.php index 077c577..0b3ff02 100644 --- a/server/vendor/composer/autoload_psr4.php +++ b/server/vendor/composer/autoload_psr4.php @@ -7,8 +7,6 @@ $baseDir = dirname($vendorDir); return array( 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'), - 'OpenStack\\Test\\' => array($vendorDir . '/php-opencloud/openstack/tests/unit'), - 'OpenStack\\Integration\\' => array($vendorDir . '/php-opencloud/openstack/tests/integration'), 'OpenStack\\' => array($vendorDir . '/php-opencloud/openstack/src'), 'OpenCloud\\Test\\' => array($vendorDir . '/php-opencloud/common/tests/unit'), 'OpenCloud\\Integration\\' => array($vendorDir . '/php-opencloud/common/tests/integration'), diff --git a/server/vendor/composer/installed.json b/server/vendor/composer/installed.json index 70c1b5b..8f06408 100644 --- a/server/vendor/composer/installed.json +++ b/server/vendor/composer/installed.json @@ -1,57 +1,4 @@ [ - { - "name": "guzzlehttp/promises", - "version": "1.0.3", - "version_normalized": "1.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "b1e1c0d55f8083c71eda2c28c12a228d708294ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b1e1c0d55f8083c71eda2c28c12a228d708294ea", - "reference": "b1e1c0d55f8083c71eda2c28c12a228d708294ea", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "time": "2015-10-15 22:28:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ] - }, { "name": "psr/http-message", "version": "1.0", @@ -167,54 +114,6 @@ "web service" ] }, - { - "name": "php-opencloud/openstack", - "version": "dev-master", - "version_normalized": "9999999-dev", - "source": { - "type": "git", - "url": "https://github.com/php-opencloud/openstack.git", - "reference": "15aca73f423166c7ef8337ba08615c103c66e931" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-opencloud/openstack/zipball/f2ee77024843659d970817a9e7055bb40a3724f9", - "reference": "15aca73f423166c7ef8337ba08615c103c66e931", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "~6.1", - "justinrainbow/json-schema": "~1.3", - "php": ">=5.6" - }, - "require-dev": { - "fabpot/php-cs-fixer": "~1.0", - "jakub-onderka/php-parallel-lint": "0.*", - "phpspec/prophecy-phpunit": "~1.0", - "phpunit/phpunit": "~4.0", - "psr/log": "~1.0", - "sami/sami": "dev-master", - "satooshi/php-coveralls": "~1.0" - }, - "time": "2016-01-25 10:35:10", - "type": "library", - "installation-source": "source", - "autoload": { - "psr-4": { - "OpenStack\\": "src/", - "OpenStack\\Test\\": "tests/unit/", - "OpenStack\\Integration\\": "tests/integration/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "authors": [ - { - "name": "Jamie Hannaford", - "email": "jamie.hannaford@rackspace.com", - "homepage": "https://github.com/jamiehannaford" - } - ] - }, { "name": "justinrainbow/json-schema", "version": "1.6.1", @@ -283,66 +182,6 @@ "schema" ] }, - { - "name": "guzzlehttp/psr7", - "version": "1.2.2", - "version_normalized": "1.2.2.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "f5d04bdd2881ac89abde1fb78cc234bce24327bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5d04bdd2881ac89abde1fb78cc234bce24327bb", - "reference": "f5d04bdd2881ac89abde1fb78cc234bce24327bb", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "time": "2016-01-23 01:23:02", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "PSR-7 message implementation", - "keywords": [ - "http", - "message", - "stream", - "uri" - ] - }, { "name": "php-opencloud/common", "version": "dev-master", @@ -389,5 +228,161 @@ "homepage": "https://github.com/jamiehannaford" } ] + }, + { + "name": "guzzlehttp/promises", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "bb9024c526b22f3fe6ae55a561fd70653d470aa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/bb9024c526b22f3fe6ae55a561fd70653d470aa8", + "reference": "bb9024c526b22f3fe6ae55a561fd70653d470aa8", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "time": "2016-03-08 01:15:46", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ] + }, + { + "name": "guzzlehttp/psr7", + "version": "1.2.3", + "version_normalized": "1.2.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "2e89629ff057ebb49492ba08e6995d3a6a80021b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/2e89629ff057ebb49492ba08e6995d3a6a80021b", + "reference": "2e89629ff057ebb49492ba08e6995d3a6a80021b", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "time": "2016-02-18 21:54:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "PSR-7 message implementation", + "keywords": [ + "http", + "message", + "stream", + "uri" + ] + }, + { + "name": "php-opencloud/openstack", + "version": "dev-master", + "version_normalized": "9999999-dev", + "source": { + "type": "git", + "url": "https://github.com/php-opencloud/openstack.git", + "reference": "f2ee77024843659d970817a9e7055bb40a3724f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-opencloud/openstack/zipball/f2ee77024843659d970817a9e7055bb40a3724f9", + "reference": "f2ee77024843659d970817a9e7055bb40a3724f9", + "shasum": "" + }, + "require": { + "php-opencloud/common": "dev-master" + }, + "require-dev": { + "fabpot/php-cs-fixer": "~1.0", + "jakub-onderka/php-parallel-lint": "0.*", + "phpunit/phpunit": "~4.0", + "psr/log": "~1.0", + "sami/sami": "dev-master", + "satooshi/php-coveralls": "~1.0" + }, + "time": "2016-03-08 14:37:14", + "type": "library", + "installation-source": "source", + "autoload": { + "psr-4": { + "OpenStack\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "authors": [ + { + "name": "Jamie Hannaford", + "email": "jamie.hannaford@rackspace.com", + "homepage": "https://github.com/jamiehannaford" + } + ] } ] diff --git a/server/vendor/guzzlehttp/promises/CHANGELOG.md b/server/vendor/guzzlehttp/promises/CHANGELOG.md index 4031cb8..3871ac7 100644 --- a/server/vendor/guzzlehttp/promises/CHANGELOG.md +++ b/server/vendor/guzzlehttp/promises/CHANGELOG.md @@ -1,5 +1,11 @@ # CHANGELOG +## 1.1.0 - 2016-03-07 + +* Update EachPromise to prevent recurring on a iterator when advancing, as this + could trigger fatal generator errors. +* Update Promise to allow recursive waiting without unwrapping exceptions. + ## 1.0.3 - 2015-10-15 * Update EachPromise to immediately resolve when the underlying promise iterator diff --git a/server/vendor/guzzlehttp/promises/src/EachPromise.php b/server/vendor/guzzlehttp/promises/src/EachPromise.php index 5918429..0344686 100644 --- a/server/vendor/guzzlehttp/promises/src/EachPromise.php +++ b/server/vendor/guzzlehttp/promises/src/EachPromise.php @@ -24,6 +24,9 @@ class EachPromise implements PromisorInterface /** @var Promise */ private $aggregate; + /** @var bool */ + private $mutex; + /** * Configuration hash can include the following key value pairs: * @@ -81,6 +84,7 @@ class EachPromise implements PromisorInterface private function createPromise() { + $this->mutex = false; $this->aggregate = new Promise(function () { reset($this->pending); if (empty($this->pending) && !$this->iterable->valid()) { @@ -169,11 +173,21 @@ class EachPromise implements PromisorInterface private function advanceIterator() { + // Place a lock on the iterator so that we ensure to not recurse, + // preventing fatal generator errors. + if ($this->mutex) { + return false; + } + + $this->mutex = true; + try { $this->iterable->next(); + $this->mutex = false; return true; } catch (\Exception $e) { $this->aggregate->reject($e); + $this->mutex = false; return false; } } @@ -186,9 +200,11 @@ class EachPromise implements PromisorInterface } unset($this->pending[$idx]); - $this->advanceIterator(); - if (!$this->checkIfFinished()) { + // Only refill pending promises if we are not locked, preventing the + // EachPromise to recursively invoke the provided iterator, which + // cause a fatal error: "Cannot resume an already running generator" + if ($this->advanceIterator() && !$this->checkIfFinished()) { // Add more pending promises if possible. $this->refillPending(); } diff --git a/server/vendor/guzzlehttp/promises/src/Promise.php b/server/vendor/guzzlehttp/promises/src/Promise.php index c2cf969..86820b2 100644 --- a/server/vendor/guzzlehttp/promises/src/Promise.php +++ b/server/vendor/guzzlehttp/promises/src/Promise.php @@ -61,17 +61,19 @@ class Promise implements PromiseInterface { $this->waitIfPending(); - if (!$unwrap) { - return null; - } + $inner = $this->result instanceof PromiseInterface + ? $this->result->wait($unwrap) + : $this->result; - if ($this->result instanceof PromiseInterface) { - return $this->result->wait($unwrap); - } elseif ($this->state === self::FULFILLED) { - return $this->result; - } else { - // It's rejected so "unwrap" and throw an exception. - throw exception_for($this->result); + if ($unwrap) { + if ($this->result instanceof PromiseInterface + || $this->state === self::FULFILLED + ) { + return $inner; + } else { + // It's rejected so "unwrap" and throw an exception. + throw exception_for($inner); + } } } @@ -257,11 +259,10 @@ class Promise implements PromiseInterface $this->waitList = null; foreach ($waitList as $result) { - descend: $result->waitIfPending(); - if ($result->result instanceof Promise) { + while ($result->result instanceof Promise) { $result = $result->result; - goto descend; + $result->waitIfPending(); } } } diff --git a/server/vendor/guzzlehttp/promises/src/TaskQueue.php b/server/vendor/guzzlehttp/promises/src/TaskQueue.php index 5026363..39fe5bb 100644 --- a/server/vendor/guzzlehttp/promises/src/TaskQueue.php +++ b/server/vendor/guzzlehttp/promises/src/TaskQueue.php @@ -56,6 +56,7 @@ class TaskQueue */ public function run() { + /** @var callable $task */ while ($task = array_shift($this->queue)) { $task(); } diff --git a/server/vendor/guzzlehttp/promises/src/functions.php b/server/vendor/guzzlehttp/promises/src/functions.php index 89c6569..2fe61b7 100644 --- a/server/vendor/guzzlehttp/promises/src/functions.php +++ b/server/vendor/guzzlehttp/promises/src/functions.php @@ -146,9 +146,9 @@ function inspect(PromiseInterface $promise) 'value' => $promise->wait() ]; } catch (RejectionException $e) { - return ['state' => 'rejected', 'reason' => $e->getReason()]; + return ['state' => PromiseInterface::REJECTED, 'reason' => $e->getReason()]; } catch (\Exception $e) { - return ['state' => 'rejected', 'reason' => $e]; + return ['state' => PromiseInterface::REJECTED, 'reason' => $e]; } } @@ -304,10 +304,10 @@ function settle($promises) return each( $promises, function ($value, $idx) use (&$results) { - $results[$idx] = ['state' => 'fulfilled', 'value' => $value]; + $results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value]; }, function ($reason, $idx) use (&$results) { - $results[$idx] = ['state' => 'rejected', 'reason' => $reason]; + $results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason]; } )->then(function () use (&$results) { ksort($results); diff --git a/server/vendor/guzzlehttp/promises/tests/EachPromiseTest.php b/server/vendor/guzzlehttp/promises/tests/EachPromiseTest.php index 0a0a851..08af2a0 100644 --- a/server/vendor/guzzlehttp/promises/tests/EachPromiseTest.php +++ b/server/vendor/guzzlehttp/promises/tests/EachPromiseTest.php @@ -39,8 +39,8 @@ class EachPromiseTest extends \PHPUnit_Framework_TestCase public function testIsWaitable() { - $a = new Promise(function () use (&$a) { $a->resolve('a'); }); - $b = new Promise(function () use (&$b) { $b->resolve('b'); }); + $a = $this->createSelfResolvingPromise('a'); + $b = $this->createSelfResolvingPromise('b'); $called = []; $each = new EachPromise([$a, $b], [ 'fulfilled' => function ($value) use (&$called) { $called[] = $value; } @@ -54,7 +54,7 @@ class EachPromiseTest extends \PHPUnit_Framework_TestCase public function testCanResolveBeforeConsumingAll() { $called = 0; - $a = new Promise(function () use (&$a) { $a->resolve('a'); }); + $a = $this->createSelfResolvingPromise('a'); $b = new Promise(function () { $this->fail(); }); $each = new EachPromise([$a, $b], [ 'fulfilled' => function ($value, $idx, Promise $aggregate) use (&$called) { @@ -291,4 +291,46 @@ class EachPromiseTest extends \PHPUnit_Framework_TestCase } $this->assertEquals(range(0, 9), $results); } + + private function createSelfResolvingPromise($value) + { + $p = new Promise(function () use (&$p, $value) { + $p->resolve($value); + }); + + return $p; + } + + public function testMutexPreventsGeneratorRecursion() + { + $results = $promises = []; + for ($i = 0; $i < 20; $i++) { + $p = $this->createSelfResolvingPromise($i); + $pending[] = $p; + $promises[] = $p; + } + + $iter = function () use (&$promises, &$pending) { + foreach ($promises as $promise) { + // Resolve a promises, which will trigger the then() function, + // which would cause the EachPromise to try to add more + // promises to the queue. Without a lock, this would trigger + // a "Cannot resume an already running generator" fatal error. + if ($p = array_pop($pending)) { + $p->wait(); + } + yield $promise; + } + }; + + $each = new EachPromise($iter(), [ + 'concurrency' => 5, + 'fulfilled' => function ($r) use (&$results, &$pending) { + $results[] = $r; + } + ]); + + $each->promise()->wait(); + $this->assertCount(20, $results); + } } diff --git a/server/vendor/guzzlehttp/promises/tests/PromiseTest.php b/server/vendor/guzzlehttp/promises/tests/PromiseTest.php index 946c627..599d8ae 100644 --- a/server/vendor/guzzlehttp/promises/tests/PromiseTest.php +++ b/server/vendor/guzzlehttp/promises/tests/PromiseTest.php @@ -172,6 +172,18 @@ class PromiseTest extends \PHPUnit_Framework_TestCase $this->assertEquals('Whoop', $p->wait()); } + public function testWaitsOnAPromiseChainEvenWhenNotUnwrapped() + { + $p2 = new Promise(function () use (&$p2) { + $p2->reject('Fail'); + }); + $p = new Promise(function () use ($p2, &$p) { + $p->resolve($p2); + }); + $p->wait(false); + $this->assertSame(Promise::REJECTED, $p2->getState()); + } + public function testCannotCancelNonPending() { $p = new Promise(); diff --git a/server/vendor/guzzlehttp/psr7/CHANGELOG.md b/server/vendor/guzzlehttp/psr7/CHANGELOG.md index d875aa3..0e278bd 100644 --- a/server/vendor/guzzlehttp/psr7/CHANGELOG.md +++ b/server/vendor/guzzlehttp/psr7/CHANGELOG.md @@ -1,5 +1,11 @@ # CHANGELOG +## 1.2.3 - 2016-02-18 + +* Fixed support in `GuzzleHttp\Psr7\CachingStream` for seeking forward on remote + streams, which can sometimes return fewer bytes than requested with `fread`. +* Fixed handling of gzipped responses with FNAME headers. + ## 1.2.2 - 2016-01-22 * Added support for URIs without any authority. diff --git a/server/vendor/guzzlehttp/psr7/README.md b/server/vendor/guzzlehttp/psr7/README.md index 0a4c341..c15ddd3 100644 --- a/server/vendor/guzzlehttp/psr7/README.md +++ b/server/vendor/guzzlehttp/psr7/README.md @@ -38,7 +38,7 @@ echo $composed(); // abc, 123. Above all listen to me. `GuzzleHttp\Psr7\BufferStream` -Provides a buffer stream that can be written to to fill a buffer, and read +Provides a buffer stream that can be written to fill a buffer, and read from to remove bytes from the buffer. This stream returns a "hwm" metadata value that tells upstream consumers @@ -106,7 +106,7 @@ echo $stream; // 0123456789 Compose stream implementations based on a hash of functions. -Allows for easy testing and extension of a provided stream without needing to +Allows for easy testing and extension of a provided stream without needing to create a concrete class for a simple extension point. ```php diff --git a/server/vendor/guzzlehttp/psr7/src/CachingStream.php b/server/vendor/guzzlehttp/psr7/src/CachingStream.php index 420d5b0..ed68f08 100644 --- a/server/vendor/guzzlehttp/psr7/src/CachingStream.php +++ b/server/vendor/guzzlehttp/psr7/src/CachingStream.php @@ -60,9 +60,12 @@ class CachingStream implements StreamInterface $diff = $byte - $this->stream->getSize(); if ($diff > 0) { - // If the seek byte is greater the number of read bytes, then read - // the difference of bytes to cache the bytes and inherently seek. - $this->read($diff); + // Read the remoteStream until we have read in at least the amount + // of bytes requested, or we reach the end of the file. + while ($diff > 0 && !$this->remoteStream->eof()) { + $this->read($diff); + $diff = $byte - $this->stream->getSize(); + } } else { // We can just do a normal seek since we've already seen this byte. $this->stream->seek($byte); diff --git a/server/vendor/guzzlehttp/psr7/src/InflateStream.php b/server/vendor/guzzlehttp/psr7/src/InflateStream.php index 2c8628b..0051d3f 100644 --- a/server/vendor/guzzlehttp/psr7/src/InflateStream.php +++ b/server/vendor/guzzlehttp/psr7/src/InflateStream.php @@ -20,10 +20,33 @@ class InflateStream implements StreamInterface public function __construct(StreamInterface $stream) { - // Skip the first 10 bytes - $stream = new LimitStream($stream, -1, 10); + // read the first 10 bytes, ie. gzip header + $header = $stream->read(10); + $filenameHeaderLength = $this->getLengthOfPossibleFilenameHeader($stream, $header); + // Skip the header, that is 10 + length of filename + 1 (nil) bytes + $stream = new LimitStream($stream, -1, 10 + $filenameHeaderLength); $resource = StreamWrapper::getResource($stream); stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ); $this->stream = new Stream($resource); } + + /** + * @param StreamInterface $stream + * @param $header + * @return int + */ + private function getLengthOfPossibleFilenameHeader(StreamInterface $stream, $header) + { + $filename_header_length = 0; + + if (substr(bin2hex($header), 6, 2) === '08') { + // we have a filename, read until nil + $filename_header_length = 1; + while ($stream->read(1) !== chr(0)) { + $filename_header_length++; + } + } + + return $filename_header_length; + } } diff --git a/server/vendor/guzzlehttp/psr7/tests/CachingStreamTest.php b/server/vendor/guzzlehttp/psr7/tests/CachingStreamTest.php index 326f754..60a2636 100644 --- a/server/vendor/guzzlehttp/psr7/tests/CachingStreamTest.php +++ b/server/vendor/guzzlehttp/psr7/tests/CachingStreamTest.php @@ -98,6 +98,33 @@ class CachingStreamTest extends \PHPUnit_Framework_TestCase $this->assertEquals('ing', $this->body->read(3)); } + public function testCanSeekToReadBytesWithPartialBodyReturned() + { + $stream = fopen('php://temp', 'r+'); + fwrite($stream, 'testing'); + fseek($stream, 0); + + $this->decorated = $this->getMockBuilder('\GuzzleHttp\Psr7\Stream') + ->setConstructorArgs([$stream]) + ->setMethods(['read']) + ->getMock(); + + $this->decorated->expects($this->exactly(2)) + ->method('read') + ->willReturnCallback(function($length) use ($stream){ + return fread($stream, 2); + }); + + $this->body = new CachingStream($this->decorated); + + $this->assertEquals(0, $this->body->tell()); + $this->body->seek(4, SEEK_SET); + $this->assertEquals(4, $this->body->tell()); + + $this->body->seek(0); + $this->assertEquals('test', $this->body->read(4)); + } + public function testWritesToBufferStream() { $this->body->read(2); diff --git a/server/vendor/guzzlehttp/psr7/tests/InflateStreamTest.php b/server/vendor/guzzlehttp/psr7/tests/InflateStreamTest.php index 927fc0b..0e4b586 100644 --- a/server/vendor/guzzlehttp/psr7/tests/InflateStreamTest.php +++ b/server/vendor/guzzlehttp/psr7/tests/InflateStreamTest.php @@ -13,4 +13,27 @@ class InflateStreamtest extends \PHPUnit_Framework_TestCase $b = new InflateStream($a); $this->assertEquals('test', (string) $b); } + + public function testInflatesStreamsWithFilename() + { + $content = $this->getGzipStringWithFilename('test'); + $a = Psr7\stream_for($content); + $b = new InflateStream($a); + $this->assertEquals('test', (string) $b); + } + + private function getGzipStringWithFilename($original_string) + { + $gzipped = bin2hex(gzencode($original_string)); + + $header = substr($gzipped, 0, 20); + // set FNAME flag + $header[6]=0; + $header[7]=8; + // make a dummy filename + $filename = "64756d6d7900"; + $rest = substr($gzipped, 20); + + return hex2bin($header . $filename . $rest); + } } diff --git a/server/vendor/guzzlehttp/psr7/tests/UriTest.php b/server/vendor/guzzlehttp/psr7/tests/UriTest.php index a63293c..357ee25 100644 --- a/server/vendor/guzzlehttp/psr7/tests/UriTest.php +++ b/server/vendor/guzzlehttp/psr7/tests/UriTest.php @@ -154,7 +154,7 @@ class UriTest extends \PHPUnit_Framework_TestCase [self::RFC3986_BASE, 'g;x=1/../y', 'http://a/b/c/y'], ['http://u@a/b/c/d;p?q', '.', 'http://u@a/b/c/'], ['http://u:p@a/b/c/d;p?q', '.', 'http://u:p@a/b/c/'], - //[self::RFC3986_BASE, 'http:g', 'http:g'], + ['http://a/b/c/d/', 'e', 'http://a/b/c/d/e'], ]; } diff --git a/server/vendor/php-opencloud/openstack b/server/vendor/php-opencloud/openstack index 15aca73..f2ee770 160000 --- a/server/vendor/php-opencloud/openstack +++ b/server/vendor/php-opencloud/openstack @@ -1 +1 @@ -Subproject commit 15aca73f423166c7ef8337ba08615c103c66e931 +Subproject commit f2ee77024843659d970817a9e7055bb40a3724f9