コード例 #1
0
/**
 * DB_STRUCTURE_modifier_mdp_utilisateur
 * Remarque : cette fonction n'est pas appelée pour un professeur ou un élève si le mode de connexion est SSO
 *
 * @param int    $user_id
 * @param string $password_ancien
 * @param string $password_nouveau
 * @return string   'ok' ou 'Le mot de passe actuel est incorrect !'
 */
function DB_STRUCTURE_modifier_mdp_utilisateur($user_id,$password_ancien,$password_nouveau)
{
	// Tester si l'ancien mot de passe correspond à celui enregistré
	$password_ancien_crypte = crypter_mdp($password_ancien);
	$DB_SQL = 'SELECT user_id FROM sacoche_user ';
	$DB_SQL.= 'WHERE user_id=:user_id AND user_password=:password_crypte ';
	$DB_SQL.= 'LIMIT 1';
	$DB_VAR = array(':user_id'=>$user_id,':password_crypte'=>$password_ancien_crypte);
	$DB_ROW = DB::queryRow(SACOCHE_STRUCTURE_BD_NAME , $DB_SQL , $DB_VAR);
	if(!count($DB_ROW))
	{
		return 'Le mot de passe actuel est incorrect !';
	}
	// Remplacer par le nouveau mot de passe
	$password_nouveau_crypte = crypter_mdp($password_nouveau);
	$DB_SQL = 'UPDATE sacoche_user ';
	$DB_SQL.= 'SET user_password=:password_crypte ';
	$DB_SQL.= 'WHERE user_id=:user_id ';
	$DB_SQL.= 'LIMIT 1';
	$DB_VAR = array(':user_id'=>$user_id,':password_crypte'=>$password_nouveau_crypte);
	DB::query(SACOCHE_STRUCTURE_BD_NAME , $DB_SQL , $DB_VAR);
	return 'ok';
}
コード例 #2
0
ファイル: class.Webmestre.php プロジェクト: Qwaseur/SACoche
 /**
  * Enregistrer le (nouveau) mot de passe du webmestre.
  * 
  * @param string $password_ancien
  * @param string $password_nouveau
  * @return string   'ok' | 'Le mot de passe actuel est incorrect !'
  */
 public static function modifier_mdp_webmestre($password_ancien, $password_nouveau)
 {
     // Tester si l'ancien mot de passe correspond à celui enregistré
     $password_ancien_crypte = crypter_mdp($password_ancien);
     if ($password_ancien_crypte != WEBMESTRE_PASSWORD_MD5) {
         return 'Le mot de passe actuel est incorrect !';
     }
     // Remplacer par le nouveau mot de passe
     $password_nouveau_crypte = crypter_mdp($password_nouveau);
     FileSystem::fabriquer_fichier_hebergeur_info(array('WEBMESTRE_PASSWORD_MD5' => $password_nouveau_crypte));
     return 'ok';
 }
コード例 #3
0
 }
 // Vérifier le domaine du serveur mail seulement en mode multi-structures car ce peut être sinon une installation sur un serveur local non ouvert sur l'extérieur.
 if ($courriel) {
     if (HEBERGEUR_INSTALLATION == 'multi-structures') {
         list($mail_domaine, $is_domaine_valide) = tester_domaine_courriel_valide($courriel);
         if (!$is_domaine_valide) {
             exit('Erreur avec le domaine "' . $mail_domaine . '" !');
         }
     }
     $tab_donnees[':email_origine'] = 'admin';
 } else {
     $tab_donnees[':email_origine'] = '';
 }
 // Cas du mot de passe
 if (!$box_password) {
     $tab_donnees[':password'] = crypter_mdp($password);
 }
 // Cas de la date de sortie
 if ($box_date) {
     $sortie_date = '-';
     $sortie_date_mysql = SORTIE_DEFAUT_MYSQL;
 } else {
     $sortie_date_mysql = convert_date_french_to_mysql($sortie_date);
 }
 // Mettre à jour l'enregistrement
 $tab_donnees += array(':sconet_id' => $sconet_id, ':reference' => $reference, ':profil_sigle' => $profil, ':genre' => $genre, ':nom' => $nom, ':prenom' => $prenom, ':courriel' => $courriel, ':id_ent' => $id_ent, ':id_gepi' => $id_gepi, ':sortie_date' => $sortie_date_mysql);
 DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_user($id, $tab_donnees);
 // Afficher le retour
 $checked = $check ? ' checked' : '';
 echo '<td class="nu"><input type="checkbox" name="f_ids" value="' . $id . '"' . $checked . ' /></td>';
 echo '<td class="label">' . html($id_ent) . '</td>';
