[ Index ] |
|
Code source de SPIP Agora 1.4 |
1 <?php 2 /***************************************************** 3 * This file is part of Agora, web based content management system. 4 * 5 * Agora is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; version 2 of the License. 8 * 9 * Agora is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details (file "COPYING"). 13 * 14 * Copyright © Arnaud Martin, Antoine Pitrou et Philippe Rivière. 15 * List of authors detailed in "copyright_fr.html" file. 16 * E-mail : agora@sig.premier-ministre.gouv.fr 17 * Web site : http://www.agora.gouv.fr 18 *****************************************************/ 19 20 // Ce fichier ne sera execute qu'une fois 21 if (defined("_ECRIRE_INC_AUTH")) 22 return; 23 24 define("_ECRIRE_INC_AUTH", "1"); 25 26 include_ecrire ("inc_meta.php"); // amorce la connexion MySQL ... t'es sur ? 27 include_ecrire ("inc_session.php"); 28 29 require_once dirname(__FILE__). "/include/bd/inc_rubrique_factory.php"; 30 require_once dirname(__FILE__). "/include/bd/inc_auteur_factory.php"; 31 require_once dirname(__FILE__). "/include/bd/inc_profil_factory.php"; 32 require_once dirname(__FILE__). "/include/authorization/inc_authorization_factory.php"; 33 34 // 35 // Fonctions de gestion de l'acces restreint aux rubriques 36 // 37 38 /** 39 * renvoi si on a acces a la rubrique 40 **/ 41 42 function acces_rubrique ($id_rubrique) { 43 44 if ($id_rubrique < 0) { 45 return false; 46 } 47 48 $authorization = &recuperer_instance_authorization('isManagedRubriqueByAuteurId', $GLOBALS['connect_id_auteur'], array('rubriqueId' => $id_rubrique)); 49 return ($authorization->isAuthorizedAction()); 50 } 51 52 /** 53 * renvoi si on a acces a la rubrique et si on est admin (je crois) 54 * (c'est nimp !!!!) 55 **/ 56 57 function acces_restreint_rubrique ($id_rubrique) { 58 59 if ($id_rubrique <= 0) { 60 return false; 61 } 62 63 $auteurMetier = &recuperer_instance_auteur(); 64 $loadOK = $auteurMetier->load($GLOBALS['connect_id_auteur']); 65 66 if (PEAR::isError($loadOK)) { 67 return false; 68 } 69 70 // suis je un admin ? 71 $profilMetier = &recuperer_instance_profil(); 72 $profilMetier -> load($auteurMetier->getProfil()); 73 74 if ($profilMetier->getIntitule() == 'item_administrateur') 75 return true; 76 77 // ai-je l'autorisation sur la rubrique 78 $authorization = &recuperer_instance_authorization('isManagedRubriqueByAuteurId', 79 $GLOBALS['connect_id_auteur'], 80 array('rubriqueId' => $id_rubrique)); 81 82 return (($authorization->isAuthorizedAction()) and ($profilMetier->getIntitule() == 'item_administrateur')); 83 } 84 85 function auth () { 86 global $INSECURE, $HTTP_POST_VARS, $HTTP_GET_VARS, $HTTP_COOKIE_VARS, $REMOTE_USER, $PHP_AUTH_USER, $PHP_AUTH_PW; 87 global $auth_can_disconnect, $ignore_auth_http, $ignore_remote_user; 88 89 global $connect_id_auteur, $connect_nom, $connect_bio, $connect_email; 90 global $connect_nom_site, $connect_url_site, $connect_login, $connect_pass; 91 global $connect_activer_imessage, $connect_activer_messagerie; 92 global $connect_statut, $connect_toutes_rubriques, $connect_id_rubrique; 93 global $connect_profil; 94 95 global $auteur_session, $prefs; 96 global $clean_link; 97 98 // 99 // Si pas de bdd, finir 100 // 101 102 if (!$GLOBALS['db_ok']) { 103 echo "<p><h4>" . _T('titre_probleme_technique'). "</h4></p>\n" 104 . "<tt>" . $GLOBALS['db_ok']->getMessage(). "</tt>\n"; 105 return false; 106 } 107 108 // 109 // Initialiser variables (eviter hacks par URL) 110 // 111 112 $auth_login = ""; 113 $auth_pass = ""; 114 $auth_pass_ok = false; 115 $auth_can_disconnect = false; 116 $auth_htaccess = false; 117 118 // 119 // Recuperer les donnees d'identification 120 // 121 122 // Peut-etre sommes-nous en auth http? 123 if ($PHP_AUTH_USER && $PHP_AUTH_PW && !$ignore_auth_http) { 124 if (verifier_php_auth()) { 125 $auth_login = $PHP_AUTH_USER; 126 $auth_pass_ok = true; 127 $auth_can_disconnect = true; 128 } 129 else // normalement on n'arrive pas la sauf changement de mot de passe dans la base... 130 if ($PHP_AUTH_USER != 'root') // ... mais quelques serveurs forcent cette valeur 131 { 132 $auth_login = ''; 133 echo "<p><strong>" . _T('info_connexion_refusee'). "</strong></p>"; 134 echo "[<a href='../spip_cookie.php?essai_auth_http=oui'>" . _T('lien_reessayer'). "</a>]"; 135 exit; 136 } 137 138 $PHP_AUTH_PW = ''; 139 $_SERVER['PHP_AUTH_PW'] = ''; 140 $HTTP_SERVER_VARS['PHP_AUTH_PW'] = ''; 141 } 142 143 // Authentification session 144 else if ($cookie_session = $HTTP_COOKIE_VARS[$GLOBALS['cookie_prefix']. '_session']) { 145 146 if (verifier_session($cookie_session)) { 147 $profilMetier = &recuperer_instance_profil(); 148 $monProfilMax = $profilMetier->getProfilForIntitule('item_administrateur'); 149 $monProfilMin = $profilMetier->getProfilForIntitule('item_redacteur_en_chef'); 150 151 if ($auteur_session['profil'] >= $monProfilMin->getPoids()OR $auteur_session['profil'] <= $monProfilMax->getPoids()) { 152 $auth_login = $auteur_session['login']; 153 $auth_pass_ok = true; 154 $auth_can_disconnect = true; 155 } 156 157 // 158 // Create the cache of spip_action data. Thank you ANPE.fr! 159 // 160 include_once(dirname(__FILE__). "/authorization.php"); 161 create_auth(); 162 } 163 } 164 165 // Authentification .htaccess 166 else if ($REMOTE_USER && !$INSECURE['REMOTE_USER'] && !$ignore_remote_user) { 167 $auth_login = $REMOTE_USER; 168 $auth_pass_ok = true; 169 $auth_htaccess = true; 170 } 171 172 // Tentative de login echec 173 else if ($GLOBALS['bonjour'] == 'oui') { 174 $link = new Link("../spip_cookie.php?test_echec_cookie=oui"); 175 $clean_link->delVar('bonjour'); 176 $link->addVar('url', 'ecrire/' . $clean_link->getUrl()); 177 @header("Location: " . $link->getUrl()); 178 exit; 179 } 180 181 // Si pas authentifie, demander login / mdp 182 if (!$auth_login) { 183 $url = urlencode('ecrire/' . $clean_link->getUrl()); 184 @header("Location: ../spip_login.php?var_url=$url"); 185 exit; 186 } 187 188 // 189 // Chercher le login dans la table auteurs 190 // 191 192 $auth_login = addslashes($auth_login); 193 $auteurMetier = &recuperer_instance_auteur(); 194 $allAuteurs = $auteurMetier->getAllForLoginExceptStatuts($auth_login, '5poubelle', 'forum'); 195 196 if (PEAR::isError($allAuteurs)) { 197 die($allAuteurs->getMessage()); 198 } 199 200 if (list(, $auteurMetier) = each($allAuteurs)) { 201 $connect_id_auteur = $auteurMetier->getAuteurId(); 202 $GLOBALS['connect_id_auteur'] = $connect_id_auteur; 203 $connect_nom = $auteurMetier->getNom(); 204 $connect_bio = $auteurMetier->getBio(); 205 $connect_email = $auteurMetier->getEmail(); 206 $connect_nom_site = $auteurMetier->getNomSite(); 207 $connect_url_site = $auteurMetier->getUrlSite(); 208 $connect_login = $auteurMetier->getLogin(); 209 $connect_pass = $auteurMetier->getPass(); 210 $connect_statut = $auteurMetier->getStatut(); 211 $connect_profil = $auteurMetier->getProfil(); 212 $connect_activer_messagerie = $auteurMetier->getMessagerie(); 213 $connect_activer_imessage = $auteurMetier->getImessage(); 214 215 // TODO : la globale $connect_toutes_rubriques est utilisée dans inc_présentation ... elle indique si on est admin ou pas ? 216 // à vérifier et renommer 217 if ($connect_profil == 16) { 218 $connect_toutes_rubriques = true; 219 } 220 else { 221 $connect_toutes_rubriques = false; 222 } 223 224 // TODO à tester 225 226 // Special : si dans la fiche auteur on modifie les valeurs 227 // de messagerie, utiliser ces valeurs plutot que celle de la base. 228 // D'ou leger bug si on modifie la fiche de quelqu'un d'autre. 229 if ($GLOBALS['perso_activer_messagerie']) { 230 $connect_activer_messagerie = $GLOBALS['perso_activer_messagerie']; 231 $connect_activer_imessage = $GLOBALS['perso_activer_imessage']; 232 } 233 234 // regler les preferences de l'auteur 235 $prefs = unserialize($auteurMetier->getPrefs()); 236 237 if (!isset($prefs['display'])) { // recuperer les cookies ou creer defaut 238 if ($GLOBALS['set_disp'] = $GLOBALS['HTTP_COOKIE_VARS']['spip_display']) { } 239 else 240 $GLOBALS['set_disp'] = 2; 241 242 if ($GLOBALS['set_couleur'] = $GLOBALS['HTTP_COOKIE_VARS']['spip_couleur']) { } 243 else 244 $GLOBALS['set_couleur'] = 6; 245 if ($GLOBALS['set_options'] = $GLOBALS['HTTP_COOKIE_VARS']['spip_options']) { } 246 else 247 $GLOBALS['set_options'] = 'basiques'; 248 } 249 250 // Indiquer connexion 251 if ($connect_activer_messagerie != "non") { 252 $loadOK = $auteurMetier->load($connect_id_auteur); 253 if (PEAR::isError($loadOK)) { 254 $loadOK->getMessage(); 255 } 256 else { 257 $maDate = new Date(); 258 259 $auteurMetier->setEnLigne($maDate->getDate(DATE_FORMAT_ISO)); 260 //$auteurMetier->setEnLigne("NOW()"); 261 $updateOK = $auteurMetier->update(); 262 if (PEAR::isError($updateOK)) { 263 die($updateOK->getMessage()); 264 } 265 } 266 } 267 268 //Modification 29.06.2004 by Maciek. Based on ANPE code. 269 if (!isset($_SESSION['AgoraRubriquesCache'])) { 270 // mettre ce code en commentaire permet 271 // de construire le cache petit à petit plutot que de la charger en bloc 272 /* 273 $authorization = &recuperer_instance_authorization('recupererRubriqueAuteur', $connect_id_auteur); 274 if($authorization->isAuthorizedAction()) 275 { 276 $rubrique = &recuperer_instance_rubrique(); 277 $rubrique->updateAgoraCacheForParent($connect_id_auteur, 0, true); 278 $rubriqueMetier = &recuperer_instance_rubrique(); 279 $allRubriques = $rubriqueMetier->getRubriqueIdForAuteurIdExceptRoot($connect_id_auteur); 280 if(PEAR::isError($allRubriques)) { 281 die($allRubriques->getMessage()); 282 } 283 $connect_toutes_rubriques = (sizeOf($allRubriques) == 0); 284 285 } 286 // Si pas admin, acces egal a toutes rubriques 287 else { 288 $connect_toutes_rubriques = false; 289 $connect_id_rubrique = array(); 290 } 291 */ 292 } 293 else { 294 //Si le cache est trop vieux, on essaie de le refaire 295 //XXX use metas for the timeout 296 $timeout = 600; 297 $currentTime = time() - $_SESSION['AgoraRubriquesCache']['LastCacheUpdate']; 298 299 if ($currentTime > $timeout) { 300 $rubrique = &recuperer_instance_rubrique(); 301 $rubrique->updateAgoraCacheForTimeout($connect_id_auteur); 302 } 303 304 $rubriqueMetier = &recuperer_instance_rubrique(); 305 // TODO : c'est la peine de le faire à chaque fois :-( 306 $allRubriques = $rubriqueMetier->getRubriqueIdForAuteurIdExceptRoot($connect_id_auteur); 307 308 if (PEAR::isError($allRubriques)) { 309 die($allRubriques->getMessage()); 310 } 311 $connect_toutes_rubriques = (sizeOf($allRubriques) == 0); 312 } 313 } 314 else { 315 // ici on est dans un cas limite : l'auteur a ete identifie OK 316 // mais il n'existe pas dans la table auteur. Cause possible, 317 // notamment, une restauration de base de donnees dans laquelle 318 // il n'existe pas. 319 include_ecrire ('inc_presentation.php'); 320 include_ecrire ('inc_texte.php'); 321 install_debut_html(_T('avis_erreur_connexion')); 322 echo "<br /><br />\n<p>"._T('texte_inc_auth_1', array('auth_login' => $auth_login)) 323 ." <a href='../spip_cookie.php?logout=$auth_login'>"._T('texte_inc_auth_2')."</a>" 324 ._T('texte_inc_auth_3')."</p>\n"; 325 install_fin_html(); 326 exit; 327 } 328 329 if (!$auth_pass_ok) { 330 @header("Location: ../spip_login.php?var_erreur=pass"); 331 exit; 332 } 333 334 if ($connect_statut == 'nouveau') { 335 $auteurMetier = &recuperer_instance_auteur(); 336 $loadOK = $auteurMetier->load($connect_id_auteur); 337 338 if (PEAR::isError($loadOK)) { 339 die($loadOK->getMessage()); 340 } 341 else { 342 $profilMetier = &recuperer_instance_profil(); 343 $monProfil = $profilMetier->getProfilForIntitule('item_redacteur'); 344 $auteurMetier->setProfil($monProfil->getPoids()); 345 $updateOK = $auteurMetier->update(); 346 if (PEAR::isError($updateOK)) { 347 die($updateOK->getMessage()); 348 } 349 } 350 $profilMetier = &recuperer_instance_profil(); 351 $monProfil = $profilMetier->getProfilForIntitule('item_redacteur'); 352 $connect_profil = $monProfil->getPoids(); 353 } 354 return true; 355 } 356 357 if (!auth()) 358 exit; 359 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sat Feb 24 14:40:03 2007 | par Balluche grâce à PHPXref 0.7 |