| Line 33... |
Line 33... |
| 33 |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
|
33 |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
|
| 34 |
* @copyright Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org)
|
34 |
* @copyright Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org)
|
| 35 |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
|
35 |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
|
| 36 |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
|
36 |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
|
| 37 |
* @since 0.3
|
37 |
* @since 0.3
|
| 38 |
* @version $Id: RestServeur.php 366 2011-09-30 08:20:45Z jpm $
|
38 |
* @version $Id: RestServeur.php 382 2011-10-14 10:36:41Z jpm $
|
| 39 |
* @link /doc/framework/
|
39 |
* @link /doc/framework/
|
| 40 |
*/
|
40 |
*/
|
| 41 |
// TODO : gerer les retours : dans ce controleur : code retour et envoi ...
|
41 |
// TODO : gerer les retours : dans ce controleur : code retour et envoi ...
|
| 42 |
class RestServeur {
|
42 |
class RestServeur {
|
| Line 138... |
Line 138... |
| 138 |
* @var array
|
138 |
* @var array
|
| 139 |
*/
|
139 |
*/
|
| 140 |
private $ressources = array();
|
140 |
private $ressources = array();
|
| Line 141... |
Line 141... |
| 141 |
|
141 |
|
| - |
|
142 |
/** Partie de l'url situé après le '?' servant à paramétrer le service demandé.
|
| - |
|
143 |
* Les données proviennent de $_GET où les caractères suivant ont été transformé en '_' undescrore dans les clés :
|
| - |
|
144 |
* - chr(32) ( ) (space)
|
| - |
|
145 |
* - chr(46) (.) (dot)
|
| - |
|
146 |
* - chr(91) ([) (open square bracket)
|
| - |
|
147 |
* - chr(128) - chr(159) (various)
|
| 142 |
/** Partie de l'url situé après le '?' servant à paramétrer le service demandé.
|
148 |
* En outre nous appliquons la méthode nettoyerGet() qui effectue d'autres remplacement dans les valeurs.
|
| - |
|
149 |
* Ex. http://www.mondomaine.org/services/apiVersion/mon-service?monParametre1=maValeur1&monParametre2=maValeur2
|
| 143 |
* Ex. http://www.mondomaine.org/services/apiVersion/mon-service?monParametre1=maValeur1&monParametre2=maValeur2
|
150 |
* @see parametresBruts
|
| 144 |
* @var array
|
151 |
* @var array
|
| 145 |
*/
|
152 |
*/
|
| Line -... |
Line 153... |
| - |
|
153 |
private $parametres = array();
|
| - |
|
154 |
|
| - |
|
155 |
/** Partie de l'url situé après le '?' servant à paramétrer le service demandé.
|
| - |
|
156 |
* Les données proviennent de $_SERVER['QUERY_STRING'] et n'ont subies aucune transformation au niveau des clés.
|
| - |
|
157 |
* Cependant nous appliquons la méthode nettoyerGet() qui effectue d'autres remplacement dans les valeurs.
|
| - |
|
158 |
* Ex. http://www.mondomaine.org/services/apiVersion/mon-service?monParametre1=maValeur1&monParametre2=maValeur2
|
| - |
|
159 |
* @see parametres
|
| - |
|
160 |
* @var array
|
| - |
|
161 |
*/
|
| 146 |
private $parametres = array();
|
162 |
private $parametresBruts = array();
|
| 147 |
|
163 |
|
| 148 |
/** Tableau contenant les paramètres de configuration du serveur.
|
164 |
/** Tableau contenant les paramètres de configuration du serveur.
|
| 149 |
* @var array
|
165 |
* @var array
|
| Line 304... |
Line 320... |
| 304 |
}
|
320 |
}
|
| 305 |
}
|
321 |
}
|
| 306 |
}
|
322 |
}
|
| Line 307... |
Line 323... |
| 307 |
|
323 |
|
| - |
|
324 |
private function initialiserParametres() {
|
| - |
|
325 |
$this->parametres = $this->recupererParametresGet();
|
| - |
|
326 |
$this->parametresBruts = $this->recupererParametresBruts();
|
| - |
|
327 |
}
|
| - |
|
328 |
|
| 308 |
private function initialiserParametres() {
|
329 |
private function recupererParametresGet() {
|
| 309 |
$this->nettoyerGet();
|
330 |
$_GET = $this->nettoyerParametres($_GET);
|
| 310 |
$this->parametres = $_GET;
|
331 |
return $_GET;
|
| Line 311... |
Line 332... |
| 311 |
}
|
332 |
}
|
| 312 |
|
333 |
|
| 313 |
private function nettoyerGet() {
|
334 |
private function nettoyerParametres(Array $parametres) {
|
| 314 |
// Pas besoin d'utiliser urldecode car déjà fait par php pour les clés et valeur de $_GET
|
335 |
// Pas besoin d'utiliser urldecode car déjà fait par php pour les clés et valeur de $_GET
|
| 315 |
if (isset($_GET) && count($_GET) > 0) {
|
336 |
if (isset($parametres) && count($parametres) > 0) {
|
| 316 |
foreach ($_GET as $cle => $valeur) {
|
337 |
foreach ($parametres as $cle => $valeur) {
|
| 317 |
$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';');
|
338 |
$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';');
|
| 318 |
$_GET[$cle] = strip_tags(str_replace($verifier, '', $valeur));
|
339 |
$parametres[$cle] = strip_tags(str_replace($verifier, '', $valeur));
|
| - |
|
340 |
}
|
| 319 |
}
|
341 |
}
|
| Line -... |
Line 342... |
| - |
|
342 |
return $parametres;
|
| - |
|
343 |
}
|
| - |
|
344 |
|
| - |
|
345 |
private function recupererParametresBruts() {
|
| - |
|
346 |
$paires = explode('&', $_SERVER['QUERY_STRING']);
|
| - |
|
347 |
$parametres_bruts = array();
|
| - |
|
348 |
foreach ($paires as $paire) {
|
| - |
|
349 |
$nv = explode('=', $paire);
|
| - |
|
350 |
$nom = urldecode($nv[0]);
|
| - |
|
351 |
$valeur = urldecode($nv[1]);
|
| - |
|
352 |
$parametres_bruts[$nom] = $valeur;
|
| - |
|
353 |
}
|
| - |
|
354 |
$parametres_bruts = $this->nettoyerParametres($parametres_bruts);
|
| 320 |
}
|
355 |
return $parametres_bruts;
|
| 321 |
}
|
356 |
}
|
| 322 |
|
357 |
|
| 323 |
/**
|
358 |
/**
|
| 324 |
* La méthode __autoload() charge dynamiquement les classes trouvées dans le code.
|
359 |
* La méthode __autoload() charge dynamiquement les classes trouvées dans le code.
|
| Line 386... |
Line 421... |
| 386 |
$retour = '';
|
421 |
$retour = '';
|
| 387 |
if ($this->service != null) {
|
422 |
if ($this->service != null) {
|
| 388 |
$Service = new $this->service(self::$config);
|
423 |
$Service = new $this->service(self::$config);
|
| 389 |
if (method_exists($Service, self::METHODE_GET)) {
|
424 |
if (method_exists($Service, self::METHODE_GET)) {
|
| 390 |
$methodeGet = self::METHODE_GET;
|
425 |
$methodeGet = self::METHODE_GET;
|
| - |
|
426 |
$parametres = $Service->utiliserParametresBruts() ? $this->parametresBruts : $this->parametres;
|
| 391 |
$retour = $Service->$methodeGet($this->ressources, $this->parametres);
|
427 |
$retour = $Service->$methodeGet($this->ressources, $parametres);
|
| 392 |
} else {
|
428 |
} else {
|
| 393 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
429 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
| 394 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_GET."' nécessaire ".
|
430 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_GET."' nécessaire ".
|
| 395 |
"lors de l'appel du service via la méthode HTTP GET.";
|
431 |
"lors de l'appel du service via la méthode HTTP GET.";
|
| 396 |
self::ajouterMessage($e);
|
432 |
self::ajouterMessage($e);
|