Attention,un champ est vide, nous ne pouvons poursuivre la demande. ';
die();
}
} // on verifie le champ prénom
elseif (preg_match('/[\^£$%&*()}{@#~?><>,|=_\\\\\;+¬]/', $prenom))
{
echo 'Le champ prénom contient un caractère spécial.';// one or more of the 'special characters' found in $string
die();
}
elseif (preg_match('~[0-9]~', $prenom))
{
echo 'Le champ prénom contient un caractère spécial.';
die();
}
// on vérifie le champ nom
elseif (preg_match('/[\^£$%&*()}{@#~?><>,|=_\\\\\;+¬]/', $nom))
{
echo 'Le champ nom contient un caractère spécial.';
die();
}
elseif (preg_match('~[0-9]~', $nom))
{
echo 'Le champ nom contient un caractère spécial.';
die();
}
// sinon ...
else
{
$unwanted_array = array( 'Š'=>'S', 'š'=>'s', 'Ž'=>'Z', 'ž'=>'z', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U',
'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss', 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c',
'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o',
'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y' );
// on supprime les espaces du prenom
//$prenom = preg_replace('/\s+/', '', $prenom);
// si le prenom contient un trait d'union
if (strpos($prenom, '-') !== false) {
// delimiteur trait d'union
$prenom1 = explode("-", $prenom);
$prenom1[0] = ucfirst(strtolower($prenom1[0]));
$prenom1[1] = ucfirst(strtolower($prenom1[1]));
$prenom = $prenom1[0].'-'.$prenom1[1];
//echo 'dans la boucle';
//echo $prenom;
} else {
$prenom = ucfirst(strtolower($prenom));
}
//$prenom = ucfirst(strtolower($prenom));
// Tout en MAJUSCULE en gardant les accents
$nom = mb_strtoupper($nom, 'UTF-8');
// On supprime les accents
$prenom2 = strtr( $prenom, $unwanted_array );
// on ne garde que les lettres du prenom
$prenom2 = preg_replace("/[^a-zA-Z]-/", "", $prenom2);
// on recupere le premier caractere du prénom
$FirstChar = $prenom2[0];
// on supprime les espaces du nom
$nom2 = preg_replace('/\s+/', '', $nom);
$nom2 = strtr( $nom2, $unwanted_array );
//$FirstChar = strtr( $FirstChar, $unwanted_array );
// On concatene premiere lettre prenom avec le nom
$login = $FirstChar.$nom2;
// on met tout en minuscule
$login = strtolower($login);
// on prend les 20 premiers caracteres
$login = substr($login,0,20);
// on ne garde que les lettres
$login = preg_replace("/[^a-zA-Z]/", "", $login);
// on supprime les accents, apostrophe et trait d'union :
$prenom_mail = preg_replace("/[^a-zA-Z]-/", "", $prenom2);
$prenom_mail = preg_replace('/\s+/', '', $prenom_mail);
$prenom_mail = str_replace("'", '', $prenom_mail);
$nom2_mail = preg_replace("/[^a-zA-Z]-/", "", $nom2);
$nom2_mail = str_replace("'", '', $nom2);
//SMTP PINCIPAL
$email = $prenom_mail.".".$nom2_mail;
$email = substr($email,0,64);
//$email = $email."@ensae-paristech.fr";
$email = $email."@ensae.fr";
$email = strtr( $email, $unwanted_array );
$email = strtolower($email);
// ALIAS
$alias = $prenom_mail.".".$nom2_mail."@ensae.fr";
$alias = strtr( $alias, $unwanted_array );
$alias = strtolower($alias);
// ON AFFICHE
$password = generateStrongPassword();
$N = count($voie);
/* echo "Bonjour ".$prenom." ".$nom ;
echo "";
echo "Votre login est ".$login;
echo "";
$password = generateStrongPassword();
echo "Votre mot de passe est : ".$password;
echo "";
echo "Votre adresse email est ".$email;
echo "";
$N = count($voie);
echo("Selection de $N voie(s): ");
echo "";
for($i=0; $i < $N; $i++)
{
echo($voie[$i] . " ");
}
echo "";
echo 'Imprimer';
foreach($voie as $value)
{
echo '';
} */
}
function generateStrongPassword($length = 12, $add_dashes = false, $available_sets = 'lud')
{
$sets = array();
if(strpos($available_sets, 'l') !== false)
$sets[] = 'abcdefghjkmnpqrstuvwxyz';
if(strpos($available_sets, 'u') !== false)
$sets[] = 'ABCDEFGHJKMNPQRSTUVWXYZ';
if(strpos($available_sets, 'd') !== false)
$sets[] = '23456789';
if(strpos($available_sets, 's') !== false)
$sets[] = '!@#$%&*?';
$all = '';
$password = '';
foreach($sets as $set)
{
$password .= $set[array_rand(str_split($set))];
$all .= $set;
}
$all = str_split($all);
for($i = 0; $i < $length - count($sets); $i++)
$password .= $all[array_rand($all)];
$password = str_shuffle($password);
if(!$add_dashes)
return $password;
$dash_len = floor(sqrt($length));
$dash_str = '';
while(strlen($password) > $dash_len)
{
$dash_str .= substr($password, 0, $dash_len) . '-';
$password = substr($password, $dash_len);
}
$dash_str .= $password;
return $dash_str;
}
$filter="(mail=$email)";
$FilterEmailExist="(mail=$EtudiantMail)";
$filter2="(samaccountname=$login)";
// Connexion LDAPs
$ldapconn = ldap_connect($ldapserver) or die("Could not connect to LDAP server.");
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
// ******************************************************
if($ldapconn)
{
// binding to ldap server
$ldapbind = ldap_bind($ldapconn, $ldapuser, $ldappass) or die ("Error trying to bind: ".ldap_error($ldapconn));
// verify binding
if ($ldapbind)
{
// echo "LDAP bind successful...
";
//echo "".$login;
//echo "".$email;
// recherche par rapport a l email
$result = ldap_search($ldapconn, $ldapdn, $filter) or die ("Error in search query: ".ldap_error($ldapconn));
// recherche par rapport au login
$result2 = ldap_search($ldapconn, $ldapdn, $filter2) or die ("Error in search query: ".ldap_error($ldapconn));
$SearchMailExist = ldap_search($ldapconn, $ldapdn, $FilterEmailExist) or die ("Error in search query: ".ldap_error($ldapconn));
$data = ldap_get_entries($ldapconn, $result);
$data2 = ldap_get_entries($ldapconn, $result2);
//echo "".$data2['count'];
//echo "".$data['count'];
$ResultMailExist = ldap_get_entries($ldapconn, $SearchMailExist);
// SHOW ALL DATA
// echo '
Dump all data
';
//print_r($ResultMailExist);
//echo '
';
//echo $data[0]["mail"];
// iterate over array and print data for each entry
for ($i=0; $i<$data["count"]; $i++)
{
//echo "dn is: ". $data[$i]["dn"] ." ";
//echo "User: ". $data[$i]["cn"][0] ." ";
if(isset($data[$i]["mail"][0]))
{
$mail = $data[$i]["mail"][0];
//echo '
";
}
}
// on compte le nombre d email identique dans l'AD
$exsite_email = ldap_count_entries($ldapconn, $result);
// on compte le nombre de login identique dans l'AD
$exsite_login = ldap_count_entries($ldapconn, $result2);
/* UTILE POUR AFFICHER SI UN UTILISATEUR EXISTE
echo "Nombre d email existant".$exsite_email ;
echo "Nombre de login existant".$exsite_login ; */
// On encode le mot de passe pour pouvoir activer le compte (Obligatoire)
$newPassword = $password;
$newPassw = "";
$newPassword = "\"" . $newPassword . "\"";
$len = strlen($newPassword);
for ($i = 0; $i < $len; $i++)
$newPassw .= "{$newPassword{$i}}\000";
$newPassword = $newPassw;
//si pas d homonyme (le compte n exsite_email pas) alors on le crée
if ($exsite_email == 0 && $exsite_login == 0 && $EtatCompte == 0)
{
$cn = $nom." ".$prenom;
$basedn = "CN=$cn,$BaseUtilisateur";
//$adduserAD["cn"][0] =
//$adduserAD["instancetype"][0] =
$adduserAD["samaccountname"][0] = $login;
$adduserAD["userprincipalname"][0] = $prenom.".".$nom."@ensae.fr";
$adduserAD["objectclass"][0] = "top";
$adduserAD["objectclass"][1] = "person";
$adduserAD["objectclass"][2] = "organizationalPerson";
$adduserAD["objectclass"][3] = "user";
$adduserAD["displayname"][0] = $nom." ".$prenom;
$adduserAD["name"][0] = $nom;
$adduserAD["unicodePwd"][0] = $newPassword;
$adduserAD["userAccountControl"][0] = 544;
$adduserAD["accountExpires"][0] = $DateExpiration;
//$adduserAD["scriptPath"][0] = "";
$adduserAD["homeDirectory"][0] = "\\\paradis\\eleves\\".$login ;
$adduserAD["homeDrive"][0] = "W:";
$adduserAD["profilepath"][0] = "\\\paradis\profils\\".$login;
$adduserAD["givenname"][0] = $prenom;
$adduserAD["sn"][0] = $nom;
//$adduserAD["company"][0] = "";
//$adduserAD["department"][0] = "";
//$adduserAD["title"][0] = "";
$adduserAD["description"][0] = "Eleve de l'ENSAE";
//$adduserAD["mail"][0] = $email;
//$adduserAD["initials"][0] = "";
// on CREE le compte
$r = ldap_add($ldapconn, $basedn, $adduserAD);
if ($r == true) {
$resultatcompte = 0 ;
} else {
echo "ERREUR DANS LA CREATION DU COMPTE AD";
//var_dump ($r);
$resultatcompte = 1 ;
}
// ON AJOUTE L UTILISATEUR AUX GROUPES CORRESPONDAND AUX VOIES SELECTIONNEES
// on compte combien de groupes sont séléctionnés
$N = count($voie);
for($i=0; $i < $N; $i++)
{
$dn = "CN=$voie[$i]$BaseGroupe";
//echo $dn;
//echo "";
$entry["member"] = $basedn;
$result_group = @ldap_mod_add($ldapconn, $dn, $entry);
if ($result_group == false) {
echo "ERREUR RENCONTREE DANS L AJOUT DES GROUPES/VOIES";
$resultatgroupe = "NOK";
}
}
// ajout par défaut du groupe ClearPass-ETUDIANT pour acces WIFI, PromotionsENSAE et Mesdossiers_Paradis
$entry["member"] = $basedn;
$wifiGroupe = @ldap_mod_add($ldapconn, $wifi, $entry);
$PromotionsENSAEGroupe = @ldap_mod_add($ldapconn, $PromotionsENSAE, $entry);
$MesDossiersGroupe = @ldap_mod_add($ldapconn, $MesDossiers, $entry);
//*****************ON CREE LA MESSAGERIE********************************
$cmd = "powershell.exe C:\\wamp64\\www\\administrationAD\\creation-mail.ps1 $login $email $alias 2>&1";
try {
set_time_limit(300);
$execmail = shell_exec($cmd);
$resultatmail = 0 ;
//echo $resultatmail;
}
catch(Exception $e)
{
echo "Erreur lancement script création mail";
//var_dump($e);
$resultatmail = 1 ;
exit;
}
//***************** ON CREE HOMEDIRECTORY + ACL ********************************
$cmd2 = "powershell.exe C:\\wamp64\\www\\administrationAD\\homedirectory.ps1 $login 2>&1";
try {
set_time_limit(300);
$exechomedir = shell_exec($cmd2);
$resultathomedir = 0 ;
//echo $resultathomedir;
}
catch(Exception $ex)
{
echo "Erreur lancement script creation home directory";
$resultathomedir = 1 ;
//var_dump($ex);
exit;
}
// ON AFFICHE LES INFOS COMPLETES
echo "Bonjour ".$prenom." ".$nom ;
echo "";
echo "Votre login est ".$login;
echo "";
echo "Votre mot de passe est : ".$newPassword;
echo "";
echo "Votre adresse email est ".$email;
echo "";
$N = count($voie);
echo("Selection de $N voie(s): ");
echo "";
for($i=0; $i < $N; $i++)
{
echo($voie[$i] . " ");
}
//echo 'Imprimer';
}
//NOUVEL UTILISATEUR MAIS IL exsite_email UN COMPTE SIMILAIRE DANS L AD
elseif ($exsite_email > 0 || $exsite_login > 0)
{
if ($EtatCompte == 0)
{
echo "Compte existant, on crée un nouveau compte en ajoutant la deuxieme lettre du prenom dans le login ";
$unwanted_array = array( 'Š'=>'S', 'š'=>'s', 'Ž'=>'Z', 'ž'=>'z', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U',
'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss', 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c',
'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o',
'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y' );
// le point entre le prenom et le nom sera remplacé par underscore _
$email = $prenom_mail."_".$nom2_mail;
$email = substr($email,0,64);
//$email = $email."@ensae-paristech.fr";
$email = $email."@ensae.fr";
$email = strtr( $email, $unwanted_array );
$email = strtolower($email);
// on crée un nouveau login formé par les 2premieres lettre du prenom puis le nom
$prenomFirstLetter = $prenom2[0];
$prenomSecondLetter = $prenom2[1];
$prenom2letter = $prenomFirstLetter.$prenomSecondLetter;
$login = $prenom2letter.$nom2;
$login = strtolower($login);
$login = strtolower($login);
// on prend les 20 premiers caracteres
$login = substr($login,0,20);
// on ne garde que les lettres
$login = preg_replace("/[^a-zA-Z]/", "", $login);
echo "Le login sera : ".$login."";
$cn = $nom.".".$prenom;
$basedn = "CN=$cn,$BaseUtilisateur";
$adduserAD["samaccountname"][0] = $login;
$adduserAD["userprincipalname"][0] = $prenom2letter.".".$nom2."@ensae.fr";
$adduserAD["objectclass"][0] = "top";
$adduserAD["objectclass"][1] = "person";
$adduserAD["objectclass"][2] = "organizationalPerson";
$adduserAD["objectclass"][3] = "user";
$adduserAD["displayname"][0] = $nom." ".$prenom;
$adduserAD["name"][0] = $nom;
$adduserAD["unicodePwd"][0] = $newPassword;
$adduserAD["userAccountControl"][0] = 544;
$adduserAD["accountExpires"][0] = $DateExpiration;
$adduserAD["homeDirectory"][0] = "\\\paradis\\eleves\\".$login ;
$adduserAD["homeDrive"][0] = "W:";
$adduserAD["profilepath"][0] = "\\\paradis\profils\\".$login;
$adduserAD["givenname"][0] = $prenom;
$adduserAD["sn"][0] = $nom;
$adduserAD["description"][0] = "Eleve de l'ENSAE";
// on CREE le compte
$re = @ldap_add($ldapconn, $basedn, $adduserAD);
if ($re == true) {
$resultatcompte = 0 ;
} else {
echo "ERREUR DANS LA CREATION DU COMPTE AD";
$resultatcompte = 1 ;
}
// ON AJOUTE L UTILISATEUR AUX GROUPES CORRESPONDAND AUX VOIES SELECTIONNEES
// on compte combien de groupes sont séléctionnés
$N = count($voie);
for($i=0; $i < $N; $i++)
{
$dn = "CN=$voie[$i]$BaseGroupe";
//echo $dn;
echo "";
$entry["member"] = $basedn;
$result_group = @ldap_mod_add($ldapconn, $dn, $entry);
if ($result_group == false) {
echo "ERREUR RENCONTREE DANS L AJOUT DES GROUPES/VOIES";
}
}
// ajout par défaut du groupe ClearPass-ETUDIANT pour acces WIFI
$wifiGroupe = @ldap_mod_add($ldapconn, $wifi, $entry);
$PromotionsENSAEGroupe = @ldap_mod_add($ldapconn, $PromotionsENSAE, $entry);
$MesDossiersGroupe = @ldap_mod_add($ldapconn, $MesDossiers, $entry);
//*****************ON CREE LA MESSAGERIE********************************
$cmd = "powershell.exe C:\\wamp64\\www\\administrationAD\\creation-mail.ps1 $login $email $alias";
try {
set_time_limit(300);
$execmail = shell_exec($cmd);
$resultatmail = 0 ;
//echo "
";
//echo($output);
}
catch(Exception $e)
{
echo "Erreur sur la création de la messagerie";
// var_dump($e);
$resultatmail = 1 ;
exit;
}
//***************** ON CREE HOMEDIRECTORY + ACL ********************************
$cmd2 = "powershell.exe C:\\wamp64\\www\\administrationAD\\homedirectory.ps1 $login";
try {
set_time_limit(300);
$exechomedir = shell_exec($cmd2);
$resultathomedir = 0 ;
//echo($resultathomedir);
}
catch(Exception $ex)
{
echo "Erreur lancemeny script Home directory";
//var_dump($ex);
$resultathomedir = 1 ;
exit;
}
// ON AFFICHE LES INFOS COMPLETES
echo "Bonjour ".$prenom." ".$nom ;
echo "";
echo "Votre login est ".$login;
echo "";
echo "Votre mot de passe est : ".$newPassword;
echo "";
echo "Votre adresse email est ".$email;
echo "";
$N = count($voie);
echo("Selection de $N voie(s): ");
echo "";
for($i=0; $i < $N; $i++)
{
echo($voie[$i] . " ");
}
//echo 'Imprimer';
}
else
{
echo "Ce n'est pas un nouveau compte";
}
}
// TRAITEMENT DES PROLONGATIONS DES COMPTES
if ($EtatCompte == 1)
{
// pour afficher la date de valide du compte initial
echo "Date d expiration actuelle : ".$ResultMailExist[0]['accountexpires'][0]."";
echo $ResultMailExist[0]['distinguishedname'][0];
$dn = $ResultMailExist[0]['distinguishedname'][0];
$entry['accountexpires'][0] = $DateExpiration;
$result_dateexpiration = @ldap_mod_replace($ldapconn, $dn, $entry);
if ($result_dateexpiration == true)
{
echo "Prolongement effectué";
$resultatprolongation = 0;
} else {
echo " Erreur rencontré sur le prolongement";
echo "debug : mail reçu : ".$EtudiantMail."";
$resultatprolongation = 1;
}
// on ajoute les nouveaux groupes à l'utilisateur
$N = count($voie);
echo "Nombre de groupe selectionné : ".$N."";
for($i=0; $i < $N; $i++)
{
$GroupeSelection = "CN=$voie[$i]$BaseGroupe";
$Groupe['member'] = $ResultMailExist[0]['distinguishedname'][0];
$result_group = @ldap_mod_add($ldapconn, $GroupeSelection, $Groupe);
if ($result_group == true) {
echo "Ajout du groupe : ".$voie[$i]."";
} else { echo "L'utilisateur est probablement déjà membre du groupe ".$voie[$i].""; }
}
$promoENSAE['member'] = $ResultMailExist[0]['distinguishedname'][0];
$result_promoENSAE = @ldap_mod_add($ldapconn, $PromotionsENSAE, $promoENSAE);
if ($result_promoENSAE == true) {
echo "Ajout du groupe : PromotionsENSAE";
} else { echo "L'utilisateur est probablement déjà membre du groupe PromotionsENSAE "; }
$GroupMember['member'] = $ResultMailExist[0]['distinguishedname'][0];
$result_wifiGroupe = @ldap_mod_add($ldapconn, $wifi, $GroupMember);
if ($result_wifiGroupe == true) {
echo "Ajout du groupe : ClearPass-ETUDIANT (WIFI)";
} else { echo "L'utilisateur est probablement déjà membre du groupe Wifi "; }
// if (result_dateexpiration == true)
// {
// $resultatprolongation = "Succès";
// } else {
// $resultat = "Echec";
// }
//
$email = $EtudiantMail ;
}
// CREATION DU FICHIER UTILISATEUR
$newuser[] = array("$nom", "$prenom", "$password", "$login", "$email", "$resultatcompte", "$resultathomedir", "$resultatmail", "$datetime" );
//print_r($newuser);
// Paramétrage de l'écriture du futur fichier CSV
$chemin = 'eleves2023.csv';
$delimiteur = ','; // Pour une tabulation, utiliser $delimiteur = "t";
$fichier_csv = fopen($chemin, 'a');
// Si votre fichier a vocation a être importé dans Excel,
// vous devez impérativement utiliser la ligne ci-dessous pour corriger
// les problèmes d'affichage des caractères internationaux (les accents par exemple)
fprintf($fichier_csv, chr(0xEF).chr(0xBB).chr(0xBF));
// chaque ligne en cours de lecture est insérée dans le fichier
// les valeurs présentes dans chaque ligne seront séparées par $delimiteur
foreach($newuser as $ligne)
{
fputcsv($fichier_csv, $ligne);
}
// fermeture du fichier csv
fclose($fichier_csv);
if ($resultatcompte == 0 && $resultathomedir == 0 && $resultatmail == 0 ) {
//$resultat = "Le compte ".$login." a bien été crée, email : ".$email.", mot de passe : ".$password ;
$resultat = "Succès";
echo "L'ajout du compte à été réalisé sans erreur.";
} else {
$resultat = "Echec";
echo "Un problème est survenu à la création du compte ou son prolongement.";
}
// Pas d'erreur rencontrée
if ($EtatCompte == 0) {
?>