Outils pour utilisateurs

Outils du site


braveo:ldapclass

Différences

Ci-dessous, les différences entre deux révisions de la page.


braveo:ldapclass [2024/04/16 22:20] (Version actuelle) – créée - modification externe 127.0.0.1
Ligne 1: Ligne 1:
 +====== 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: ===
 +<code INI>
 +[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"
 +</code>
 +=== La classe ldap.class.php: ===
 +<code PHP>
 +<?php
 +require_once "Net/LDAP2.php";
 +class ldap{
 +
 +    const ldapConf = "ldap.conf";
 +    
 +    private static function getConf(){
 +        //Retourne le contenue du fichier de configuration en arrray
 +        return parse_ini_file(self::ldapConf);
 +    }
 +
 +    public static function passwdHash($passwd){
 +        //Retourne $passwd haché
 +        return "{SHA}".base64_encode(pack("H*",sha1($passwd)));
 +    }
 +
 +    private static function connect(){
 +        //On se connecte, en prenant comme argument le contenu du fichier ldap.conf
 +        $stream = Net_LDAP2::connect(self::getConf());
 +        //On verifie qu'il n'y ai pas d'erreur
 +        if (PEAR::isError($stream)) {
 +            //Si oui, on le dit
 +            die("Impossible de se connecter au serveur LDAP: ".$ldap->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;
 +        }
 +    }
 +}
 +?>
 +</code>

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki