Source: src/ldap_data/ldap_data.js

var ensureLoggedin =  require('connect-ensure-login').ensureLoggedIn;
var ldapescape = require("ldap-escape");
//var Fuse = require("fuse.js");

var ldap = require('ldapjs');

var client = ldap.createClient({ url: "ldap://frankiz.eleves.polytechnique.fr", timeout: 10000, idleTimeout: 10000});

// Pas nécessaire normalement car fait dans ldap_auth.js ; ici pour des besoins de debug
function handshake(uid, passwd) { client.bind("uid=${uid},ou=eleves,dc=frankiz,dc=net",passwd, (err) => { console.log(err); }); }

/**
 * @summary Fonction qui retrouve les groupes où une personne est membre
 * @arg {int} uid - Identifiant de la personne à interroger
 * @arg {string} passwd - Mdp de la personne à interroger
 * @return {string} Liste des uid de groupes où l'id fournie est membre (noms flat des groupes)
 */
function listGroups(uid) {
    return new Promise(function(resolve, reject) {
        var groupsList=[];
        
        client.search("ou=groups,dc=frankiz,dc=net", {scope: "sub", attributes: "uid", filter: ldapescape.filter("(restrictedMemberUid=${id})", {id: uid})}, function(err, res) {
            if (err) {
                reject(err);
            } else {
                res.on('searchEntry', function(entry) { groupsList.push(entry.object.uid); });
                res.on('end', function(res) { resolve(groupsList); });
            }
        });
    });
}

// Synthaxe d'utilisation
handshake("user","xxx");
listGroups("user","xxx").then((grList) => { console.log(grList); });
 
/**
 * @summary Fonction qui retrouve la liste des membres d'un binet
 * @arg {int} uid - Identifiant de la personne interrogeant (pour des raisons d'identification)
 * @arg {string} passwd - Mdp de la personne à interroger
 * @return {string} Liste des uid de groupes où l'id fournie est membre (noms flat des groupes)
 
function listGroups(uid,passwd) {
    client.bind("uid=${uid},ou=eleves,dc=frankiz,dc=net",passwd, (err) => { console.log(err); });
    
    return new Promise(function(resolve, reject) {
        var groupsList=[];
        
        client.search("ou=groups,dc=frankiz,dc=net", {scope: "sub", attributes: "uid", filter: ldapescape.filter("(restrictedMemberUid=${id})", {id: uid})}, function(err, res) {
            if (err) {
                reject(err);
            } else {
                res.on('searchEntry', function(entry) { groupsList.push(entry.object.uid); });
                res.on('end', function(res) { resolve(groupsList); });
            }
        });
    });
}*/