Exemplo n.º 1
0
{
  Session::close();
  exit('ok');
}

// Traductions
if($_SESSION['USER_PROFIL_TYPE']!='public')
{
  Lang::setlocale( LC_MESSAGES, Lang::get_locale_used() );
  Lang::bindtextdomain( LOCALE_DOMAINE, LOCALE_DIR );
  Lang::bind_textdomain_codeset( LOCALE_DOMAINE, LOCALE_CHARSET );
  Lang::textdomain( LOCALE_DOMAINE );
}

// Blocage éventuel par le webmestre ou un administrateur ou l'automate (on ne peut pas le tester avant car il faut avoir récupéré les données de session)
LockAcces::stopper_si_blocage( $_SESSION['BASE'] , FALSE /*demande_connexion_profil*/ );

// Autres fonctions à charger
require(CHEMIN_DOSSIER_INCLUDE.'fonction_divers.php');

// Logs d'infos au cas où un trop grand nombre de variables seraient postées (par défaut max_input_vars est configuré dans PHP à 1000, et en cas de dépassement les logs indiquent juste "in Unknown on line 0").
if(count($_POST)>999)
{
  ajouter_log_PHP( 'Trop de variables postées' /*log_objet*/ , 'Page '.$PAGE /*log_contenu*/ , __FILE__ /*log_fichier*/ , __LINE__ /*log_ligne*/ , FALSE /*only_sesamath*/ );
}

// Jeton CSRF
Session::verifier_jeton_anti_CSRF($PAGE);

