// //////////////////////////////////////////////////////////////////////////////////////////////////// // Basculer vers un autre compte // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($action == 'basculer' && $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']); if (!$_SESSION['USER_SWITCH_ID']) { exit_json(FALSE, 'Aucune liaison de compte vous concernant n\'a été trouvée !'); } $tab_user = explode(',', $user_liste); if (!in_array($user_id, $tab_user)) { exit_json(FALSE, 'Le compte indiqué n\'est pas relié au votre !'); } // C'est ok $auth_DB_ROW = DB_STRUCTURE_PUBLIC::DB_recuperer_donnees_utilisateur('switch', $user_id); $BASE = $_SESSION['BASE']; Session::close__open_new__init(FALSE); SessionUser::initialiser_utilisateur($BASE, $auth_DB_ROW); exit_json(TRUE); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Ajouter une liaison // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($action == 'ajouter' && $login != '' && $password != '') { // initialisation $auth_resultat = 'Erreur avec les données transmises !'; // 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 {
/** * 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.'"…<br />Il doit pour cela se connecter à SACoche, menu [Gestion courante], et indiquer pour votre compte dans le champ [Id. 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.'"…<br />Il doit pour cela se connecter à SACoche, menu [Gestion courante], et indiquer pour votre compte dans le champ [Id. 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.'"…<br />Il doit pour cela se connecter à SACoche, menu [Gestion courante], et indiquer pour votre compte dans le champ [Id. 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.'"…<br />Il doit pour cela se connecter à SACoche, menu [Gestion courante], et indiquer pour votre compte dans le champ [Id. 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 ); }