コード例 #1
0
ファイル: options_connect.php プロジェクト: alhousseyni/gepi
echo "<p><span style='color: red'><strong>Attention !</strong></span> Ne modifiez ces paramètres que si vous savez vraiment ce que vous faites ! Si vous activez l'authentification SSO et que vous ne pouvez plus vous connecter à Gepi en administrateur, vous pouvez utiliser la variable \$block_sso dans le fichier /lib/global.inc pour désactiver le SSO et rebasculer en authentification locale. Il est donc vivement recommandé de créer un compte administrateur local (<em>dont le login n'interfèrera pas avec un login SSO</em>) avant d'activer le SSO.</p>\n";
echo "<p>Gepi permet d'utiliser plusieurs modes d'authentification en parallèle. Les combinaisons les plus courantes seront une authentification locale avec une authentification LDAP, ou bien une authentification locale et une authentification unique (<em>utilisant un serveur d'authentification distinct</em>).</p>\n";
echo "<p>Le mode d'authentification est explicitement spécifié pour chaque utilisateur dans la base de données de Gepi. Assurez-vous que le mode défini correspond effectivement au mode utilisé par l'utilisateur.</p>\n";
echo "<p>Dans le cas d'une authentification externe (<em>LDAP ou SSO</em>), aucun mot de passe n'est stocké dans la base de données de Gepi.</p>\n";
echo "<p>Si vous paramétrez un accès LDAP en écriture, les mots de passe des utilisateurs pourront être modifiés directement à travers Gepi, même pour les modes LDAP et SSO. L'administrateur pourra également éditer les données de base de l'utilisateur (<em>nom, prénom, email</em>). Lorsque vous activez l'accès LDAP en écriture, assurez-vous que le paramétrage sur le serveur LDAP permet à l'utilisateur de connexion LDAP de modifier les champs login, mot de passe, nom, prénom et email.</p>\n";
echo "<p>Si vous utilisez CAS, vous devez entrer les informations de configuration du serveur CAS dans le fichier /secure/config_cas.inc.php (<em>un modèle de configuration se trouve dans le fichier /secure/modeles/config_cas-modele.inc.php</em>).</p>\n";
echo "<p>Si vous utilisez l'authentification sur serveur LDAP, ou bien que vous activez l'accès LDAP en écriture, vous devez renseigner le fichier /secure/config_ldap.inc.php avec les informations nécessaires pour se connecter au serveur (<em>un modèle se trouve dans /secure/modeles/config_ldap-modele.inc.php</em>).</p>\n";
echo "<form action=\"options_connect.php\" name=\"form_auth\" method=\"post\">\n\t<fieldset id='mdp_perdus' style='border: 1px solid grey; background-image: url(\"../images/background/opacite50.png\");'>\n\t<legend style='border: 1px solid grey; background-color: white;'>Mode d'authentification</legend>\n";
echo add_token_field();
echo "<p><strong>Modes d'authentification :</strong></p>\n";
echo "<p><input type='checkbox' name='auth_locale' value='yes' id='label_auth_locale'";
if (getSettingValue("auth_locale") == 'yes') {
    echo " checked ";
}
echo " /> <label for='label_auth_locale' style='cursor: pointer;'>Authentification autonome (sur la base de données de Gepi)</label>\n";
$ldap_setup_valid = LDAPServer::is_setup();
echo "<br/><input type='checkbox' name='auth_ldap' value='yes' id='label_auth_ldap'";
if (getSettingValue("auth_ldap") == 'yes' && $ldap_setup_valid) {
    echo " checked ";
}
if (!$ldap_setup_valid) {
    echo " disabled";
}
echo " /> <label for='label_auth_ldap' style='cursor: pointer;'>Authentification LDAP";
if (!$ldap_setup_valid) {
    echo " <em>(sélection impossible : le fichier /secure/config_ldap.inc.php n'est pas présent)</em>\n";
}
echo "</label>\n";
//on va voir si il y a simplesaml de configuré
if (file_exists(dirname(__FILE__) . '/../lib/simplesaml/config/authsources.php')) {
    echo "<br/><input type='checkbox' name='auth_simpleSAML' value='yes' id='label_auth_simpleSAML'";
コード例 #2
0
ファイル: index.php プロジェクト: alhousseyni/gepi
    $titre = "Gestion des données de test";
    $expli = "Permet d'inserer des données de test dans la base. Ne pas utiliser sur une base de production.";
    $ancre = "gestion_base_test";
    $tbs_menu[$nummenu]['entree'][] = array('lien' => $chemin, 'titre' => $titre, 'expli' => $expli, 'ancre' => $ancre);
}
$nummenu = 3;
$tbs_menu[$nummenu] = array('classe' => 'accueil', 'image' => '../images/icons/package.png', 'texte' => "Outils d'initialisation");
$chemin = array();
$titre = array();
$expli = array();
$chemin = "changement_d_annee.php";
$titre = "Changement d'année";
$expli = "Permet d'effectuer les opérations d'archivage de fin d'année et les opérations précédent l'initialisation de la nouvelle année.";
$ancre = "chgt_annee";
$tbs_menu[$nummenu]['entree'][] = array('lien' => $chemin, 'titre' => $titre, 'expli' => $expli, 'ancre' => $ancre);
if (LDAPServer::is_setup()) {
    $chemin = "../init_scribe_ng/index.php";
    $titre = "Initialisation à partir de l'annuaire LDAP du serveur Eole Scribe NG";
    $expli = "Permet d'importer les données " . $gepiSettings['denomination_eleves'] . ", classes, " . $gepiSettings['denomination_professeurs'] . ", matières directement depuis le serveur LDAP de Scribe NG.";
    $ancre = "init_scribe_ng";
    $tbs_menu[$nummenu]['entree'][] = array('lien' => $chemin, 'titre' => $titre, 'expli' => $expli, 'ancre' => $ancre);
}
if (file_exists("../secure/config_lcs.inc.php")) {
    $chemin = "../init_lcs/index.php";
    $titre = "Initialisation à partir de l'annuaire LDAP du serveur LCS";
    $expli = "Permet d'importer les données " . $gepiSettings['denomination_eleves'] . ", classes, " . $gepiSettings['denomination_professeurs'] . ", matières directement depuis le serveur LDAP de LCS.";
    $ancre = "init_lcs";
    $tbs_menu[$nummenu]['entree'][] = array('lien' => $chemin, 'titre' => $titre, 'expli' => $expli, 'ancre' => $ancre);
}
$chemin = "../init_csv/index.php";
$titre = "Initialisation des données à partir de fichiers CSV";
コード例 #3
0
ファイル: Session.class.php プロジェクト: rhertzog/lcs
	private function import_user_profile_from_scribe() {
        global $mysqli;
		# On ne peut arriver ici quand dans le cas où on a une authentification réussie.
		# L'import d'un utilisateur ne peut se faire qu'à partir d'un LDAP de Scribe, ici.
		if (!LDAPServer::is_setup()) {
			return false;
			die();
		} else {
      
      // config_cas.inc.php est le fichier d'informations de connexions au serveur cas
      $path = dirname(__FILE__)."/LDAPServerScribe.class.php";
      include($path);
      
			# Le serveur LDAP est configuré, on y va.
			# Encore un dernier petit test quand même : est-ce que l'utilisateur
			# est bien absent de la base.
			$sql = "SELECT login FROM utilisateurs WHERE (login = '******')"; 
                $resultat = mysqli_query($mysqli, $sql);  
                if ($resultat->num_rows != "0") {
                    $resultat->close();
                    return false;
                    die();                    
                }
                $resultat->close();

			$ldap_server = new LDAPServerScribe;
      
			$user = $ldap_server->get_user_profile($this->login);
			if ($user) {
				# On ne refait pas de tests ou de formattage. La méthode get_user_profile
				# s'occupe de tout.
        
        $errors = false;
        
        // On s'occupe de tous les traitements spécifiques à chaque statut
        
        // Eleve
        if ($user['statut'] == 'eleve') {
          // On a un élève : on vérifie s'il existe dans la table 'eleves',
          // sur la base de son INE, ou nom et prénom.
          $sql_test = "SELECT * FROM eleves
                            WHERE (no_gep = '".$user['raw']['ine'][0]."'
                                OR (nom = '".$user['nom']."' AND prenom = '".$user['prenom']."'))";
                 
                $resultat = mysqli_query($mysqli, $sql);  
                $test = $resultat->num_rows;
                $resultat->close();
          
          if ($test == 0) {
            // L'élève n'existe pas du tout. On va donc le créer.
            $nouvel_eleve = new Eleve();
            $nouvel_eleve->setLogin($this->login);
            $nouvel_eleve->setNom($user['nom']);
            $nouvel_eleve->setPrenom($user['prenom']);
            $nouvel_eleve->setSexe($user['raw']['entpersonsexe'][0]);
            
            $naissance = $user['raw']['entpersondatenaissance'][0];
            if ($naissance != '') {
              $annee = mb_substr($naissance, 0, 4);
              $mois = mb_substr($naissance, 4, 2);
              $jour = mb_substr($naissance, 6, 2);
            } else {
              $annee = '0000';
              $mois = '00';
              $jour = '00';
            }
            
            $nouvel_eleve->setNaissance("$annee-$mois-$jour");
            $nouvel_eleve->setLieuNaissance('');
            $nouvel_eleve->setElenoet($user['raw']['employeenumber'][0] || '');
            $nouvel_eleve->setEreno('');
            $nouvel_eleve->setEleid($user['raw']['intid'][0] || '');
            $nouvel_eleve->setNoGep($user['raw']['ine'][0] || '');
            $nouvel_eleve->setEmail($user['email']);
            
            if (!$nouvel_eleve->save()) $errors = true;
            
            /*
             * Récupération des CLASSES de l'eleve :
             * Pour chaque eleve, on parcours ses classes, et on ne prend que celles
             * qui correspondent à la branche de l'établissement courant, et on les stocke
             */
            $nb_classes = $user['raw']['enteleveclasses']['count'];

            // Pour chaque classe trouvée..
            $eleve_added_to_classe = false;
            for ($cpt=0; $cpt<$nb_classes; $cpt++) {
                if ($eleve_added_to_classe) break;
                $classe_from_ldap = explode("$", $user['raw']['enteleveclasses'][$cpt]);
                // $classe_from_ldap[0] contient le DN de l'établissement
                // $classe_from_ldap[1] contient l'id de la classe
                $code_classe = $classe_from_ldap[1];

                // Si le SIREN de la classe trouvée correspond bien au SIREN de l'établissement courant,
                // on crée une entrée correspondante dans le tableau des classes disponibles
                // Sinon c'est une classe d'un autre établissement, on ne doit donc pas en tenir compte
                if (strcmp($classe_from_ldap[0], $ldap_server->get_base_branch()) == 0) {

                    /*
                     * On test si la classe que l'on souhaite ajouter existe déjà
                     * en la cherchant dans la base (
                     */
                    $classe_courante = ClasseQuery::create()
                          ->filterByClasse($code_classe)
                          ->findOne();

                    if ($classe_courante) {
                      
                      foreach($classe_courante->getPeriodeNotes() as $periode) {
                          // On associe l'élève à la classe
                          $sql_classe = "INSERT INTO j_eleves_classes SET
                              login = '******', 
                              id_classe = '".$classe_courante->getId()."',
                              periode = '".$periode->getNumPeriode()."'";
                                  
                            $res = mysqli_query($mysqli, $sql); 
                            $res->close();
                          
                      } // Fin boucle périodes
                      $eleve_added_to_classe = true;
                    } // Fin test classe
                } //Fin du if classe appartient a l'etablissement courant
            } //Fin du parcours des classes de l'eleve

            
            // On a maintenant un élève en base, qui appartient à sa classe
            // pour toutes les périodes à partir de la période courante
            
            // On ne l'associe pas aux enseignements, car c'est un peu trop
            // risqué et bancal pour être réalisé dynamiquement ici, dans
            // la mesure où l'on n'a pas une information précise sur la
            // composition des groupes.
            
            
          } else {
            // L'élève existe déjà dans la base. On ne créé que l'utilisateur correspondant.
            // Pour ça, on va devoir s'assurer que l'identifiant est identique !
            $sql_login = "******".$user['raw']['ine'][0]."'
                                OR (nom = '".$user['nom']."' AND prenom = '".$user['prenom']."'))";
                    
                $resultat = mysqli_query($mysqli, $sql);
                $res = $resultatè->fetch_object();
                $test_login = $res->login;
                $resultat->close();
            
            
            if ($test_login != $this->login) {
              // Le login est différent, on ne peut rien faire... Il faudrait renommer
              // le login partout dans l'application, mais il n'existe pas de mécanisme
              // pour le faire de manière fiable.
              $errors = true;
            }
          }
          
        } elseif ($user['statut'] == 'responsable') {
          // Si on a un responsable, il faut l'associer à un élève
          
          $resp = new ResponsableEleve();
          $resp->setLogin($this->login);
          $resp->setNom($user['nom']);
          $resp->setPrenom($user['prenom']);
          $resp->setCivilite($user['raw']['personaltitle'][0]);
          $resp->setTelPers($user['raw']['homephone'][0]);
          $resp->setTelProf($user['raw']['telephonenumber'][0]);
          $resp->setTelPort($user['raw']['mobile'][0]);
          $resp->setMel($user['email']);
          $resp->setAdresseId($user['raw']['intid'][0]);
                    
          // On créé l'adresse associée
          
          $adr = new Adresse();
          $adr->setAdresseId($user['raw']['intid'][0]);
          $adr->setAdr1($user['raw']['entpersonadresse'][0]);
          $adr->setAdr2('');
          $adr->setAdr3('');
          $adr->setAdr4('');
          $adr->setCommune($user['raw']['entpersonville'][0]);
          $adr->setCp($user['raw']['entpersoncodepostal'][0]);
          $adr->setPays($user['raw']['entpersonpays'][0]);
          
          $resp->setAdresse($adr);
          
          $resp->save();

          $nb_eleves_a_charge = $user['raw']['entauxpersreleleveeleve']['count'];

          //pour chaque dn d'eleve
          for ($i=0;$i<$nb_eleves_a_charge;$i++) {
              $eleve_uid = explode(",",$user['raw']['entauxpersreleleveeleve'][$i]);
              $eleve_associe_login = mb_substr($eleve_uid[0], 4);
              $eleve_sql = "SELECT ele_id FROM eleves WHERE login = '******'";
                      
                    $eleve_query = mysqli_query($mysqli, $sql);
                    if ($eleve_query->num_rows == 1) {
                        $eleve_associe_obj = $eleve_query->fetch_object();
                        $eleve_associe_ele_id = $eleve_associe_obj->ele_id;
                        // Gepi donne un ordre aux responsables, il faut donc verifier combien de responsables sont deja enregistres pour l'eleve
                        // On initialise le numero de responsable
                        $numero_responsable = 1;
                        $req_nb_resp_deja_presents = "SELECT count(*) FROM responsables2 WHERE ele_id = '$eleve_associe_ele_id'";
                        $res_nb_resp = mysqli_query($mysqli, $req_nb_resp_deja_presents);
                        $nb_resp = $res_nb_resp->fetch_array($res_nb_resp);
                        if ($nb_resp[0] > 0) {
                            // Si deja 1 ou plusieurs responsables legaux pour cet eleve,on ajoute le nouveau responsable en incrementant son numero
                            $numero_responsable += $nb_resp[0];

                            //--
                            // TODO: tester si on a des adresses identiques, et n'utiliser qu'un seul objet adresse dans ce cas.
                            //--
                        }

                        // Ajout de la relation entre Responsable et Eleve dans la table "responsables2" pour chaque eleve
                        $req_ajout_lien_eleve_resp = "INSERT INTO responsables2 VALUES('$eleve_associe_ele_id','".$resp->getResponsableEleveId()."','$numero_responsable','')";
                        $insert_lien = mysqli_query($mysqli, $req_ajout_lien_eleve_resp);
                    }
            }
          
        } elseif ($user['statut'] == 'professeur') {
          // Rien de spécial à ce stade.
          
        } else {
          // Ici : que fait-on si l'on n'a pas un statut directement reconnu
          // et compatible Gepi ?
          // On applique le statut par défaut, configuré par l'admin.
          $user['statut'] = getSettingValue("statut_utilisateur_defaut");
        }
        
        // On créé l'utilisateur, s'il n'y a pas eu d'erreurs.
        if (!$errors) {
            $new_compte_utilisateur = new UtilisateurProfessionnel();
            $new_compte_utilisateur->setAuthMode('sso');
            $new_compte_utilisateur->setCivilite($user['civilite']);
            $new_compte_utilisateur->setEmail($user['email']);
            $new_compte_utilisateur->setEtat('actif');
            $new_compte_utilisateur->setLogin($this->login);
            $new_compte_utilisateur->setNom($user['nom']);
            $new_compte_utilisateur->setPrenom($user['prenom']);
            $new_compte_utilisateur->setShowEmail('no');
            $new_compte_utilisateur->setStatut($user['statut']);
            //$new_compte_utilisateur->save();
			if ($new_compte_utilisateur->save()) {
				return true;
			} else {
				return false;
			}
        }
        
			} else {
				return false;
			}
		}
	}