コード例 #4
0
    if (!$result) {
        exit_error($TITRE, 'Le code transmis est invalide ou périmé (base inexistante).');
    }
}
// Récupération des données de l'utilisateur
$DB_ROW = DB_STRUCTURE_PUBLIC::DB_recuperer_user_for_new_mdp('user_pass_key', $user_pass_key);
if (empty($DB_ROW)) {
    exit_error($TITRE, 'Le code transmis est invalide ou périmé (absence de correspondance).');
}
if (crypter_mdp($DB_ROW['user_id'] . $DB_ROW['user_email'] . $DB_ROW['user_password'] . $DB_ROW['user_connexion_date']) != $user_pass_key) {
    exit_error($TITRE, 'Le code transmis est périmé (incompatible avec les données actuelles).');
}
// Prendre en compte la demande de changement de mdp
$newpass = fabriquer_mdp();
// On ne transmet pas de profil car necessite sinon une variable de session non définie à ce stade.
DB_STRUCTURE_PUBLIC::DB_modifier_user_password_or_key($DB_ROW['user_id'], crypter_mdp($newpass), '');
// Affichage du résultat (confirmation + identifiants)
?>
<p><label class="valide">Nouveau mot de passe généré avec succès !</label></p>
<p>Veuillez noter vos identifiants de connexion :</p>
<form>
  <label class="tab">Nom d'utilisateur :</label><b><?php 
echo html($DB_ROW['user_login']);
?>
</b><br />
  <label class="tab">Mot de passe :</label><b><?php 
echo $newpass;
?>
</b>
</form>
<p><span class="astuce">Le code transmis étant à usage unique, il ne peut pas être utilisé de nouveau.</span></p>
コード例 #5
0
 }
 // On récupère les données de l'utilisateur
 $DB_ROW = DB_STRUCTURE_PUBLIC::DB_recuperer_user_for_new_mdp('user_id', $user_id);
 if (empty($DB_ROW)) {
     $_SESSION['FORCEBRUTE'][$PAGE]['DELAI']++;
     $_SESSION['FORCEBRUTE'][$PAGE]['TIME'] = $_SERVER['REQUEST_TIME'];
     exit_json(FALSE, 'Utilisateur inconnu ! Nouvelle tentative autorisée dans ' . $_SESSION['FORCEBRUTE'][$PAGE]['DELAI'] . 's.');
 }
 // On vérifie que l'adresse mail concorde
 if ($DB_ROW['user_email'] != $courriel) {
     $_SESSION['FORCEBRUTE'][$PAGE]['DELAI']++;
     $_SESSION['FORCEBRUTE'][$PAGE]['TIME'] = $_SERVER['REQUEST_TIME'];
     exit_json(FALSE, 'Adresse mail non concordante ! Nouvelle tentative autorisée dans ' . $_SESSION['FORCEBRUTE'][$PAGE]['DELAI'] . 's.');
 }
 // On enregistre un ticket pour cette demande
 $user_pass_key = crypter_mdp($DB_ROW['user_id'] . $DB_ROW['user_email'] . $DB_ROW['user_password'] . $DB_ROW['user_connexion_date']);
 $code_mdp = $BASE ? $user_pass_key . 'g' . $BASE : $user_pass_key;
 DB_STRUCTURE_PUBLIC::DB_modifier_user_password_or_key($DB_ROW['user_id'], '', $user_pass_key);
 // On envoi le courriel à l'utilisateur
 $mail_contenu = 'Bonjour,' . "\r\n";
 $mail_contenu .= "\r\n";
 $mail_contenu .= 'Une demande de nouveaux identifiants a été formulée pour le compte SACoche de ' . $DB_ROW['user_prenom'] . ' ' . $DB_ROW['user_nom'] . '.' . "\r\n";
 $mail_contenu .= "\r\n";
 $mail_contenu .= 'Pour confirmer la génération d\'un nouveau mot de passe, veuillez cliquer sur ce lien :' . "\r\n";
 $mail_contenu .= URL_DIR_SACOCHE . '?code_mdp=' . $code_mdp . "\r\n";
 $mail_contenu .= Sesamail::texte_pied_courriel(array('excuses_derangement', 'info_connexion', 'no_reply', 'signature'), $DB_ROW['user_email']);
 $courriel_bilan = Sesamail::mail($DB_ROW['user_email'], 'Demande de nouveaux identifiants', $mail_contenu, $DB_ROW['user_email']);
 if (!$courriel_bilan) {
     exit_json(FALSE, 'Erreur lors de l\'envoi du courriel !');
 }
 // OK !
