Subversion Repositories Applications.annuaire

Compare Revisions

Ignore whitespace Rev 449 → Rev 450

/branches/v1.2-autel/jrest/bibliotheque/JRestService.php
129,22 → 129,76
exit(0);
}
 
protected function envoyerMessageErreur($msg, $code) {
$textHttp = $this->getCodeHttpText($code);
header("HTTP/1.0 $code $textHttp");
header("Content-Type: text/plain; charset=utf-8");
die($msg);
}
 
private function getCodeHttpText($code) {
$text = '';
switch ($code) {
case 100: $text = 'Continue'; break;
case 101: $text = 'Switching Protocols'; break;
case 200: $text = 'OK'; break;
case 201: $text = 'Created'; break;
case 202: $text = 'Accepted'; break;
case 203: $text = 'Non-Authoritative Information'; break;
case 204: $text = 'No Content'; break;
case 205: $text = 'Reset Content'; break;
case 206: $text = 'Partial Content'; break;
case 300: $text = 'Multiple Choices'; break;
case 301: $text = 'Moved Permanently'; break;
case 302: $text = 'Moved Temporarily'; break;
case 303: $text = 'See Other'; break;
case 304: $text = 'Not Modified'; break;
case 305: $text = 'Use Proxy'; break;
case 400: $text = 'Bad Request'; break;
case 401: $text = 'Unauthorized'; break;
case 402: $text = 'Payment Required'; break;
case 403: $text = 'Forbidden'; break;
case 404: $text = 'Not Found'; break;
case 405: $text = 'Method Not Allowed'; break;
case 406: $text = 'Not Acceptable'; break;
case 407: $text = 'Proxy Authentication Required'; break;
case 408: $text = 'Request Time-out'; break;
case 409: $text = 'Conflict'; break;
case 410: $text = 'Gone'; break;
case 411: $text = 'Length Required'; break;
case 412: $text = 'Precondition Failed'; break;
case 413: $text = 'Request Entity Too Large'; break;
case 414: $text = 'Request-URI Too Large'; break;
case 415: $text = 'Unsupported Media Type'; break;
case 500: $text = 'Internal Server Error'; break;
case 501: $text = 'Not Implemented'; break;
case 502: $text = 'Bad Gateway'; break;
case 503: $text = 'Service Unavailable'; break;
case 504: $text = 'Gateway Time-out'; break;
case 505: $text = 'HTTP Version not supported'; break;
default:
exit('Unknown http status code "' . htmlentities($code) . '"');
break;
}
return $text;
}
 
//+----------------------------------------------------------------------------------------------------------------+
// GESTION de la BASE de DONNÉES
 
private function connecterPDO($config, $base = 'database') {
$cfg = $config[$base];
// ATTENTION : la connexin à la bdd peut échouer si l'host vaut localhost. Utiliser 127.0.0.1 à la place.
// ATTENTION : la connexin à la bdd peut échouer si l'host vaut localhost. Utiliser 127.0.0.1 à la place.
$dsn = $cfg['phptype'].':dbname='.$cfg['database'].';host='.$cfg['hostspec'];
try {
// Création de la connexion en UTF-8 à la BDD
// Création de la connexion en UTF-8 à la BDD
$PDO = new PDO($dsn, $cfg['username'], $cfg['password'], array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));
} catch (PDOException $e) {
echo 'La connexion à la base de donnée via PDO a échouée : ' .$dsn. $e->getMessage();
echo 'La connexion à la base de donnée via PDO a échouée : ' .$dsn. $e->getMessage();
}
// Affiche les erreurs détectées par PDO (sinon mode silencieux => aucune erreur affiché)
$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $PDO;
return $PDO;
}
 