コード例 #4
0
ファイル: create_eleve.php プロジェクト: rhertzog/lcs
		$nb_comptes = 0;
		while ($current_eleve = mysqli_fetch_object($quels_eleves)) {
			// Création du compte utilisateur pour l'élève considéré
			$reg = true;
			$civilite = '';
			if ($current_eleve->sexe == "M") {
				$civilite = "M.";
			} elseif ($current_eleve->sexe == "F") {
				$civilite = "Mlle";
			}

			// Si on a un accès LDAP en écriture, on créé le compte sur le LDAP
			// On ne procède que si le LDAP est configuré en écriture, qu'on a activé
			// l'auth LDAP ou SSO, et que c'est un de ces deux modes qui a été choisi pour cet utilisateur.
			if (LDAPServer::is_setup() && $gepiSettings["ldap_write_access"] == "yes" && ($session_gepi->auth_ldap || $session_gepi->auth_sso) && ($_POST['reg_auth_mode'] == 'auth_ldap' || $_POST['reg_auth_mode'] == 'auth_sso')) {
				$write_ldap = true;
				$write_ldap_success = false;
				// On tente de créer l'utilisateur sur l'annuaire LDAP
				$ldap_server = new LDAPServer();
				if ($ldap_server->test_user($current_eleve->login)) {
					// L'utilisateur a été trouvé dans l'annuaire. On ne l'enregistre pas.
					$write_ldap_success = true;
					$msg.= "L'utilisateur n'a pas pu être ajouté à l'annuaire LDAP, car il y est déjà présent. Il va néanmoins être créé dans la base Gepi.";
				} else {
					$write_ldap_success = $ldap_server->add_user($current_eleve->login, $current_eleve->nom, $current_eleve->prenom, $current_eleve->email, $civilite, '', 'eleve');
				}
			} else {
				$write_ldap = false;
			}
コード例 #5
0
 function load_config()
 {
     $ldap_config = array();
     if (LDAPServer::is_setup()) {
         $path = dirname(__FILE__) . "/../" . LDAPServer::config_file();
         include $path;
         $available_settings = get_class_vars(get_class($this));
         foreach ($available_settings as $key => $value) {
             $varname = "ldap_" . $key;
             if (isset(${$varname})) {
                 $this->{$key} = ${$varname};
             }
         }
     }
 }
コード例 #6
0
ファイル: Session.php4.class.php プロジェクト: rhertzog/lcs
	function import_user_profile() {
		# On ne peut arriver ici quand dans le cas où on a une authentification réussie.
		# L'import d'un utilisateur ne peut se faire qu'à partir d'un LDAP
		if (!LDAPServer::is_setup()) {
			return false;
			die();
		} else {
			# Le serveur LDAP est configuré, on y va.
			# Encore un dernier petit test quand même : est-ce que l'utilisateur
			# est bien absent de la base.
			$sql = mysql_query("SELECT login FROM utilisateurs WHERE (login = '******')");
			if (mysql_num_rows($sql) != "0") {
				return false;
				die();
			}

			$ldap_server = new LDAPServer;
			$user = $ldap_server->get_user_profile($this->login);
			if ($user) {
				# On ne refait pas de tests ou de formattage. La méthode get_user_profile
				# s'occupe de tout.
				$res = mysql_query("INSERT INTO utilisateurs SET
										login = '******',
										prenom = '".$user["prenom"]."',
										nom = '".$user["nom"]."',
										email = '".$user["email"]."',
										civilite = '".$user["civilite"]."',
										statut = '".$user["statut"]."',
										password = '',
										etat = 'actif',
										auth_mode = '".$this->current_auth_mode."',
										change_mdp = 'n'");
				if (!$res) {
					return false;
				} else {
					return true;
				}
			} else {
				return false;
			}
		}
	}
コード例 #7
0
ファイル: modify_user.php プロジェクト: alhousseyni/gepi
		if("$login_user_suiv"!=""){echo " | <a href='modify_user.php?user_login=$login_user_suiv' onclick=\"return confirm_abandon (this, change, '$themessage')\">Suivant</a>\n";}
	}
}
echo "</p>\n";
echo "<script type='text/javascript'>
	function valide_form_chgt_user() {
		valeur_user=document.getElementById('user_login_form_chgt_user').options[document.getElementById('user_login_form_chgt_user').selectedIndex].value;
		if(valeur_user!='') {
			if(confirm_abandon (this, change, '$themessage')){document.form_choix_user.submit()}
		}
	}
