Expose ldap groups to apps

This commit is contained in:
Johannes Zellner
2021-12-09 15:07:30 +01:00
parent b5695c98af
commit d02d2dcb80
+30 -2
View File
@@ -190,7 +190,8 @@ async function groupSearch(req, res, next) {
const results = [];
const groups = [{
// those are the old virtual groups for backwards compat
const virtualGroups = [{
name: 'users',
admin: false
}, {
@@ -198,7 +199,7 @@ async function groupSearch(req, res, next) {
admin: true
}];
groups.forEach(function (group) {
virtualGroups.forEach(function (group) {
const dn = ldap.parseDN('cn=' + group.name + ',ou=groups,dc=cloudron');
const members = group.admin ? result.filter(function (user) { return users.compareRoles(user.role, users.ROLE_ADMIN) >= 0; }) : result;
@@ -220,6 +221,33 @@ async function groupSearch(req, res, next) {
}
});
const [errorGroups, resultGroups] = await safe(groups.listWithMembers());
if (errorGroups) return next(new ldap.OperationsError(errorGroups.toString()));
resultGroups.forEach(function (group) {
console.log('----', group)
const dn = ldap.parseDN('cn=' + group.name + ',ou=groups,dc=cloudron');
const members = [];
const obj = {
dn: dn.toString(),
attributes: {
objectclass: ['group'],
cn: group.name,
memberuid: members.map(function(entry) { return entry.id; })
}
};
// ensure all filter values are also lowercase
const lowerCaseFilter = safe(function () { return ldap.parseFilter(req.filter.toString().toLowerCase()); }, null);
if (!lowerCaseFilter) return next(new ldap.OperationsError(safe.error.toString()));
if ((req.dn.equals(dn) || req.dn.parentOf(dn)) && lowerCaseFilter.matches(obj.attributes)) {
results.push(obj);
}
});
finalSend(results, req, res, next);
}