Outils pour utilisateurs

Outils du site


braveo:ldapclass

Différences

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

Lien vers cette vue comparative

braveo:ldapclass [2016/07/19 15:36] (Version actuelle)
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>​
braveo/ldapclass.txt · Dernière modification: 2016/07/19 15:36 (modification externe)