| 1477 | aurelien | 1 | <?php
 | 
        
           | 1815 | jpm | 2 | // declare(encoding='UTF-8');
 | 
        
           | 1794 | jpm | 3 | /**
 | 
        
           |  |  | 4 |  * Contient les méthodes permettant d'identifier l'utilisateur de l'application DEL.
 | 
        
           |  |  | 5 |  *
 | 
        
           | 1815 | jpm | 6 |  * @category  DEL
 | 
        
           |  |  | 7 |  * @package   Services
 | 
        
           |  |  | 8 |  * @package   Bibliotheque
 | 
        
           |  |  | 9 |  * @version   0.1
 | 
        
           |  |  | 10 |  * @author    Mathias CHOUET <mathias@tela-botanica.org>
 | 
        
           |  |  | 11 |  * @author    Jean-Pascal MILCENT <jpm@tela-botanica.org>
 | 
        
           |  |  | 12 |  * @author    Aurelien PERONNET <aurelien@tela-botanica.org>
 | 
        
           |  |  | 13 |  * @license   GPL v3 <http://www.gnu.org/licenses/gpl.txt>
 | 
        
           |  |  | 14 |  * @license   CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
 | 
        
           | 1794 | jpm | 15 |  * @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
 | 
        
           |  |  | 16 |  */
 | 
        
           | 1610 | jpm | 17 | class GestionUtilisateur {
 | 
        
           |  |  | 18 |   | 
        
           | 2049 | aurelien | 19 | 	protected $conteneur;
 | 
        
           |  |  | 20 | 	protected $contexte;
 | 
        
           |  |  | 21 | 	protected $bdd;
 | 
        
           | 1610 | jpm | 22 |   | 
        
           | 2077 | mathias | 23 | 	protected $utilisateur = array();
 | 
        
           | 1795 | jpm | 24 |   | 
        
           | 1826 | jpm | 25 | 	public function __construct(Conteneur $conteneur) {
 | 
        
           |  |  | 26 | 		$this->conteneur = $conteneur;
 | 
        
           | 1793 | jpm | 27 | 		$this->bdd = $this->conteneur->getBdd();
 | 
        
           | 1795 | jpm | 28 | 		$this->contexte = $this->conteneur->getContexte();
 | 
        
           |  |  | 29 | 		$this->chargerUtilisateur();
 | 
        
           |  |  | 30 | 	}
 | 
        
           |  |  | 31 |   | 
        
           | 2077 | mathias | 32 | 	/**
 | 
        
           |  |  | 33 | 	 * Charge des données utilisateur : un vrai profil si l'utilisateur est identifié,
 | 
        
           |  |  | 34 | 	 * un profil "anonyme" sinon
 | 
        
           |  |  | 35 | 	 */
 | 
        
           | 1795 | jpm | 36 | 	private function chargerUtilisateur() {
 | 
        
           | 1477 | aurelien | 37 | 		$this->demarrerSession();
 | 
        
           | 1795 | jpm | 38 | 		$infos = $this->getUtilisateurIdentifie();
 | 
        
           |  |  | 39 | 		$this->utilisateur = ($infos == null) ? $this->getUtilisateurAnonyme() : $infos;
 | 
        
           | 1477 | aurelien | 40 | 	}
 | 
        
           | 1610 | jpm | 41 |   | 
        
           | 1477 | aurelien | 42 | 	private function demarrerSession() {
 | 
        
           | 1793 | jpm | 43 | 		if (session_id() == '') {
 | 
        
           | 1795 | jpm | 44 | 			// TODO : modifier ce test lors du passage en php 5.4
 | 
        
           | 2077 | mathias | 45 | 			// TODO : expliquer pourquoi SVP :)
 | 
        
           | 1477 | aurelien | 46 | 			session_start();
 | 
        
           |  |  | 47 | 		}
 | 
        
           |  |  | 48 | 	}
 | 
        
           | 1610 | jpm | 49 |   | 
        
           | 2077 | mathias | 50 | 	// rétrocompat avec un vieux machin
 | 
        
           |  |  | 51 | 	public function getIdAnonymeTemporaire() {
 | 
        
           |  |  | 52 | 		return $this->utilisateur['session_id'];
 | 
        
           |  |  | 53 | 	}
 | 
        
           |  |  | 54 |   | 
        
           |  |  | 55 | 	/**
 | 
        
           |  |  | 56 | 	 * Retourne l'utilisateur en cours, chargé dans le constructeur
 | 
        
           |  |  | 57 | 	 * par getutilisateurIdentifié()
 | 
        
           |  |  | 58 | 	 */
 | 
        
           |  |  | 59 | 	public function getUtilisateur() {
 | 
        
           |  |  | 60 | 		return $this->utilisateur;
 | 
        
           |  |  | 61 | 	}
 | 
        
           | 2086 | mathias | 62 |   | 
        
           | 2077 | mathias | 63 | 	/**
 | 
        
           |  |  | 64 | 	 * Recherche un jeton SSO dans l'entête HTTP "Authorization", vérifie ce
 | 
        
           |  |  | 65 | 	 * jeton auprès de l'annuaire et en cas de succès charge les informations
 | 
        
           |  |  | 66 | 	 * de l'utilisateur associé
 | 
        
           |  |  | 67 | 	 *
 | 
        
           |  |  | 68 | 	 * @return Array un profil utilisateur ou null
 | 
        
           |  |  | 69 | 	 */
 | 
        
           | 1795 | jpm | 70 | 	public function getUtilisateurIdentifie() {
 | 
        
           |  |  | 71 | 		$utilisateur = null;
 | 
        
           | 2077 | mathias | 72 | 		// lecture du jeton
 | 
        
           |  |  | 73 | 		$jeton = $this->lireJetonEntete();
 | 
        
           |  |  | 74 | 		if ($jeton != null) {
 | 
        
           |  |  | 75 | 			// validation par l'annuaire
 | 
        
           |  |  | 76 | 			$valide = $this->verifierJeton($jeton);
 | 
        
           |  |  | 77 | 			if ($valide === true) {
 | 
        
           |  |  | 78 | 				// décodage du courriel utilisateur depuis le jeton
 | 
        
           |  |  | 79 | 				$donneesJeton = $this->decoderJeton($jeton);
 | 
        
           |  |  | 80 | 				if ($donneesJeton != null && $donneesJeton["sub"] != "") {
 | 
        
           |  |  | 81 | 					// récupération de l'utilisateur
 | 
        
           |  |  | 82 | 					$courriel = $donneesJeton["sub"];
 | 
        
           |  |  | 83 | 					$utilisateur = $this->recupererUtilisateurEnBdd($courriel);
 | 
        
           |  |  | 84 | 				}
 | 
        
           |  |  | 85 | 			}
 | 
        
           | 1795 | jpm | 86 | 		}
 | 
        
           |  |  | 87 | 		if ($utilisateur != null) {
 | 
        
           | 2077 | mathias | 88 | 			$utilisateur = $this->completerInfosUtilisateur($utilisateur);
 | 
        
           | 1795 | jpm | 89 | 		}
 | 
        
           |  |  | 90 | 		return $utilisateur;
 | 
        
           |  |  | 91 | 	}
 | 
        
           |  |  | 92 |   | 
        
           | 2077 | mathias | 93 | 	/**
 | 
        
           |  |  | 94 | 	 * Essaye de trouver un jeton JWT non vide dans l'entête HTTP "Authorization"
 | 
        
           |  |  | 95 | 	 *
 | 
        
           |  |  | 96 | 	 * @return String un jeton JWT ou null
 | 
        
           |  |  | 97 | 	 */
 | 
        
           |  |  | 98 | 	protected function lireJetonEntete() {
 | 
        
           |  |  | 99 | 		$jwt = null;
 | 
        
           |  |  | 100 | 		$headers = apache_request_headers();
 | 
        
           |  |  | 101 | 		if (isset($headers["Authorization"]) && ($headers["Authorization"] != "")) {
 | 
        
           |  |  | 102 | 			$jwt = $headers["Authorization"];
 | 
        
           |  |  | 103 | 		}
 | 
        
           |  |  | 104 | 		return $jwt;
 | 
        
           |  |  | 105 | 	}
 | 
        
           |  |  | 106 |   | 
        
           |  |  | 107 | 	/**
 | 
        
           |  |  | 108 | 	 * Vérifie un jeton auprès de l'annuaire
 | 
        
           |  |  | 109 | 	 *
 | 
        
           |  |  | 110 | 	 * @param String $jeton un jeton JWT
 | 
        
           |  |  | 111 | 	 * @return true si le jeton est vérifié, false sinon
 | 
        
           |  |  | 112 | 	 */
 | 
        
           |  |  | 113 | 	protected function verifierJeton($jeton) {
 | 
        
           |  |  | 114 | 		$urlServiceVerification = $this->conteneur->getParametre("urlServiceBaseAuth") . "verifierjeton";
 | 
        
           |  |  | 115 | 		$urlServiceVerification .= "?token=" . $jeton;
 | 
        
           |  |  | 116 |   | 
        
           |  |  | 117 | 		// file_get_contents râle si le certificat HTTPS est auto-signé
 | 
        
           |  |  | 118 | 		//$retour = file_get_contents($urlServiceVerification);
 | 
        
           |  |  | 119 |   | 
        
           |  |  | 120 | 		// curl avec les options suivantes ignore le pb de certificat (pour tester en local)
 | 
        
           |  |  | 121 | 		$ch = curl_init();
 | 
        
           |  |  | 122 | 		$timeout = 5;
 | 
        
           |  |  | 123 | 		curl_setopt($ch, CURLOPT_URL, $urlServiceVerification);
 | 
        
           |  |  | 124 | 		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 | 
        
           |  |  | 125 | 		curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
 | 
        
           |  |  | 126 | 		// équivalent de "-k"
 | 
        
           |  |  | 127 | 		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
 | 
        
           |  |  | 128 | 		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 | 
        
           |  |  | 129 | 		$data = curl_exec($ch);
 | 
        
           |  |  | 130 | 		curl_close($ch);
 | 
        
           |  |  | 131 | 		$retour = $data;
 | 
        
           |  |  | 132 |   | 
        
           |  |  | 133 | 		$retour = json_decode($retour, true);
 | 
        
           |  |  | 134 |   | 
        
           |  |  | 135 | 		return ($retour === true);
 | 
        
           |  |  | 136 | 	}
 | 
        
           |  |  | 137 |   | 
        
           |  |  | 138 | 	/**
 | 
        
           |  |  | 139 | 	 * Décode un jeton JWT (SSO) précédemment validé et retourne les infos
 | 
        
           |  |  | 140 | 	 * qu'il contient (payload / claims)
 | 
        
           |  |  | 141 | 	 * @param String $jeton un jeton JWT précédemment validé
 | 
        
           |  |  | 142 | 	 */
 | 
        
           |  |  | 143 | 	protected function decoderJeton($jeton) {
 | 
        
           |  |  | 144 | 		$parts = explode('.', $jeton);
 | 
        
           |  |  | 145 | 		$payload = $parts[1];
 | 
        
           | 2166 | killian | 146 | 		$payload = base64_decode(strtr($payload, '-_', '+/'));
 | 
        
           | 2077 | mathias | 147 | 		$payload = json_decode($payload, true);
 | 
        
           |  |  | 148 |   | 
        
           |  |  | 149 | 		return $payload;
 | 
        
           |  |  | 150 | 	}
 | 
        
           |  |  | 151 |   | 
        
           |  |  | 152 | 	/**
 | 
        
           |  |  | 153 | 	 * Retourne un profil d'utilisateur non connecté (anonyme), avec un identifiant de session
 | 
        
           |  |  | 154 | 	 * PHP qui permet de suivre son activité
 | 
        
           |  |  | 155 | 	 */
 | 
        
           | 1795 | jpm | 156 | 	public function getUtilisateurAnonyme() {
 | 
        
           |  |  | 157 | 		return array(
 | 
        
           |  |  | 158 | 			'connecte' => false,
 | 
        
           | 1612 | jpm | 159 | 			'id_utilisateur' => session_id(),
 | 
        
           |  |  | 160 | 			'courriel' => '',
 | 
        
           |  |  | 161 | 			'mot_de_passe' => '',
 | 
        
           |  |  | 162 | 			'nom' => '',
 | 
        
           |  |  | 163 | 			'prenom' => '',
 | 
        
           | 1666 | jpm | 164 | 			'admin' => '0',
 | 
        
           | 1612 | jpm | 165 | 			'session_id' => session_id()
 | 
        
           | 1477 | aurelien | 166 | 		);
 | 
        
           |  |  | 167 | 	}
 | 
        
           | 1610 | jpm | 168 |   | 
        
           | 2077 | mathias | 169 | 	/**
 | 
        
           |  |  | 170 | 	 * Récupère les données d'un utilisateur dans la BDD depuis son login; considère que
 | 
        
           |  |  | 171 | 	 * l'utilisateur est légitime car il fournit un jeton SSO vérifié par l'annuaire
 | 
        
           |  |  | 172 | 	 *
 | 
        
           |  |  | 173 | 	 * @param String $login le courriel de l'utilisateur
 | 
        
           |  |  | 174 | 	 * @return array les infos de l'utilisateur
 | 
        
           |  |  | 175 | 	 */
 | 
        
           |  |  | 176 | 	private function recupererUtilisateurEnBdd($login) {
 | 
        
           |  |  | 177 | 		$loginP = $this->bdd->proteger($login);
 | 
        
           | 1610 | jpm | 178 |   | 
        
           | 2077 | mathias | 179 | 		$requete = 'SELECT du.id_utilisateur, nom, prenom, courriel, dui.admin '.
 | 
        
           | 1666 | jpm | 180 | 			'FROM del_utilisateur AS du '.
 | 
        
           |  |  | 181 | 			'	LEFT JOIN del_utilisateur_infos AS dui ON (du.id_utilisateur = dui.id_utilisateur) '.
 | 
        
           | 1826 | jpm | 182 | 			"WHERE courriel = $loginP ".
 | 
        
           | 1795 | jpm | 183 | 			' -- '.__FILE__.' : '.__LINE__;
 | 
        
           | 2077 | mathias | 184 |   | 
        
           | 1826 | jpm | 185 | 		return $this->bdd->recuperer($requete);
 | 
        
           | 1477 | aurelien | 186 | 	}
 | 
        
           | 1610 | jpm | 187 |   | 
        
           | 1826 | jpm | 188 | 	protected function completerInfosUtilisateur($utilisateur) {
 | 
        
           | 1477 | aurelien | 189 | 		$utilisateur['session_id'] = session_id();
 | 
        
           |  |  | 190 | 		$utilisateur['connecte'] = true;
 | 
        
           | 1826 | jpm | 191 | 		return $utilisateur;
 | 
        
           |  |  | 192 | 	}
 | 
        
           |  |  | 193 |   | 
        
           | 2143 | mathias | 194 | 	// @WARNING décompte des derniers événements désactivé pour raisons de perfs
 | 
        
           |  |  | 195 | 	// Mathias - 2016-10-05 @TODO faire mieux
 | 
        
           | 2053 | aurelien | 196 | 	protected function getEvenements($id_utilisateur) {
 | 
        
           |  |  | 197 | 		$sql = $this->conteneur->getSql();
 | 
        
           | 2143 | mathias | 198 |   | 
        
           | 2060 | aurelien | 199 | 		$date = $this->getDerniereDateConsultationEvenements($id_utilisateur);
 | 
        
           | 2143 | mathias | 200 |   | 
        
           |  |  | 201 | 		//$requete_activite = $sql->getRequeteNbEvenementsDepuisDate($id_utilisateur, $date);
 | 
        
           |  |  | 202 | 		//$resultats = $this->bdd->recupererTous($requete_activite);
 | 
        
           |  |  | 203 |   | 
        
           |  |  | 204 | 		$evenements = array();
 | 
        
           |  |  | 205 | 		//$nb_evenements = $resultats[0]['nb_evenements'];
 | 
        
           |  |  | 206 | 		//$evenements['nb_evenements'] = $nb_evenements;
 | 
        
           | 2053 | aurelien | 207 | 		$evenements['date_derniere_consultation_evenements'] = $date;
 | 
        
           | 2143 | mathias | 208 |   | 
        
           | 2053 | aurelien | 209 | 		return $evenements;
 | 
        
           | 2049 | aurelien | 210 | 	}
 | 
        
           | 2077 | mathias | 211 |   | 
        
           | 2060 | aurelien | 212 | 	public function getDerniereDateConsultationEvenements($id_utilisateur) {
 | 
        
           |  |  | 213 | 		$requete = "SELECT date_derniere_consultation_evenements FROM del_utilisateur_infos ".
 | 
        
           |  |  | 214 | 					"WHERE id_utilisateur = ".$this->bdd->proteger($id_utilisateur);
 | 
        
           |  |  | 215 | 		$date = $this->bdd->recuperer($requete);
 | 
        
           |  |  | 216 | 		$date = !empty($date['date_derniere_consultation_evenements']) ? $date['date_derniere_consultation_evenements'] : "0";
 | 
        
           | 2059 | aurelien | 217 | 		return $date;
 | 
        
           |  |  | 218 | 	}
 | 
        
           | 2077 | mathias | 219 |   | 
        
           | 2074 | aurelien | 220 | 	public function setDerniereDateConsultationEvenements($id_utilisateur, $date) {
 | 
        
           |  |  | 221 | 		// Vérification que la ligne correspondant à l'utilisateur dans la table
 | 
        
           |  |  | 222 | 		// infos existe bien (sinon on la crée)
 | 
        
           |  |  | 223 | 		$infos_utilisateur = $this->obtenirInfosUtilisateur($id_utilisateur);
 | 
        
           |  |  | 224 | 		if (empty($infos_utilisateur)) {
 | 
        
           |  |  | 225 | 			$this->initialiserInfosUtilisateur($id_utilisateur);
 | 
        
           |  |  | 226 | 		}
 | 
        
           |  |  | 227 |   | 
        
           | 2060 | aurelien | 228 | 		$requete = "UPDATE del_utilisateur_infos SET date_derniere_consultation_evenements = ".$this->bdd->proteger($date)." ".
 | 
        
           |  |  | 229 | 					"WHERE id_utilisateur = ".$this->bdd->proteger($id_utilisateur);
 | 
        
           |  |  | 230 | 		$this->bdd->executer($requete);
 | 
        
           | 2059 | aurelien | 231 | 	}
 | 
        
           | 2077 | mathias | 232 |   | 
        
           | 2053 | aurelien | 233 | 	protected function ajouterEvenements(&$utilisateur) {
 | 
        
           |  |  | 234 | 		$evenements = $this->getEvenements($utilisateur['id_utilisateur']);
 | 
        
           |  |  | 235 | 		$utilisateur = array_merge($utilisateur, $evenements);
 | 
        
           |  |  | 236 | 	}
 | 
        
           | 2077 | mathias | 237 |   | 
        
           | 2074 | aurelien | 238 | 	public function obtenirPreferencesUtilisateur($id_utilisateur) {
 | 
        
           |  |  | 239 | 		$prefs_utilisateur = $this->obtenirInfosUtilisateur($id_utilisateur);
 | 
        
           |  |  | 240 | 		if (empty($prefs_utilisateur)) {
 | 
        
           |  |  | 241 | 			$this->initialiserInfosUtilisateur($id_utilisateur);
 | 
        
           |  |  | 242 | 			$prefs_utilisateur = $this->renvoyerInfosUtilisateurDefaut($id_utilisateur);
 | 
        
           |  |  | 243 | 		} else {
 | 
        
           |  |  | 244 | 			if (empty($prefs_utilisateur['preferences'])) {
 | 
        
           |  |  | 245 | 				$prefs_utilisateur['preferences'] = $this->obtenirTableauPreferenceDefaut();
 | 
        
           |  |  | 246 | 			} else {
 | 
        
           |  |  | 247 | 				$prefs_utilisateur['preferences'] = json_decode($prefs_utilisateur['preferences']);
 | 
        
           |  |  | 248 | 			}
 | 
        
           |  |  | 249 | 			$prefs_utilisateur['admin'] = $prefs_utilisateur['admin'];
 | 
        
           |  |  | 250 | 		}
 | 
        
           |  |  | 251 |   | 
        
           |  |  | 252 | 		return $prefs_utilisateur;
 | 
        
           |  |  | 253 | 	}
 | 
        
           | 2077 | mathias | 254 |   | 
        
           | 2074 | aurelien | 255 | 	private function obtenirTableauPreferenceDefaut() {
 | 
        
           |  |  | 256 | 		return array('mail_notification_mes_obs' => '1', 'mail_notification_toutes_obs' => '0');
 | 
        
           |  |  | 257 | 	}
 | 
        
           | 2077 | mathias | 258 |   | 
        
           | 2074 | aurelien | 259 | 	private function renvoyerInfosUtilisateurDefaut($id_utilisateur) {
 | 
        
           |  |  | 260 | 		return array('id_utilisateur' => $id_utilisateur,
 | 
        
           |  |  | 261 | 				'admin' => '0',
 | 
        
           |  |  | 262 | 				'preferences' => $this->obtenirTableauPreferenceDefaut(),
 | 
        
           |  |  | 263 | 				'date_premiere_utilisation' => date('Y-m-d H:i:s'),
 | 
        
           |  |  | 264 | 				'date_derniere_consultation_evenements' => '0000-00-00 00:00:00');
 | 
        
           |  |  | 265 | 	}
 | 
        
           | 2077 | mathias | 266 |   | 
        
           | 2074 | aurelien | 267 | 	public function obtenirInfosUtilisateur($id_utilisateur) {
 | 
        
           |  |  | 268 | 		$requete = 'SELECT * '.
 | 
        
           |  |  | 269 | 				'FROM del_utilisateur_infos '.
 | 
        
           |  |  | 270 | 				'WHERE id_utilisateur = '.$this->bdd->proteger($id_utilisateur).' '.
 | 
        
           |  |  | 271 | 				' -- '.__FILE__.' : '.__LINE__;
 | 
        
           |  |  | 272 | 		$prefs_utilisateur = $this->bdd->recuperer($requete);
 | 
        
           |  |  | 273 | 		return $prefs_utilisateur;
 | 
        
           |  |  | 274 | 	}
 | 
        
           | 2077 | mathias | 275 |   | 
        
           | 2074 | aurelien | 276 | 	public function initialiserInfosUtilisateur($id_utilisateur) {
 | 
        
           |  |  | 277 | 		$preferences_defaut = $this->obtenirTableauPreferenceDefaut();
 | 
        
           |  |  | 278 | 		$prefsEncodeesP = $this->bdd->proteger(json_encode($preferences_defaut));
 | 
        
           |  |  | 279 | 		$idUtilisateurP = $this->bdd->proteger($id_utilisateur);
 | 
        
           |  |  | 280 | 		$requete = 'INSERT INTO del_utilisateur_infos '.
 | 
        
           |  |  | 281 | 				'(id_utilisateur, admin, preferences, date_premiere_utilisation )'.
 | 
        
           |  |  | 282 | 				"VALUES ($idUtilisateurP, 0, $prefsEncodeesP, NOW()) ".
 | 
        
           |  |  | 283 | 				'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() '.
 | 
        
           |  |  | 284 | 				' -- '.__FILE__.' : '.__LINE__;
 | 
        
           |  |  | 285 | 		return $this->bdd->executer($requete);
 | 
        
           |  |  | 286 | 	}
 | 
        
           | 2077 | mathias | 287 |   | 
        
           |  |  | 288 | 	/**
 | 
        
           |  |  | 289 | 	 * Vérifie qu'un utilisateur connu est identifié (mode non anonyme) et
 | 
        
           |  |  | 290 | 	 * que son identifiant numérique est égal à $id_utilisateur; si non,
 | 
        
           |  |  | 291 | 	 * retourne une erreur HTTP 401 et quitte le programme
 | 
        
           |  |  | 292 | 	 *
 | 
        
           |  |  | 293 | 	 * @param integer $id_utilisateur l'utilisateur attendu
 | 
        
           |  |  | 294 | 	 */
 | 
        
           |  |  | 295 | 	public function controleUtilisateurIdentifie($id_utilisateur) {
 | 
        
           |  |  | 296 | 		$ok = ($this->utilisateur['connecte'] === true && $this->utilisateur['id_utilisateur'] == $id_utilisateur);
 | 
        
           |  |  | 297 | 		if (! $ok) {
 | 
        
           |  |  | 298 | 			$message = "";
 | 
        
           |  |  | 299 | 			if ($this->utilisateur['connecte'] === true) {
 | 
        
           |  |  | 300 | 				$message = "Vous n'êtes pas propriétaire de la ressource demandée";
 | 
        
           |  |  | 301 | 			} else {
 | 
        
           |  |  | 302 | 				$message = "Vous n'êtes pas identifié";
 | 
        
           |  |  | 303 | 			}
 | 
        
           |  |  | 304 | 			$code = RestServeur::HTTP_CODE_ACCES_NON_AUTORISE;
 | 
        
           |  |  | 305 | 			throw new Exception($message, $code);
 | 
        
           |  |  | 306 | 		}
 | 
        
           |  |  | 307 | 	}
 | 
        
           |  |  | 308 |   | 
        
           |  |  | 309 | 	// rétrocompat'
 | 
        
           |  |  | 310 | 	public function etreAdmin() {
 | 
        
           | 2096 | mathias | 311 | 		return ($this->utilisateur['admin'] >= 1);
 | 
        
           | 2077 | mathias | 312 | 	}
 | 
        
           |  |  | 313 |   | 
        
           |  |  | 314 | 	// rétrocompat'
 | 
        
           |  |  | 315 | 	public function etreUtilisateurAvecDroitAdmin() {
 | 
        
           |  |  | 316 | 		$etreAdmin = $this->etreAdmin();
 | 
        
           |  |  | 317 | 		if (! $etreAdmin) {
 | 
        
           |  |  | 318 | 			$message = "Vous ne pouvez pas accéder à ce service car vous n'avez pas les droits d'administrateur !\n";
 | 
        
           |  |  | 319 | 			$code = RestServeur::HTTP_CODE_ACCES_NON_AUTORISE;
 | 
        
           |  |  | 320 | 			throw new Exception($message, $code);
 | 
        
           |  |  | 321 | 		}
 | 
        
           |  |  | 322 | 		return $etreAdmin;
 | 
        
           |  |  | 323 | 	}
 | 
        
           | 2079 | mathias | 324 | }
 | 
        
           |  |  | 325 |   | 
        
           |  |  | 326 | /**
 | 
        
           |  |  | 327 |  * Compatibilité avec nginx - merci http://php.net/manual/fr/function.getallheaders.php
 | 
        
           |  |  | 328 |  */
 | 
        
           |  |  | 329 | if (! function_exists('apache_request_headers')) {
 | 
        
           |  |  | 330 | 	function apache_request_headers() {
 | 
        
           |  |  | 331 | 		$headers = '';
 | 
        
           |  |  | 332 | 		foreach ($_SERVER as $name => $value) {
 | 
        
           |  |  | 333 | 			if (substr($name, 0, 5) == 'HTTP_') {
 | 
        
           |  |  | 334 | 				$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
 | 
        
           |  |  | 335 | 			}
 | 
        
           |  |  | 336 | 		}
 | 
        
           |  |  | 337 | 		return $headers;
 | 
        
           |  |  | 338 | 	}
 | 
        
           | 2166 | killian | 339 | }
 |