Subversion Repositories Applications.framework

Compare Revisions

Ignore whitespace Rev 416 → Rev 417

/trunk/framework/RestServeur.php
35,7 → 35,7
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @since 0.3
* @version $Id: RestServeur.php 359 2011-08-30 13:53:45Z delphine $
* @version $Id: RestServeur.php 413 2012-03-15 13:59:19Z jpm $
* @link /doc/framework/
*/
// TODO : gerer les retours : dans ce controleur : code retour et envoi ...
140,11 → 140,27
private $ressources = array();
 
/** Partie de l'url situé après le '?' servant à paramétrer le service demandé.
* Les données proviennent de $_GET où les caractères suivant ont été transformé en '_' undescrore dans les clés :
* - chr(32) ( ) (space)
* - chr(46) (.) (dot)
* - chr(91) ([) (open square bracket)
* - chr(128) - chr(159) (various)
* En outre nous appliquons la méthode nettoyerGet() qui effectue d'autres remplacement dans les valeurs.
* Ex. http://www.mondomaine.org/services/apiVersion/mon-service?monParametre1=maValeur1&monParametre2=maValeur2
* @see parametresBruts
* @var array
*/
private $parametres = array();
 
/** Partie de l'url situé après le '?' servant à paramétrer le service demandé.
* Les données proviennent de $_SERVER['QUERY_STRING'] et n'ont subies aucune transformation au niveau des clés.
* Cependant nous appliquons la méthode nettoyerGet() qui effectue d'autres remplacement dans les valeurs.
* Ex. http://www.mondomaine.org/services/apiVersion/mon-service?monParametre1=maValeur1&monParametre2=maValeur2
* @see parametres
* @var array
*/
private $parametresBruts = array();
 
/** Tableau contenant les paramètres de configuration du serveur.
* @var array
*/
306,20 → 322,43
}
 
private function initialiserParametres() {
$this->nettoyerGet();
$this->parametres = $_GET;
$this->parametres = $this->recupererParametresGet();
$this->parametresBruts = $this->recupererParametresBruts();
}
 
private function nettoyerGet() {
private function recupererParametresGet() {
$_GET = $this->nettoyerParametres($_GET);
return $_GET;
}
 
private function nettoyerParametres(Array $parametres) {
// Pas besoin d'utiliser urldecode car déjà fait par php pour les clés et valeur de $_GET
if (isset($_GET) && count($_GET) > 0) {
foreach ($_GET as $cle => $valeur) {
$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';');
$_GET[$cle] = strip_tags(str_replace($verifier, '', $valeur));
if (isset($parametres) && count($parametres) > 0) {
foreach ($parametres as $cle => $valeur) {
// les quotes, guillements et points-virgules ont été retirés des caractères à vérifier car
//ça n'a plus lieu d'être maintenant que l'on utilise protéger à peu près partout
$verifier = array('NULL', "\\", "\x00", "\x1a");
$parametres[$cle] = strip_tags(str_replace($verifier, '', $valeur));
}
}
return $parametres;
}
 
private function recupererParametresBruts() {
$parametres_bruts = array();
if (!empty($_SERVER['QUERY_STRING'])) {
$paires = explode('&', $_SERVER['QUERY_STRING']);
foreach ($paires as $paire) {
$nv = explode('=', $paire);
$nom = urldecode($nv[0]);
$valeur = urldecode($nv[1]);
$parametres_bruts[$nom] = $valeur;
}
$parametres_bruts = $this->nettoyerParametres($parametres_bruts);
}
return $parametres_bruts;
}
 
/**
* La méthode __autoload() charge dynamiquement les classes trouvées dans le code.
* Cette fonction est appelée par php5 quand il trouve une instanciation de classe dans le code.
379,7 → 418,8
$Service = new $this->service(self::$config);
if (method_exists($Service, self::METHODE_GET)) {
$methodeGet = self::METHODE_GET;
$retour = $Service->$methodeGet($this->ressources, $this->parametres);
$parametres = $Service->utiliserParametresBruts() ? $this->parametresBruts : $this->parametres;
$retour = $Service->$methodeGet($this->ressources, $parametres);
} else {
self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_GET."' nécessaire ".
394,9 → 434,9
$retour = '';
$paires = $this->parserDonneesRequete();
if (count($paires) != 0) {
if (isset($paires['action']) && $paires['action'] == 'DELETE') {// Altnative à l'utilisation de DELETE
if (isset($paires['action']) && $paires['action'] == 'DELETE') {// Alternative à l'utilisation de DELETE
$this->delete();
} else if (count($this->ressources) == 0) {// Altnative à l'utilisation de PUT
} else if (count($this->ressources) == 0) {// Alternative à l'utilisation de PUT
$retour = $this->put();
} else {
if ($this->service != null) {
432,9 → 472,9
$Service = new $this->service(self::$config);
if (method_exists($Service, self::METHODE_PUT)) {
$methodePut = self::METHODE_PUT;
$retour = $Service->$methodePut($this->ressources, $paires);
if ($retour !== false) {
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
$retour = $Service->$methodePut($this->ressources, $paires);
if ($retour !== false) {
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
}
} else {
self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);