[ Index ]
 

Code source de SPIP Agora 1.4

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/Agora1-4/ecrire/ -> inc_auth.php (source)

   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  ?>


Généré le : Sat Feb 24 14:40:03 2007 par Balluche grâce à PHPXref 0.7