protected function getTxt($id) {
201,6 → 255,21
//+----------------------------------------------------------------------------------------------------------------+
// GESTION DE L'IDENTIFICATION
 
public function controlerIpAutorisees() {
$ipsAutorisees = $this->config['jrest_admin']['ip_autorisees'];
 
$remoteIp = filter_input(INPUT_SERVER, 'REMOTE_ADDR', FILTER_VALIDATE_IP);
$serverIp = filter_input(INPUT_SERVER, 'SERVER_ADDR', FILTER_VALIDATE_IP);
if (in_array($remoteIp, $ipsAutorisees) == false) {
if ($remoteIp != $serverIp) {// ATTENTION : maintenir ce test à l'intérieur du précédent
$message = "Accès interdit. \n".
"Vous n'êtes pas autorisé à accéder à ce service depuis '$remoteIp' !\n";
$this->envoyerMessageErreur($message, 401);
}
}
return true;
}
 
protected function getIdentification(&$params) {
// Initialisation des variables
$utilisateur = array(0, session_id());
/branches/v1.2-autel/jrest/jrest.ini.defaut.php
7,8 → 7,8
; Default
[appli]
phptype = mysql
username =
password =
username =
password =
hostspec = localhost
database = tb_v4
 
21,8 → 21,8
; Identification
[database_ident]
phptype = mysql
username =
password =
username =
password =
hostspec = localhost
database = tb_v4
annuaire = annuaire_tela
45,4 → 45,6
; ADMIN
[jrest_admin]
admin = aurelien@tela-botanica.org,david.delon@clapas.net,jpm@tela-botanica.org,marie@tela-botanica.org
; Liste des ips (nom de domaine) autorisés à accéder aux services de DEL
ip_autorisees = "127.0.0.1, 193.54.123.169, 193.54.123.216, 162.38.234.6"
;*/?>
/branches/v1.2-autel/jrest/services/Utilisateur.php
32,12 → 32,19
$infos = null;
 
if (isset($this->ressources[0])) {
$methode_demande = array_shift($this->ressources);
$methode = $this->traiterNomMethodeGet($methode_demande);
if (method_exists($this, $methode)) {
$infos = $this->$methode();
if (is_int($this->ressources[0])) {
// ATTENTION : Ces web services ne doivent être accessible que depuis des applis installées sur nos serveurs
// pour les communications inter-serveurs.
$this->controlerIpAutorisees();
$infos = $this->getInfosParId($this->ressources[0]);
} else {
$this->messages[] = "Ce type de ressource '$methode_demande' n'est pas disponible pour la requete GET.";
$methode_demande = array_shift($this->ressources);
$methode = $this->traiterNomMethodeGet($methode_demande);
if (method_exists($this, $methode)) {
$infos = $this->$methode();
} else {
$this->messages[] = "Ce type de ressource '$methode_demande' n'est pas disponible pour la requete GET.";
}
}
} else {
$this->messages[] = "Le premier paramêtre du chemin du service doit correspondre au type de ressource demandée.";
51,7 → 58,32
}
}
 
 
/**
* Permet d'obtenir des infos pour un id utilisateur indiqué dans la ressource.
* RESSOURCE : /utilisateur/#id
* PARAMÊTRES : aucun
* RÉPONSE : Tableau possédant un courriel de la ressource en clé et en valeur :
* - id : identifiant numérique de l'utilisateur
* - pseudoUtilise : indique si on doit utiliser le pseudo à la place de Prénom NOM
* - pseudo : pseudo de l'utilisateur.
* - intitule : l'intitulé à affiche (choix auto entre "pseudo" et "prénom nom")
* - prenom : prénom
* - nom : nom de famille.
* - courriel : courriel
*/
public function getInfosParId($id_utilisateur) {
$champs = array('champ_id', 'champ_mail', 'champ_prenom', 'champ_nom');
 
$infos_utilisateurs = $this->getAnnuaire()->obtenirValeursUtilisateur($this->idAnnuaire, $id_utilisateur, $champs);
$infos_utilisateurs['pseudoUtilise'] = $this->obtenirPseudoUtilise($id_utilisateur);
$infos_utilisateurs['pseudo'] = $this->obtenirPseudo($id_utilisateur);
$infos_utilisateurs['intitule'] = $this->formaterIntitule($infos_utilisateurs);
 
return $infos_utilisateurs;
}
 
/**
* Permet d'obtenir les prénoms et noms des courriels des utilisateurs indiqués dans la ressource.
* RESSOURCE : /utilisateur/prenom-nom-par-courriel/[courriel,courriel,...]
* PARAMÊTRES : aucun