Subversion Repositories Applications.framework

Rev

Rev 366 | Rev 383 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 366 Rev 382
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);