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); |