| 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 359 2011-08-30 13:53:45Z delphine $
|
38 |
* @version $Id: RestServeur.php 413 2012-03-15 13:59:19Z 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 |
|
| 308 |
private function initialiserParametres() {
|
324 |
private function initialiserParametres() {
|
| 309 |
$this->nettoyerGet();
|
325 |
$this->parametres = $this->recupererParametresGet();
|
| 310 |
$this->parametres = $_GET;
|
326 |
$this->parametresBruts = $this->recupererParametresBruts();
|
| Line 311... |
Line 327... |
| 311 |
}
|
327 |
}
|
| - |
|
328 |
|
| - |
|
329 |
private function recupererParametresGet() {
|
| - |
|
330 |
$_GET = $this->nettoyerParametres($_GET);
|
| - |
|
331 |
return $_GET;
|
| - |
|
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
|
| - |
|
336 |
if (isset($parametres) && count($parametres) > 0) {
|
| - |
|
337 |
foreach ($parametres as $cle => $valeur) {
|
| 315 |
if (isset($_GET) && count($_GET) > 0) {
|
338 |
// les quotes, guillements et points-virgules ont été retirés des caractères à vérifier car
|
| 316 |
foreach ($_GET as $cle => $valeur) {
|
339 |
//ça n'a plus lieu d'être maintenant que l'on utilise protéger à peu près partout
|
| - |
|
340 |
$verifier = array('NULL', "\\", "\x00", "\x1a");
|
| - |
|
341 |
$parametres[$cle] = strip_tags(str_replace($verifier, '', $valeur));
|
| - |
|
342 |
}
|
| - |
|
343 |
}
|
| - |
|
344 |
return $parametres;
|
| - |
|
345 |
}
|
| - |
|
346 |
|
| - |
|
347 |
private function recupererParametresBruts() {
|
| - |
|
348 |
$parametres_bruts = array();
|
| - |
|
349 |
if (!empty($_SERVER['QUERY_STRING'])) {
|
| - |
|
350 |
$paires = explode('&', $_SERVER['QUERY_STRING']);
|
| - |
|
351 |
foreach ($paires as $paire) {
|
| - |
|
352 |
$nv = explode('=', $paire);
|
| - |
|
353 |
$nom = urldecode($nv[0]);
|
| 317 |
$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';');
|
354 |
$valeur = urldecode($nv[1]);
|
| - |
|
355 |
$parametres_bruts[$nom] = $valeur;
|
| 318 |
$_GET[$cle] = strip_tags(str_replace($verifier, '', $valeur));
|
356 |
}
|
| - |
|
357 |
$parametres_bruts = $this->nettoyerParametres($parametres_bruts);
|
| 319 |
}
|
358 |
}
|
| Line 320... |
Line 359... |
| 320 |
}
|
359 |
return $parametres_bruts;
|
| 321 |
}
|
360 |
}
|
| 322 |
|
361 |
|
| Line 377... |
Line 416... |
| 377 |
$retour = '';
|
416 |
$retour = '';
|
| 378 |
if ($this->service != null) {
|
417 |
if ($this->service != null) {
|
| 379 |
$Service = new $this->service(self::$config);
|
418 |
$Service = new $this->service(self::$config);
|
| 380 |
if (method_exists($Service, self::METHODE_GET)) {
|
419 |
if (method_exists($Service, self::METHODE_GET)) {
|
| 381 |
$methodeGet = self::METHODE_GET;
|
420 |
$methodeGet = self::METHODE_GET;
|
| - |
|
421 |
$parametres = $Service->utiliserParametresBruts() ? $this->parametresBruts : $this->parametres;
|
| 382 |
$retour = $Service->$methodeGet($this->ressources, $this->parametres);
|
422 |
$retour = $Service->$methodeGet($this->ressources, $parametres);
|
| 383 |
} else {
|
423 |
} else {
|
| 384 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
424 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
| 385 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_GET."' nécessaire ".
|
425 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_GET."' nécessaire ".
|
| 386 |
"lors de l'appel du service via la méthode HTTP GET.";
|
426 |
"lors de l'appel du service via la méthode HTTP GET.";
|
| 387 |
self::ajouterMessage($e);
|
427 |
self::ajouterMessage($e);
|
| Line 392... |
Line 432... |
| 392 |
|
432 |
|
| 393 |
private function post() {
|
433 |
private function post() {
|
| 394 |
$retour = '';
|
434 |
$retour = '';
|
| 395 |
$paires = $this->parserDonneesRequete();
|
435 |
$paires = $this->parserDonneesRequete();
|
| 396 |
if (count($paires) != 0) {
|
436 |
if (count($paires) != 0) {
|
| 397 |
if (isset($paires['action']) && $paires['action'] == 'DELETE') {// Altnative à l'utilisation de DELETE
|
437 |
if (isset($paires['action']) && $paires['action'] == 'DELETE') {// Alternative à l'utilisation de DELETE
|
| 398 |
$this->delete();
|
438 |
$this->delete();
|
| 399 |
} else if (count($this->ressources) == 0) {// Altnative à l'utilisation de PUT
|
439 |
} else if (count($this->ressources) == 0) {// Alternative à l'utilisation de PUT
|
| 400 |
$retour = $this->put();
|
440 |
$retour = $this->put();
|
| 401 |
} else {
|
441 |
} else {
|
| 402 |
if ($this->service != null) {
|
442 |
if ($this->service != null) {
|
| 403 |
$Service = new $this->service(self::$config);
|
443 |
$Service = new $this->service(self::$config);
|
| Line 430... |
Line 470... |
| 430 |
if (count($paires) != 0) {
|
470 |
if (count($paires) != 0) {
|
| 431 |
if ($this->service != null) {
|
471 |
if ($this->service != null) {
|
| 432 |
$Service = new $this->service(self::$config);
|
472 |
$Service = new $this->service(self::$config);
|
| 433 |
if (method_exists($Service, self::METHODE_PUT)) {
|
473 |
if (method_exists($Service, self::METHODE_PUT)) {
|
| 434 |
$methodePut = self::METHODE_PUT;
|
474 |
$methodePut = self::METHODE_PUT;
|
| 435 |
$retour = $Service->$methodePut($this->ressources, $paires);
|
475 |
$retour = $Service->$methodePut($this->ressources, $paires);
|
| 436 |
if ($retour !== false) {
|
476 |
if ($retour !== false) {
|
| 437 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
|
477 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
|
| 438 |
}
|
478 |
}
|
| 439 |
} else {
|
479 |
} else {
|
| 440 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
480 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
| 441 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_PUT."' nécessaire ".
|
481 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_PUT."' nécessaire ".
|
| 442 |
"lors de l'appel du service via la méthode HTTP GET.";
|
482 |
"lors de l'appel du service via la méthode HTTP GET.";
|