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", timeout: 10000, idleTimeout: 10000});
/**
* @summary Fonction qui retrouve les groupes où une personne est membre
* @arg {int} person_id
* @return {string} Liste des groupes où l'id fournie est membre
*/
function groupsUserIsMember(person_id) {
return client.search("ou=groups,dc=frankiz,dc=net", {
attributes: "uid",
filter: ldapescape.filter("(|(memberUid=${id})(restrictedMemberUid=${id}))", {id: person_id}) },
function(err, res){
if (err) {
return err;
} else {
console.log(res);
res.on('searchEntry', function(entry) {
console.log('entry: ' + JSON.stringify(entry.object));
});
res.on('searchReference', function(referral) {
console.log('referral: ' + referral.uris.join());
});
res.on('error', function(err) {
console.error('error: ' + err.message);
});
res.on('end', function(result) {
console.log('status: ' + result.status);
});
}});
}
/** console.log(client.search("ou=groups,dc=frankiz,dc=net", function(err, res) { return err; } ));
return client.search("ou=groups,dc=frankiz,dc=net", {
scope: "one",
filter: ldapescape.filter("(|(memberUid=${id})(restrictedMemberUid={$id}))",{id: person_id}),
attributes: "uid",
},
function(err, res) { return err;
if (err) {
reject("LDAP ");
}
assert.ifError(err);
res.on('searchEntry', function(entry) {
console.log('entry: ' + JSON.stringify(entry.object));
});
res.on('searchReference', function(referral) {
console.log('referral: ' + referral.uris.join());
});
res.on('error', function(err) {
console.error('error: ' + err.message);
});
res.on('end', function(result) {
console.log('status: ' + result.status);});
});
}*/
function checkGroupAdmin(uid, from){
return new Promise(function(resolve, reject) {
client.search("dc=frankiz,dc=net", {scope: "sub", attributes: ["cn", "uid", "mail", "memberUid", "objectClass"], filter: ldapescape.filter("(uid=${uid})", {uid: from})}, function(err, resldap){
if (err) {
reject("LDAP search error");
} else {
resldap.on('searchEntry', function(entry) {
if (entry.object.objectClass.indexOf("inetOrgPerson") > -1) {
if (entry.object.uid == uid) {
console.log("Feu1");
resolve(entry.object.cn + " <" + entry.object.mail + ">");
} else {
reject("Cannot send as user which is not you");
}
} else {
if (entry.object.memberUid.indexOf(uid) > -1) {
console.log("Feu2");
resolve(entry.object.cn + " <" + from + "@eleves.polytechnique.fr>")
} else {
reject("You are not admin of this group");
}
}
});
}
});
});
}
function checkGroup(person_id){
return new Promise(function(resolve, reject) {
client.search("dc=frankiz,dc=net", {scope: "sub", attributes: "uid", filter: ldapescape.filter("(|(memberUid=${id})(restrictedMemberUid=${id}))", {id: person_id})}, function(err, resldap){
if (err) {
reject("LDAP search error");
} else {
resldap.on('searchEntry', function(entry) {
if (entry.object.objectClass.indexOf("inetOrgPerson") > -1) {
if (entry.object.uid == person_id) {
resolve("Binet Member");
} else {
reject("Fraud !");
}
} else {
if (entry.object.memberUid.indexOf(person_id) > -1) {
resolve("Binet member 2");
} else {
reject("Fraud");
}
}
});
}
});
});
}
console.log(checkGroupAdmin("quentin.chevalier","faerix"));
console.log(checkGroup("quentin.chevalier","faerix"));
console.log(groupsUserIsMember("anatole.romon"));