====== Classe LDAP pour la plateforme ======
Cette classe PHP nous servira pour le différente opération à effectuer sur le serveur LDAP.
\\
* la librairie php LDAP: php5-ldap
* le framework PHP PEAR et sa librairie NET_LDAP2
\\
* [[[Braveo:Changelog.LDAPCLASS | Changelog]]
\\
=== Constantes ===
* //const// ldap::ldapConf = "ldap.conf"
=> Contient le nom du fichier de configuration
=== Méthodes ===
== Privées ==
* //array// ldap::**getConf**()
=> Retourne le fichier **ldapConf** en //array//
* //stream// ldap::**connect**()
=> Établie la connexion au serveur LDAP et retour le flux //stream//
* //boolean// ldap::**unConnect**(//stream// **stream**)
=> Détruit la connexion **stream** au serveur LDAP
== Publiques ==
* //string// ldap::**passwdHash**(//string// **passwd**)
=> Hash le mot de passe **passwd**
* //boolean// ldap::**updatePasswd**(//string// **user**, //string// **passwd**)
=> Met à jour le mot de passe **passwd** d'un utilisateur **user**.
* //boolean// ldap::**userBind**(//string// **user**, //string// **passwd**)
=> Authentifie l'utilisateur **user** avec son mot de passe **passwd**
* //array// ldap::**getUserInfo**(//string// **user**)
=> Retourne Un tableau contenant les information concernant l'utilisateur **user**
=== Le fichier de configuration ldap.conf: ===
[ldap.conf]
host = "ldap.mdl29"
port = "389"
basedn = "ou=Users,dc=mdl29,dc=net"
binddn = "cn=admin,dc=mdl29,dc=net"
bindpw = "xxxxxxx"
userAttr = "uid"
=== La classe ldap.class.php: ===
getMessage());
//On retourne une valeur négative
return false;
//On quitte la fonction
exit;
}else{
//Si tout ce passe bien, on retourne la variable d'accès au LDAP
return $stream;
}
}
private static function unConnect($stream){
//Se déconnecte du LDAP
$stream->done();
//Retourne une valeur positive
return true;
}
public static function updatePasswd($user, $passwd){
//On se connecte au LDAP
$stream = self::connect();
//On definie le dn de l'utilisateur
$dn = $conf["userAttr"]."=".$user.",".$conf["basedn"];
//On récupère juste le password de l'utilisateur
$user =& $stream->getEntry($dn, array("userPassword"));
//On met a jour localement
$user->replace(
array(
"userPassword" => self::passwdHash($passwd) //On hache le mot de passe
)
);
//Puis on met a jour notre LDAP
$user->update();
//On verifie qu'il n'y ai pas d'erreur
if(PEAR::isError($user)){
//Si oui on se déconnecte
self::unConnect($ldap);
//On le dit
die("Impossible de mettre le mot de passe ajour dans le serveur LDAP: ".$user->getMessage());
//On retourne une valeur négative
return false;
//On quitte la fonction
exit;
}else{
//Si tout c'est bien possé, on retourne une valeur possitive
return true;
//Enfin, on ferme la connexion
self::unConnect($ldap);
}
}
public static function userBind($user,$passwd){
//On se connecte au LDAP
$stream = self::connect();
//On récupère la configuration
$conf = self::getConf();
//On definie le dn de l'utilisateur
$dn = $conf["userAttr"]."=".$user.",".$conf["basedn"];
//On voie si l'utilisateur existe
if($stream->dnExists($dn)){
//Si oui, on récupère son mot de passe dans le LDAP
$user =& $stream->getEntry($dn, array("userPassword"));
//On le compare avec celui envoyé en argument a la fonction
if($user->getValue("userPassword","single") == self::passwdHash($passwd)){
//Si c'est bon, on se déconnecte du LDAP
self::unConnect($stream);
//On, retourne une valeur positive
return true;
}else{
//Sinon, on se deconnecte
self::unConnect($stream);
//On retourne une valeur négative
return false;
}
}else{
//Si l'utilisateur n'existe pas, on se déconnecte du LDAP
self::unConnect($stream);
//On retourne une valeur négative
return false;
}
}
public static function getUserInfo($user){
//On se connecte au LDAP
$stream = self::connect();
//On récupère la configuration
$conf = self::getConf();
//On definie le dn de l'utilisateur
$dn = $conf["userAttr"]."=".$user.",".$conf["basedn"];
//On voie si l'utilisateur existe
if($stream->dnExists($dn)){
//Si oui, on récupère les informations le concernant dans le LDAP
$user =& $stream->getEntry($dn, array("cn", "mail", "sn", "displayName", "givenName","initials"));
//On retourne un tableau avec les infos
return array(
"cn" => $user->getValue("cn","single"),
"mail" => $user->getValue("mail","single"),
"sn" => $user->getValue("sn","single"),
"displayName" => $user->getValue("displayName","single"),
"givenName" => $user->getValue("givenName","single"),
"initials" => $user->getValue("initials","single")
);
//On se deconnecte du serveur LDAP
self::unConnect($stream);
}else{
//Si l'utilisateur n'existe pas, on se déconnecte du LDAP
self::unConnect($stream);
//On retourne une valeur négative
return false;
}
}
}
?>