'WEBMESTRE_COURRIEL' => WEBMESTRE_COURRIEL, ); // Initialiser la classe $auth = new SimpleSAML_Auth_Simple('distant-gepi-saml'); //on forge une extension SAML pour tramsmettre l'établissement précisé dans SACoche $ext = array(); if($BASE) { $dom = new DOMDocument(); $ce = $dom->createElementNS('gepi_name_space', 'gepi_name_space:organization', $BASE); $ext[] = new SAML2_XML_Chunk($ce); } $auth->requireAuth( array('saml:Extensions'=>$ext) ); // Tester si le user est authentifié, rediriger sinon $auth->requireAuth(); // Récupérer l'identifiant Gepi de l'utilisateur authentifié pour le traiter dans l'application $attr = $auth->getAttributes(); $login_GEPI = $attr['USER_ID_GEPI'][0]; // Comparer avec les données de la base list($auth_resultat,$auth_DB_ROW) = SessionUser::tester_authentification_utilisateur( $BASE , $login_GEPI /*login*/ , FALSE /*password*/ , 'gepi' /*mode_connection*/ ); if($auth_resultat!='ok') { exit_error( 'Incident authentification Gepi' /*titre*/ , $auth_resultat /*contenu*/ ); } // Connecter l'utilisateur SessionUser::initialiser_utilisateur($BASE,$auth_DB_ROW); // Pas de redirection (passage possible d'infos en POST à conserver), on peut laisser le code se poursuivre. return; // Ne pas exécuter la suite de ce fichier inclus. } ?>
// Protection contre les attaques par force brute (laissé même pour cette page requiérant une authentification car la réponse en cas d'erreur de mdp y fait référence) if(!isset($_SESSION['FORCEBRUTE'][$PAGE])) { exit_json( FALSE , 'Session perdue ou absence de cookie : merci d\'actualiser la page.' ); } else if( $_SERVER['REQUEST_TIME'] - $_SESSION['FORCEBRUTE'][$PAGE]['TIME'] < $_SESSION['FORCEBRUTE'][$PAGE]['DELAI'] ) { $_SESSION['FORCEBRUTE'][$PAGE]['TIME'] = $_SERVER['REQUEST_TIME']; exit_json( FALSE , 'Sécurité : patienter '.$_SESSION['FORCEBRUTE'][$PAGE]['DELAI'].'s avant une nouvelle tentative.' ); } // Pour un utilisateur d'établissement, y compris un administrateur if($login==$_SESSION['USER_LOGIN']) { exit_json( FALSE , 'Saisir les identifiants d\'un <span class="u">autre compte</span>, pas celui en cours !' ); } list($auth_resultat,$auth_DB_ROW) = SessionUser::tester_authentification_utilisateur( $_SESSION['BASE'] , $login , $password , 'normal' /*mode_connection*/ ); if($auth_resultat!='ok') { $_SESSION['FORCEBRUTE'][$PAGE]['DELAI']++; $_SESSION['FORCEBRUTE'][$PAGE]['TIME'] = $_SERVER['REQUEST_TIME']; exit_json( FALSE , $auth_resultat ); } $user_id = $auth_DB_ROW['user_id']; // Par sécurité et pour actualiser une éventuelle liaison (dé)faite depuis un autre compte, on ne stocke en session que l'identifiant de la clef des associations // La méthode appelée ci-dessous effectue de multiples vérifications complémentaires list( $_SESSION['USER_SWITCH_ID'] , $user_liste ) = DB_STRUCTURE_SWITCH::DB_recuperer_et_verifier_listing_comptes_associes( $_SESSION['USER_ID'] , $_SESSION['USER_SWITCH_ID'] ); // Si le user connecté n'a pas de liaison, il faut aussi vérifier que le user de l'autre compte n'en a pas non plus if(!$_SESSION['USER_SWITCH_ID']) { list( $_SESSION['USER_SWITCH_ID'] , $user_liste ) = DB_STRUCTURE_SWITCH::DB_recuperer_et_verifier_listing_comptes_associes( $user_id , $_SESSION['USER_SWITCH_ID'] ); }
} if ($action == 'identifier') { // initialisation $auth_resultat = 'Erreur avec les données transmises !'; // Protection contre les attaques par force brute des robots (piratage compte ou envoi intempestif de courriels) if (!isset($_SESSION['FORCEBRUTE'][$PAGE])) { exit_json(FALSE, 'Session perdue ou absence de cookie : merci d\'actualiser la page.'); } else { if ($_SERVER['REQUEST_TIME'] - $_SESSION['FORCEBRUTE'][$PAGE]['TIME'] < $_SESSION['FORCEBRUTE'][$PAGE]['DELAI']) { $_SESSION['FORCEBRUTE'][$PAGE]['TIME'] = $_SERVER['REQUEST_TIME']; exit_json(FALSE, 'Sécurité : patienter ' . $_SESSION['FORCEBRUTE'][$PAGE]['DELAI'] . 's avant une nouvelle tentative.'); } } // 1/4 Pour un utilisateur d'établissement, y compris un administrateur if ($profil == 'structure' && $login != '' && $password != '') { list($auth_resultat, $auth_DB_ROW) = SessionUser::tester_authentification_utilisateur($BASE, $login, $password, 'normal'); if ($auth_resultat == 'ok') { SessionUser::initialiser_utilisateur($BASE, $auth_DB_ROW); } } else { if ($profil == 'webmestre' && $login == 'webmestre' && $password != '') { $auth_resultat = SessionUser::tester_authentification_webmestre($password); if ($auth_resultat == 'ok') { SessionUser::initialiser_webmestre(); } } else { if ($profil == 'developpeur' && $login == 'developpeur' && $password != '') { $auth_resultat = SessionUser::tester_authentification_developpeur($password); if ($auth_resultat == 'ok') { SessionUser::initialiser_developpeur(); }
if ($connexion_mode == 'gepi') { // Charger l'autoload de la librairie SimpleSAMLphp (qui ne peut être intégré de façon simple dans le _loader par un unique appel de classe (comme phpCAS). require CHEMIN_DOSSIER_SACOCHE . '_lib' . DS . 'SimpleSAMLphp' . DS . 'lib' . DS . '_autoload.php'; // Mise en session d'informations dont SimpleSAMLphp a besoin ; utiliser des constantes ne va pas car Gepi fait un appel à SimpleSAMLphp en court-circuitant SACoche pour vérifier la légitimité de l'appel. $_SESSION['SACoche-SimpleSAMLphp'] = array('GEPI_URL' => $gepi_url, 'GEPI_RNE' => $gepi_rne, 'GEPI_CERTIFICAT_EMPREINTE' => $gepi_certificat_empreinte, 'SIMPLESAMLPHP_BASEURLPATH' => substr($_SERVER['SCRIPT_NAME'], 1, -9) . '_lib/SimpleSAMLphp/www/', 'WEBMESTRE_NOM' => WEBMESTRE_NOM, 'WEBMESTRE_PRENOM' => WEBMESTRE_PRENOM, 'WEBMESTRE_COURRIEL' => WEBMESTRE_COURRIEL); // Initialiser la classe $auth = new SimpleSAML_Auth_Simple('distant-gepi-saml'); //on forge une extension SAML pour tramsmettre l'établissement précisé dans SACoche $ext = array(); if ($BASE) { $dom = new DOMDocument(); $ce = $dom->createElementNS('gepi_name_space', 'gepi_name_space:organization', $BASE); $ext[] = new SAML2_XML_Chunk($ce); } $auth->requireAuth(array('saml:Extensions' => $ext)); // Tester si le user est authentifié, rediriger sinon $auth->requireAuth(); // Récupérer l'identifiant Gepi de l'utilisateur authentifié pour le traiter dans l'application $attr = $auth->getAttributes(); $login_GEPI = $attr['USER_ID_GEPI'][0]; // Comparer avec les données de la base list($auth_resultat, $auth_DB_ROW) = SessionUser::tester_authentification_utilisateur($BASE, $login_GEPI, FALSE, 'gepi'); if ($auth_resultat != 'ok') { exit_error('Incident authentification Gepi', $auth_resultat); } // Connecter l'utilisateur SessionUser::initialiser_utilisateur($BASE, $auth_DB_ROW); // Pas de redirection (passage possible d'infos en POST à conserver), on peut laisser le code se poursuivre. return; // Ne pas exécuter la suite de ce fichier inclus. }