From 7619351a35cb3b6a39d5ba092d6fa30b3f993116 Mon Sep 17 00:00:00 2001 From: alphayax Date: Thu, 23 Jun 2016 13:31:34 +0200 Subject: [PATCH] Add App permissions infos --- README.md | 44 ++++++++++++++--------- exemple/permissions.php | 13 +++++++ freebox/api/v3/services/login/Session.php | 11 ++++++ freebox/api/v3/symbols/Permissions.php | 30 ++++++++++++++++ freebox/utils/Application.php | 17 +++++++++ 5 files changed, 98 insertions(+), 17 deletions(-) create mode 100644 exemple/permissions.php create mode 100644 freebox/api/v3/symbols/Permissions.php diff --git a/README.md b/README.md index f2cb64d..e5cf681 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,11 @@ Un document complet repertorie l'ensemble des services implémentées : [service ### Application +L'objet `\alphayax\freebox\utils\Application` représente votre application. Vous devrez +créer une instance de cette classe et la transmettre aux services que vous souhaitez utiliser. + +#### Association + Pour acceder aux services proposés par l'API de la freebox, vous deverez autoriser votre application. Cette procedure impose que vous soyez connecté au réseau local de votre Freebox lors de "l'association" et que vous ayez la @@ -61,6 +66,26 @@ $App->authorize(); $App->openSession(); ``` +#### Accès local + +L'accès local est activé par défaut. Une fois l'application créer et la session ouverte, vous +pouvez utiliser directement les services auquels l'application à acces. + +#### Accès distant + +Pour pouvoir utiliser l'accès distant, il vous faudra le token associé a votre application. +Ce token s'obtient automatiquement après l'association faite via l'appel à la méthode `authorize()`. +Le token est ecrit dans le fichier `app_token`. Il est également disponible via la methode `\alphayax\freebox\utils\Application::getAppToken()`. + +Une fois le token obtenu, vous pouvez proceder comme suit : + +```php +$App = new \alphayax\freebox\utils\Application( 'com.alphayax.freebox.version', 'Freebox PHP API Example (Version)', '1.0.0'); +$App->setFreeboxApiHost( 'https://xxx.freeboxos.fr:17105'); // A remplacer par votre host +$App->setAppToken( 'xxxxxxxxxxxxxxxxxxxx'); // A remplacer par votre token +$App->openSession(); +``` + ### Services Les appels aux services de l'API se font par l'intermédiaire de services. Ces derniers possedent les méthodes pour récuperer, ajouter ou mettre a jour des données. @@ -73,8 +98,6 @@ Voici un exemple d'utilisation de l'API System : ```php $System = new \alphayax\freebox\api\v3\services\config\System( $App); - -/** @var \alphayax\freebox\api\v3\models\SystemConfig $SystemConfig */ $SystemConfig = $System->getConfiguration(); print_r( $SystemConfig); @@ -98,21 +121,6 @@ alphayax\freebox\api\v3\models\SystemConfig Object ) ``` -### Accès distant - -Pour pouvoir utiliser l'accès distant, il vous faudra le token associé a votre application. -Ce token s'obtient automatiquement après l'association faite via l'appel à la méthode `authorize()`. -Le token est ecrit dans le fichier `app_token`. Il est également disponible via la methode `\alphayax\freebox\utils\Application::getAppToken()`. - -Une fois le token obtenu, vous pouvez proceder comme suit : - -```php -$App = new \alphayax\freebox\utils\Application( 'com.alphayax.freebox.version', 'Freebox PHP API Example (Version)', '1.0.0'); -$App->setFreeboxApiHost( 'https://xxx.freeboxos.fr:17105'); // A remplacer par votre host -$App->setAppToken( 'xxxxxxxxxxxxxxxxxxxx'); // A remplacer par votre token -$App->openSession(); -``` - ## Exemples Les exemples sont disponibles dans le repertoire `exemple`. Ils sont classés par services : @@ -147,3 +155,5 @@ Les exemples sont disponibles dans le repertoire `exemple`. Ils sont classés pa - `Storage` - `Disk` : Retourne des informations sur les disques connectés aux freebox - `Partition` : Retourne des infos sur ces disques. Possibilité de verification ou de formatage +- `remote` : Un exemple de connexion distant +- `version` : Affichage de la version de l'API de la freebox diff --git a/exemple/permissions.php b/exemple/permissions.php new file mode 100644 index 0000000..a110243 --- /dev/null +++ b/exemple/permissions.php @@ -0,0 +1,13 @@ +authorize(); +$App->openSession(); + +$hasExplorerPermission = $App->hasPermission( \alphayax\freebox\api\v3\symbols\Permissions::EXPLORER); + +var_dump( $hasExplorerPermission); diff --git a/freebox/api/v3/services/login/Session.php b/freebox/api/v3/services/login/Session.php index 8b44cbc..453aafa 100644 --- a/freebox/api/v3/services/login/Session.php +++ b/freebox/api/v3/services/login/Session.php @@ -21,7 +21,10 @@ class Session extends Service { private $logged_in = false; + /** @var array */ + protected $permissions = []; + /** @var string */ private $session_token; /** @@ -52,6 +55,7 @@ class Session extends Service { throw new \Exception( $rest->getCurlResponse()['error_code'] .' : '. $rest->getCurlResponse()['msg']); } $this->session_token = $rest->getResult()['session_token']; + $this->permissions = $rest->getResult()['permissions']; } /** @@ -61,4 +65,11 @@ class Session extends Service { return $this->session_token; } + /** + * @return array + */ + public function getPermissions() { + return $this->permissions; + } + } diff --git a/freebox/api/v3/symbols/Permissions.php b/freebox/api/v3/symbols/Permissions.php new file mode 100644 index 0000000..905c3a7 --- /dev/null +++ b/freebox/api/v3/symbols/Permissions.php @@ -0,0 +1,30 @@ +ask_login_status(); $Login->create_session(); + $this->permissions = $Login->getPermissions(); $this->session_token = $Login->getSessionToken(); } @@ -158,4 +165,14 @@ class Application { return $this->logger; } + /** + * Return true if the application have access to the given permission name + * @param $permissionName + * @see alphayax\freebox\api\v3\symbols\Permissions + * @return bool + */ + public function hasPermission( $permissionName) { + return boolval( @$this->permissions[$permissionName]); + } + }