</script>\n";
echo "</form>\n";

$ldap_write_access = getSettingValue("ldap_write_access") == "yes" ? true : false;
if (!LDAPServer::is_setup()) {$ldap_write_access = false;}

if ($ldap_write_access) {
	echo "<p><strong><span style='color: red;'>Attention !</strong> Un accès LDAP en écriture a été défini.
			En conséquence, toute modification effectuée sur un utilisateur ayant pour mode d'authentification LDAP ou SSO sera répercutée sur le LDAP (cela inclut la création du mot de passe, pour les nouveaux utilisateurs).
			Si l'utilisateur existe déjà dans l'annuaire LDAP, ses informations ne seront pas mises à jour dans l'annuaire mais il sera tout de même créé dans la base Gepi.
			En cas de modification d'un utilisateur existant à la fois dans l'annuaire et dans Gepi, les modifications seront répercutées sur l'annuaire LDAP.</strong></p>";
}
?>

<form enctype="multipart/form-data" action="modify_user.php" method="post">
<fieldset style='border: 1px solid grey; background-image: url("../images/background/opacite50.png");'>
		<legend style='border: 1px solid grey; background-color: white; color: black; font-weight:normal;'>Informations utilisateur</legend>
<?php
echo add_token_field();
if (isset($user_login)) {