コード例 #6
0
             if (in_array($tab_users_fichier['login'][$i_fichier], $tab_users_base['login'])) {
                 // Contenu du fichier à problème : login déjà pris
                 $lignes_pb .= '<tr><td>' . html($tab_users_fichier['nom'][$i_fichier] . ' ' . $tab_users_fichier['prenom'][$i_fichier]) . '</td><td colspan="2">nom d\'utilisateur proposé déjà affecté à un autre utilisateur</td></tr>' . NL;
             } elseif ($tab_users_fichier['mdp'][$i_fichier] == '' || crypter_mdp($tab_users_fichier['mdp'][$i_fichier]) == $tab_users_base['mdp'][$id_base]) {
                 // Contenu du fichier à modifier : logins différents et mdp identiques on non imposé
                 $login = $tab_users_fichier['login'][$i_fichier];
                 DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_user($id_base, array(':login' => $login));
                 $lignes_mod .= '<tr class="new"><td>' . html($tab_users_fichier['nom'][$i_fichier] . ' ' . $tab_users_fichier['prenom'][$i_fichier] . ' (' . $tab_users_base['info'][$id_base] . ')') . '</td><td class="b">Utilisateur : ' . html($login) . '</td><td class="i">Mot de passe : inchangé</td></tr>' . NL;
                 $fcontenu_pdf_tab[] = $tab_users_base['info'][$id_base] . "\r\n" . $tab_users_base['nom'][$id_base] . ' ' . $tab_users_base['prenom'][$id_base] . "\r\n" . 'Utilisateur : ' . $login . "\r\n" . 'Mot de passe : inchangé';
                 $tab_users_base['login'][$id_base] = $login;
                 // Prendre en compte cette modif de login dans les comparaisons futures
             } else {
                 // Contenu du fichier à modifier : logins différents et mdp différents
                 $login = $tab_users_fichier['login'][$i_fichier];
                 $password = $tab_users_fichier['mdp'][$i_fichier];
                 DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_user($id_base, array(':login' => $login, ':password' => crypter_mdp($password)));
                 $lignes_mod .= '<tr class="new"><td>' . html($tab_users_fichier['nom'][$i_fichier] . ' ' . $tab_users_fichier['prenom'][$i_fichier] . ' (' . $tab_users_base['info'][$id_base] . ')') . '</td><td class="b">Utilisateur : ' . html($login) . '</td><td class="b">Mot de passe : ' . html($password) . '</td></tr>' . NL;
                 $fcontenu_pdf_tab[] = $tab_users_base['info'][$id_base] . "\r\n" . $tab_users_base['nom'][$id_base] . ' ' . $tab_users_base['prenom'][$id_base] . "\r\n" . 'Utilisateur : ' . $login . "\r\n" . 'Mot de passe : ' . $password;
                 $tab_users_base['login'][$id_base] = $login;
                 // Prendre en compte cette modif de login dans les comparaisons futures
             }
         }
     }
 }
 // On archive les nouveaux identifiants dans un fichier pdf (classe fpdf + script étiquettes)
 echo '<ul class="puce">' . NL;
 if (count($fcontenu_pdf_tab)) {
     $fnom = 'identifiants_' . $_SESSION['BASE'] . '_' . fabriquer_fin_nom_fichier__date_et_alea();
     $pdf = new PDF_Label(array('paper-size' => 'A4', 'metric' => 'mm', 'marginLeft' => 5, 'marginTop' => 5, 'NX' => 3, 'NY' => 8, 'SpaceX' => 7, 'SpaceY' => 5, 'width' => 60, 'height' => 30, 'font-size' => 11));
     $pdf->AddFont('Arial', '', 'arial.php');
     $pdf->SetFont('Arial');
コード例 #7
0
 $denomination     = $DB_ROW['structure_denomination'];
 $contact_nom      = $DB_ROW['structure_contact_nom'];
 $contact_prenom   = $DB_ROW['structure_contact_prenom'];
 $contact_courriel = $DB_ROW['structure_contact_courriel'];
 // Informations sur l'admin : nom / prénom / login.
 $DB_ROW = DB_STRUCTURE_WEBMESTRE::DB_recuperer_admin_identite($admin_id);
 if(empty($DB_ROW))
 {
   exit('Erreur : administrateur introuvable !');
 }
 $admin_nom    = $DB_ROW['user_nom'];
 $admin_prenom = $DB_ROW['user_prenom'];
 $admin_login  = $DB_ROW['user_login'];
 // Générer un nouveau mdp de l'admin
 $admin_password = fabriquer_mdp();
 DB_STRUCTURE_WEBMESTRE::DB_modifier_admin_mdp($admin_id,crypter_mdp($admin_password));
 // Envoyer un courriel au contact et éventuellement une copie du courriel au webmestre
 $courriel_contenu = Webmestre::contenu_courriel_nouveau_mdp( $base_id , $denomination , $contact_nom , $contact_prenom , $admin_nom , $admin_prenom , $admin_login , $admin_password , URL_DIR_SACOCHE );
 $courriel_titre   = 'Modification mdp administrateur - Inscription n°'.$base_id;
 $courriel_bilan = Sesamail::mail( $contact_courriel , $courriel_titre , $courriel_contenu );
 if(!$courriel_bilan)
 {
   exit('Erreur lors de l\'envoi du courriel !');
 }
 if($courriel_copie)
 {
   $introduction = '================================================================================'."\r\n".'Copie pour information du courriel adressé à '.$contact_courriel."\r\n".'================================================================================'."\r\n\r\n";
   $courriel_bilan = Sesamail::mail( WEBMESTRE_COURRIEL , $courriel_titre , $introduction.$courriel_contenu );
   if(!$courriel_bilan)
   {
     exit('Erreur lors de l\'envoi du courriel !');
コード例 #8
0
  echo  '<q class="initialiser_mdp" title="Générer un nouveau mdp pour ce partenaire."></q>';
  echo  '<q class="supprimer" title="Retirer ce partenaire."></q>';
  echo'</td>';
  exit();
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Générer un nouveau mdp d'un partenaire conventionné et lui envoyer par courriel
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if( ($action=='initialiser_mdp') && $partenaire_id && $denomination && $nom && $prenom && $courriel )
{
  // Générer un nouveau mdp
  $password = fabriquer_mdp();
  // Mettre à jour l'enregistrement
  DB_WEBMESTRE_WEBMESTRE::DB_modifier_partenaire_conventionne_mdp($partenaire_id,crypter_mdp($password));
  // Envoyer un courriel
  $courriel_contenu = Webmestre::contenu_courriel_partenaire_nouveau_mdp( $denomination , $nom , $prenom , $password , URL_DIR_SACOCHE );
  $courriel_bilan = Sesamail::mail( $courriel , 'Modification mdp compte partenaire ENT' , $courriel_contenu );
  if(!$courriel_bilan)
  {
    exit('Erreur lors de l\'envoi du courriel !');
  }
  // On affiche le retour
  echo'<ok>';
  echo'Le mot de passe de<BR />'.html($prenom.' '.$nom).',<BR />partenaire conventionné<BR />"'.html($denomination).'",<BR />vient d\'être réinitialisé.<BR /><BR />';
  echo'Les nouveaux identifiants<BR />ont été envoyés<BR />à son adresse de courriel<BR />'.html($courriel).'.';
  exit();
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
コード例 #9
0
 * sans même la garantie implicite de COMMERCIALISABILITÉ ni d’ADÉQUATION À UN OBJECTIF PARTICULIER.
 * Consultez la Licence Publique Générale GNU Affero pour plus de détails.
 * 
 * Vous devriez avoir reçu une copie de la Licence Publique Générale GNU Affero avec SACoche ;
 * si ce n’est pas le cas, consultez : <http://www.gnu.org/licenses/>.
 * 
 */
if (!defined('SACoche')) {
    exit('Ce fichier ne peut être appelé directement !');
}
if ($_SESSION['SESAMATH_ID'] == ID_DEMO) {
    exit('Action désactivée pour la démo...');
}
$password_ancien = isset($_POST['f_password0']) ? Clean::password($_POST['f_password0']) : '';
$password_nouveau = isset($_POST['f_password1']) ? Clean::password($_POST['f_password1']) : '';
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Mettre à jour son mdp
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($password_ancien != '' && $password_nouveau != '') {
    if ($_SESSION['USER_PROFIL_TYPE'] == 'webmestre') {
        exit(Webmestre::modifier_mdp_webmestre($password_ancien, $password_nouveau));
    } elseif ($_SESSION['USER_PROFIL_TYPE'] == 'partenaire') {
        exit(DB_WEBMESTRE_PARTENAIRE::DB_modifier_mdp_partenaire($_SESSION['USER_ID'], crypter_mdp($password_ancien), crypter_mdp($password_nouveau)));
    } else {
        exit(DB_STRUCTURE_COMMUN::DB_modifier_mdp_utilisateur($_SESSION['USER_ID'], crypter_mdp($password_ancien), crypter_mdp($password_nouveau)));
    }
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// On ne devrait pas en arriver là !
// ////////////////////////////////////////////////////////////////////////////////////////////////////
exit('Erreur avec les données transmises !');
コード例 #10
0
 DB_STRUCTURE_COMMUN::DB_creer_remplir_tables_structure();
 // Il est arrivé que la fonction DB_modifier_parametres() retourne une erreur disant que la table n'existe pas.
 // Comme si les requêtes de DB_creer_remplir_tables_structure() étaient en cache, et pas encore toutes passées (parcequ'au final, quand on va voir la base, toutes les tables sont bien là).
 // Est-ce que c'est possible au vu du fonctionnement de la classe de connexion ? Et, bien sûr, y a-t-il quelque chose à faire pour éviter ce problème ?
 // En attendant une réponse de SebR, j'ai mis ce sleep(1)... sans trop savoir si cela pouvait aider...
 @sleep(1);
 // Personnaliser certains paramètres de la structure
 $tab_parametres = array();
 $tab_parametres['version_base']               = VERSION_BASE_STRUCTURE;
 $tab_parametres['webmestre_uai']              = $uai;
 $tab_parametres['webmestre_denomination']     = $denomination;
 $tab_parametres['etablissement_denomination'] = $denomination;
 DB_STRUCTURE_COMMUN::DB_modifier_parametres($tab_parametres);
 // Insérer le compte administrateur dans la base de cette structure
 $password = fabriquer_mdp();
 $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur( 0 /*user_sconet_id*/ , 0 /*user_sconet_elenoet*/ , '' /*reference*/ , 'ADM' , 'I' /*user_genre*/ , $contact_nom , $contact_prenom , NULL /*user_naissance_date*/ , $contact_courriel , 'user' /*user_email_origine*/ , 'admin' /*login*/ , crypter_mdp($password) , 0 /*classe_id*/ , '' /*id_ent*/ , '' /*id_gepi*/ );
 // Pour les admins, abonnement obligatoire aux contacts effectués depuis la page d'authentification
 DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement( $user_id , 'contact_externe' , 'accueil' );
 // Envoyer un courriel au contact et / ou une copie du courriel au webmestre
 $courriel_contenu = ( $courriel_envoi || $courriel_copie ) ? Webmestre::contenu_courriel_inscription( $base_id , $denomination , $contact_nom , $contact_prenom , 'admin' , $password , URL_DIR_SACOCHE ) : '' ;
 $courriel_titre   = ( $courriel_envoi || $courriel_copie ) ? 'Création compte - Inscription n°'.$base_id : '' ;
 if($courriel_envoi)
 {
   $courriel_bilan = Sesamail::mail( $contact_courriel , $courriel_titre , $courriel_contenu );
   if(!$courriel_bilan)
   {
     exit('Erreur lors de l\'envoi du courriel !');
   }
 }
 if($courriel_copie)
 {
コード例 #11
0
   DB_STRUCTURE_COMMUN::DB_creer_remplir_tables_structure();
   // Il est arrivé que la fonction DB_modifier_parametres() retourne une erreur disant que la table n'existe pas.
   // Comme si les requêtes de DB_creer_remplir_tables_structure() étaient en cache, et pas encore toutes passées (parcequ'au final, quand on va voir la base, toutes les tables sont bien là).
   // Est-ce que c'est possible au vu du fonctionnement de la classe de connexion ? Et, bien sûr, y a-t-il quelque chose à faire pour éviter ce problème ?
   // En attendant une réponse de SebR, j'ai mis ce sleep(1)... sans trop savoir si cela pouvait aider...
   @sleep(1);
   // Personnaliser certains paramètres de la structure
   $tab_parametres = array();
   $tab_parametres['version_base']               = VERSION_BASE_STRUCTURE;
   $tab_parametres['webmestre_uai']              = HEBERGEUR_UAI;
   $tab_parametres['webmestre_denomination']     = HEBERGEUR_DENOMINATION;
   $tab_parametres['etablissement_denomination'] = HEBERGEUR_DENOMINATION;
   DB_STRUCTURE_COMMUN::DB_modifier_parametres($tab_parametres);
   // Insérer un compte administrateur dans la base de la structure
   $password = fabriquer_mdp();
   $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur( 0 /*user_sconet_id*/ , 0 /*user_sconet_elenoet*/ , '' /*reference*/ , 'ADM' , 'I' /*user_genre*/ , WEBMESTRE_NOM , WEBMESTRE_PRENOM , NULL /*user_naissance_date*/ , WEBMESTRE_COURRIEL , 'user' /*user_email_origine*/ , 'admin' /*login*/ , crypter_mdp($password) , 0 /*classe_id*/ , '' /*id_ent*/ , '' /*id_gepi*/ );
   // Pour les admins, abonnement obligatoire aux contacts effectués depuis la page d'authentification
   DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement( $user_id , 'contact_externe' , 'accueil' );
   // Affichage du retour
   $affichage .= '<p><label class="valide">Les tables de la base de données ont été installées.</label></p>'.NL;
   $affichage .= '<span class="astuce">Le premier compte administrateur a été créé avec votre identité :</span>'.NL;
   $affichage .= '<ul class="puce">';
   $affichage .= '<li>nom d\'utilisateur " admin "</li>';
   $affichage .= '<li>mot de passe " '.$password.' "</li>';
   $affichage .= '</ul>'.NL;
   $affichage .= '<label class="alerte">Notez ces identifiants avant de poursuivre !</label>'.NL;
   $affichage .= '<hr />'.NL;
   $affichage .= '<h2>Installation logicielle terminée</h2>'.NL;
   $affichage .= '<p>Se connecter avec le compte webmestre : <a href="'.URL_DIR_SACOCHE.'?webmestre">'.URL_DIR_SACOCHE.'?webmestre</a></p>'.NL;
   $affichage .= '<p>Se connecter avec le compte administrateur : <a href="'.URL_DIR_SACOCHE.'">'.URL_INSTALL_SACOCHE.'</a></p>'.NL;
 }
コード例 #12
0
     $login = fabriquer_login($tab_memo_analyse['ajouter'][$i_fichier]['prenom'], $tab_memo_analyse['ajouter'][$i_fichier]['nom'], $tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle']);
     // Puis tester le login (parmi tout le personnel de l'établissement)
     if (DB_STRUCTURE_ADMINISTRATEUR::DB_tester_utilisateur_identifiant('login', $login)) {
         // Login pris : en chercher un autre en remplaçant la fin par des chiffres si besoin
         $login = DB_STRUCTURE_ADMINISTRATEUR::DB_rechercher_login_disponible($login);
     }
     // Construire le password
     if ($import_profil != 'eleve' || !$_SESSION['TAB_PROFILS_ADMIN']['MDP_LONGUEUR_MINI']['ELV'] || empty($tab_memo_analyse['ajouter'][$i_fichier]['birth_date'])) {
         $password = fabriquer_mdp($tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle']);
     } else {
         $password = str_replace('/', '', $tab_memo_analyse['ajouter'][$i_fichier]['birth_date']);
     }
     // Attention à la date de naissance, définie seulement pour les élèves
     $birth_date = empty($tab_memo_analyse['ajouter'][$i_fichier]['birth_date']) ? NULL : convert_date_french_to_mysql($tab_memo_analyse['ajouter'][$i_fichier]['birth_date']);
     // Ajouter l'utilisateur
     $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur($tab_memo_analyse['ajouter'][$i_fichier]['sconet_id'], $tab_memo_analyse['ajouter'][$i_fichier]['sconet_num'], $tab_memo_analyse['ajouter'][$i_fichier]['reference'], $tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle'], $tab_memo_analyse['ajouter'][$i_fichier]['genre'], $tab_memo_analyse['ajouter'][$i_fichier]['nom'], $tab_memo_analyse['ajouter'][$i_fichier]['prenom'], $birth_date, $tab_memo_analyse['ajouter'][$i_fichier]['courriel'], $tab_memo_analyse['ajouter'][$i_fichier]['email_origine'], $login, crypter_mdp($password), $tab_memo_analyse['ajouter'][$i_fichier]['classe']);
     if ($import_profil == 'professeur') {
         // Pour les professeurs et directeurs, abonnement obligatoire aux signalements d'un souci pour une appréciation d'un bilan officiel
         DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement($user_id, 'bilan_officiel_appreciation', 'accueil');
     }
     $tab_i_fichier_TO_id_base[$i_fichier] = (int) $user_id;
     $nb_add++;
     $tab_password[$user_id] = $password;
     $classe_ou_profil = $import_profil == 'eleve' ? $tab_nom_classe[$tab_memo_analyse['ajouter'][$i_fichier]['classe']] : $tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle'];
     $fcontenu_csv .= '"' . $tab_memo_analyse['ajouter'][$i_fichier]['sconet_id'] . '"' . $separateur . '"' . $tab_memo_analyse['ajouter'][$i_fichier]['sconet_num'] . '"' . $separateur . '"' . $tab_memo_analyse['ajouter'][$i_fichier]['reference'] . '"' . $separateur . $classe_ou_profil . $separateur . $tab_memo_analyse['ajouter'][$i_fichier]['nom'] . $separateur . $tab_memo_analyse['ajouter'][$i_fichier]['prenom'] . $separateur . $login . $separateur . '"' . $password . '"' . "\r\n";
     $ligne1 = $classe_ou_profil;
     $ligne2 = $tab_memo_analyse['ajouter'][$i_fichier]['nom'] . ' ' . $tab_memo_analyse['ajouter'][$i_fichier]['prenom'];
     $ligne3 = 'Utilisateur : ' . $login;
     $ligne4 = 'Mot de passe : ' . $password;
     $fcontenu_pdf_tab[] = $ligne1 . "\r\n" . $ligne2 . "\r\n" . $ligne3 . "\r\n" . $ligne4;
 }
コード例 #13
0
ファイル: class.SessionUser.php プロジェクト: rhertzog/lcs
 /**
  * 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 );
 }
コード例 #14
0
     DB_STRUCTURE_COMMUN::DB_creer_remplir_tables_structure();
     // Il est arrivé que la fonction DB_modifier_parametres() retourne une erreur disant que la table n'existe pas.
     // Comme si les requêtes de DB_creer_remplir_tables_structure() étaient en cache, et pas encore toutes passées (parcequ'au final, quand on va voir la base, toutes les tables sont bien là).
     // Est-ce que c'est possible au vu du fonctionnement de la classe de connexion ? Et, bien sûr, y a-t-il quelque chose à faire pour éviter ce problème ?
     // En attendant une réponse de SebR, j'ai mis ce sleep(1)... sans trop savoir si cela pouvait aider...
     @sleep(1);
     // Personnaliser certains paramètres de la structure
     $tab_parametres = array();
     $tab_parametres['version_base'] = VERSION_BASE_STRUCTURE;
     $tab_parametres['webmestre_uai'] = HEBERGEUR_UAI;
     $tab_parametres['webmestre_denomination'] = HEBERGEUR_DENOMINATION;
     $tab_parametres['etablissement_denomination'] = HEBERGEUR_DENOMINATION;
     DB_STRUCTURE_COMMUN::DB_modifier_parametres($tab_parametres);
     // Insérer un compte administrateur dans la base de la structure
     $password = fabriquer_mdp();
     $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur(0, 0, '', 'ADM', 'I', WEBMESTRE_NOM, WEBMESTRE_PRENOM, NULL, WEBMESTRE_COURRIEL, 'user', 'admin', crypter_mdp($password), 0, '', '');
     // Pour les admins, abonnement obligatoire aux contacts effectués depuis la page d'authentification
     DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement($user_id, 'contact_externe', 'accueil');
     // Affichage du retour
     $affichage .= '<p><label class="valide">Les tables de la base de données ont été installées.</label></p>' . NL;
     $affichage .= '<span class="astuce">Le premier compte administrateur a été créé avec votre identité :</span>' . NL;
     $affichage .= '<ul class="puce">';
     $affichage .= '<li>nom d\'utilisateur " admin "</li>';
     $affichage .= '<li>mot de passe " ' . $password . ' "</li>';
     $affichage .= '</ul>' . NL;
     $affichage .= '<label class="alerte">Notez ces identifiants avant de poursuivre !</label>' . NL;
     $affichage .= '<hr />' . NL;
     $affichage .= '<h2>Installation logicielle terminée</h2>' . NL;
     $affichage .= '<p>Se connecter avec le compte webmestre : <a href="' . URL_DIR_SACOCHE . '?webmestre">' . URL_DIR_SACOCHE . '?webmestre</a></p>' . NL;
     $affichage .= '<p>Se connecter avec le compte administrateur : <a href="' . URL_DIR_SACOCHE . '">' . URL_INSTALL_SACOCHE . '</a></p>' . NL;
 } elseif (HEBERGEUR_INSTALLATION == 'multi-structures') {
コード例 #15
0
 DB_STRUCTURE_COMMUN::DB_creer_remplir_tables_structure();
 // Il est arrivé que la fonction DB_modifier_parametres() retourne une erreur disant que la table n'existe pas.
 // Comme si les requêtes de DB_creer_remplir_tables_structure() étaient en cache, et pas encore toutes passées (parcequ'au final, quand on va voir la base, toutes les tables sont bien là).
 // Est-ce que c'est possible au vu du fonctionnement de la classe de connexion ? Et, bien sûr, y a-t-il quelque chose à faire pour éviter ce problème ?
 // En attendant une réponse de SebR, j'ai mis ce sleep(1)... sans trop savoir si cela pouvait aider...
 @sleep(1);
 // Personnaliser certains paramètres de la structure
 $tab_parametres = array();
 $tab_parametres['version_base'] = VERSION_BASE_STRUCTURE;
 $tab_parametres['webmestre_uai'] = $uai;
 $tab_parametres['webmestre_denomination'] = $denomination;
 $tab_parametres['etablissement_denomination'] = $denomination;
 DB_STRUCTURE_COMMUN::DB_modifier_parametres($tab_parametres);
 // Insérer le compte administrateur dans la base de cette structure
 $password = fabriquer_mdp();
 $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur(0, 0, '', 'ADM', 'I', $contact_nom, $contact_prenom, NULL, $contact_courriel, 'user', 'admin', crypter_mdp($password), 0, '', '');
 // Pour les admins, abonnement obligatoire aux contacts effectués depuis la page d'authentification
 DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement($user_id, 'contact_externe', 'accueil');
 // Envoyer un courriel au contact et / ou une copie du courriel au webmestre
 $courriel_contenu = $courriel_envoi || $courriel_copie ? Webmestre::contenu_courriel_inscription($base_id, $denomination, $contact_nom, $contact_prenom, 'admin', $password, URL_DIR_SACOCHE) : '';
 $courriel_titre = $courriel_envoi || $courriel_copie ? 'Création compte - Inscription n°' . $base_id : '';
 if ($courriel_envoi) {
     $courriel_bilan = Sesamail::mail($contact_courriel, $courriel_titre, $courriel_contenu);
     if (!$courriel_bilan) {
         exit('Erreur lors de l\'envoi du courriel !');
     }
 }
 if ($courriel_copie) {
     $introduction = '================================================================================' . "\r\n" . 'Copie pour information du courriel adressé à ' . $contact_courriel . "\r\n" . '================================================================================' . "\r\n\r\n";
     $courriel_bilan = Sesamail::mail(WEBMESTRE_COURRIEL, $courriel_titre, $introduction . $courriel_contenu);
     if (!$courriel_bilan) {
コード例 #16
0
 // Attention à la date de naissance, définie seulement pour les élèves
 $birth_date = empty($tab_memo_analyse['ajouter'][$i_fichier]['birth_date']) ? NULL : convert_date_french_to_mysql($tab_memo_analyse['ajouter'][$i_fichier]['birth_date']) ;
 // Ajouter l'utilisateur
 $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur(
   $tab_memo_analyse['ajouter'][$i_fichier]['sconet_id'],
   $tab_memo_analyse['ajouter'][$i_fichier]['sconet_num'],
   $tab_memo_analyse['ajouter'][$i_fichier]['reference'],
   $tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle'],
   $tab_memo_analyse['ajouter'][$i_fichier]['genre'],
   $tab_memo_analyse['ajouter'][$i_fichier]['nom'],
   $tab_memo_analyse['ajouter'][$i_fichier]['prenom'],
   $birth_date,
   $tab_memo_analyse['ajouter'][$i_fichier]['courriel'],
   $tab_memo_analyse['ajouter'][$i_fichier]['email_origine'],
   $login,
   crypter_mdp($password),
   $tab_memo_analyse['ajouter'][$i_fichier]['classe']
 );
 if($import_profil=='professeur')
 {
   // Pour les professeurs et directeurs, abonnement obligatoire aux signalements d'un souci pour une appréciation d'un bilan officiel
   DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement( $user_id , 'bilan_officiel_appreciation' , 'accueil' );
 }
 $tab_i_fichier_TO_id_base[$i_fichier] = (int) $user_id;
 $nb_add++;
 $tab_password[$user_id] = $password;
 $classe_ou_profil = ($import_profil=='eleve') ? $tab_nom_classe[$tab_memo_analyse['ajouter'][$i_fichier]['classe']] : $tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle'] ;
 $fcontenu_csv .= '"'.$tab_memo_analyse['ajouter'][$i_fichier]['sconet_id'].'"'.$separateur.'"'.$tab_memo_analyse['ajouter'][$i_fichier]['sconet_num'].'"'.$separateur.'"'.$tab_memo_analyse['ajouter'][$i_fichier]['reference'].'"'.$separateur.$classe_ou_profil.$separateur.$tab_memo_analyse['ajouter'][$i_fichier]['nom'].$separateur.$tab_memo_analyse['ajouter'][$i_fichier]['prenom'].$separateur.$login.$separateur.'"'.$password.'"'."\r\n";
 $ligne1 = $classe_ou_profil;
 $ligne2 = $tab_memo_analyse['ajouter'][$i_fichier]['nom'].' '.$tab_memo_analyse['ajouter'][$i_fichier]['prenom'];
 $ligne3 = 'Utilisateur : '.$login;