// MAJ fichier de config hébergement si besoin
if(is_file(CHEMIN_FICHIER_CONFIG_INSTALL))
Exemplo n.º 2
0
    exit('ok');
}
// Arrêt s'il fallait seulement fermer la session
if ($PAGE == 'fermer_session') {
    Session::close();
    exit('ok');
}
// Traductions
if ($_SESSION['USER_PROFIL_TYPE'] != 'public') {
    Lang::setlocale(LC_MESSAGES, Lang::get_locale_used());
    Lang::bindtextdomain(LOCALE_DOMAINE, LOCALE_DIR);
    Lang::bind_textdomain_codeset(LOCALE_DOMAINE, LOCALE_CHARSET);
    Lang::textdomain(LOCALE_DOMAINE);
}
// Blocage éventuel par le webmestre ou un administrateur ou l'automate (on ne peut pas le tester avant car il faut avoir récupéré les données de session)
LockAcces::stopper_si_blocage($_SESSION['BASE'], FALSE);
// Autres fonctions à charger
require CHEMIN_DOSSIER_INCLUDE . 'fonction_divers.php';
// Logs d'infos au cas où un trop grand nombre de variables seraient postées (par défaut max_input_vars est configuré dans PHP à 1000, et en cas de dépassement les logs indiquent juste "in Unknown on line 0").
if (count($_POST) > 999) {
    ajouter_log_PHP('Trop de variables postées', 'Page ' . $PAGE, __FILE__, __LINE__, FALSE);
}
// Jeton CSRF
Session::verifier_jeton_anti_CSRF($PAGE);
// MAJ fichier de config hébergement si besoin
if (is_file(CHEMIN_FICHIER_CONFIG_INSTALL)) {
    require CHEMIN_DOSSIER_INCLUDE . 'maj_fichier_constantes_hebergement.php';
}
// Interface de connexion à la base, chargement et config (test sur CHEMIN_FICHIER_CONFIG_INSTALL car à éviter si procédure d'installation non terminée).
if (is_file(CHEMIN_FICHIER_CONFIG_INSTALL)) {
    // Choix des paramètres de connexion à la base de données adaptée...
Exemplo n.º 3
0
 /**
  * Tester si les données transmises permettent d'authentifier un utilisateur (sauf webmestre & développeur).
  * 
  * En cas de connexion avec les identifiants SACoche, la reconnaissance s'effectue sur le couple login/password.
  * En cas de connexion depuis un service SSO extérieur type CAS, la reconnaissance s'effectue en comparant l'identifiant transmis (via $login) avec l'id ENT de jointure connu de SACoche.
  * En cas de connexion utilisant GEPI, la reconnaissance s'effectue en comparant le login GEPI transmis avec l'id Gepi de jointure connu de SACoche.
  * 
  * @param int       $BASE
  * @param string    $login
  * @param string    $password
  * @param string    $mode_connection 'normal' | 'cas' | 'shibboleth' | 'siecle' | 'vecteur_parent' | 'gepi' | 'ldap' (?)
  * @param string    $parent_nom      facultatif, seulement pour $mode_connection = 'vecteur_parent'
  * @param string    $parent_prenom   facultatif, seulement pour $mode_connection = 'vecteur_parent'
  * @return array(string,array)   ('ok',$DB_ROW) ou (message_d_erreur,tableau_vide)
  */
 public static function tester_authentification_utilisateur($BASE,$login,$password,$mode_connection,$parent_nom='',$parent_prenom='')
 {
   // En cas de multi-structures, il faut charger les paramètres de connexion à la base concernée
   // Sauf pour une connexion à un ENT, car alors il a déjà fallu les charger pour récupérer les paramètres de connexion à l'ENT
   if( ($BASE) && ($mode_connection=='normal') )
   {
     charger_parametres_mysql_supplementaires($BASE);
   }
   // Récupérer les données associées à l'utilisateur.
   $DB_ROW = DB_STRUCTURE_PUBLIC::DB_recuperer_donnees_utilisateur($mode_connection,$login,$parent_nom,$parent_prenom);
   // Si login (ou identifiant SSO) non trouvé...
   if(empty($DB_ROW))
   {
     switch($mode_connection)
     {
       case 'normal'         : $message = 'Nom d\'utilisateur incorrect !'; break;
       case 'cas'            : $message = 'Identification réussie mais identifiant CAS "'       .$login.'" inconnu dans SACoche !<br />Un administrateur doit renseigner que l\'identifiant ENT associé à votre compte SACoche est "' .$login.'"&hellip;<br />Il doit pour cela se connecter à SACoche, menu [Gestion&nbsp;courante], et indiquer pour votre compte dans le champ [Id.&nbsp;ENT] la valeur "' .$login.'".'; break;
       case 'shibboleth'     : $message = 'Identification réussie mais identifiant Shibboleth "'.$login.'" inconnu dans SACoche !<br />Un administrateur doit renseigner que l\'identifiant ENT associé à votre compte SACoche est "' .$login.'"&hellip;<br />Il doit pour cela se connecter à SACoche, menu [Gestion&nbsp;courante], et indiquer pour votre compte dans le champ [Id.&nbsp;ENT] la valeur "' .$login.'".'; break;
       case 'siecle'         : $message = 'Identification réussie mais identifiant Sconet "'    .$login.'" inconnu dans SACoche !<br />Un administrateur doit renseigner que l\'identifiant Sconet associé à votre compte SACoche est "' .$login.'"&hellip;<br />Il doit pour cela se connecter à SACoche, menu [Gestion&nbsp;courante], et indiquer pour votre compte dans le champ [Id.&nbsp;Sconet] la valeur "' .$login.'".'; break;
       case 'vecteur_parent' : $message = 'Identification réussie mais compte parent introuvable dans SACoche !<br />Le compte SACoche d\'un responsable légal dont le nom est "' .$parent_nom.'", le prénom est "' .$parent_prenom.'", et ayant la charge d\'un enfant dont l\'identifiant Sconet est "' .$login.'", n\'a pas été trouvé.'; break;
       case 'gepi'           : $message = 'Identification réussie mais login GEPI "'            .$login.'" inconnu dans SACoche !<br />Un administrateur doit renseigner que l\'identifiant GEPI associé à votre compte SACoche est "'.$login.'"&hellip;<br />Il doit pour cela se connecter à SACoche, menu [Gestion&nbsp;courante], et indiquer pour votre compte dans le champ [Id.&nbsp;Gepi] la valeur "'.$login.'".'; break;
     }
     return array($message,array());
   }
   // Blocage éventuel par le webmestre ou un administrateur ou l'automate
   LockAcces::stopper_si_blocage( $BASE , $DB_ROW['user_profil_sigle'] );
   // Si mdp incorrect...
   if( ($mode_connection=='normal') && ($DB_ROW['user_password']!=crypter_mdp($password)) )
   {
     global $PAGE;
     return array( 'Mot de passe incorrect ! Nouvelle tentative autorisée dans '.$_SESSION['FORCEBRUTE'][$PAGE]['DELAI'].'s.' , array() );
   }
   // Si compte desactivé...
   if($DB_ROW['user_sortie_date']<=TODAY_MYSQL)
   {
     return array( 'Identification réussie mais ce compte est desactivé !' , array() );
   }
   // Mémoriser la date de la (dernière) connexion (pour les autres cas, sera enregistré lors de la confirmation de la prise en compte des infos CNIL).
   if( ($DB_ROW['user_connexion_date']!==NULL) || in_array($DB_ROW['user_profil_type'],array('webmestre','administrateur')) )
   {
     DB_STRUCTURE_PUBLIC::DB_enregistrer_date_connexion($DB_ROW['user_id']);
   }
   // Enregistrement d'un cookie sur le poste client servant à retenir le dernier établissement sélectionné si identification avec succès
   Cookie::definir( COOKIE_STRUCTURE , $BASE , 31536000 /* 60*60*24*365 = 1 an */ );
   // Enregistrement d'un cookie sur le poste client servant à retenir le dernier mode de connexion utilisé si identification avec succès
   Cookie::definir( COOKIE_AUTHMODE , $mode_connection );
   // Si on arrive ici c'est que l'identification s'est bien effectuée !
   return array( 'ok' , $DB_ROW );
 }