From 7c5ff5e4d534092379e27e0756058fdc0171aa76 Mon Sep 17 00:00:00 2001 From: Johannes Zellner Date: Thu, 4 Jun 2020 13:26:13 +0200 Subject: [PATCH] Create user groups for ldap groups --- src/externalldap.js | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/externalldap.js b/src/externalldap.js index 401e3ea10..0f146034c 100644 --- a/src/externalldap.js +++ b/src/externalldap.js @@ -20,6 +20,7 @@ var assert = require('assert'), BoxError = require('./boxerror.js'), constants = require('./constants.js'), debug = require('debug')('box:externalldap'), + groups = require('./groups.js'), ldap = require('ldapjs'), settings = require('./settings.js'), tasks = require('./tasks.js'), @@ -368,10 +369,29 @@ function sync(progressCallback, callback) { debug(`Found ${ldapGroups.length} groups`); - // we ignore all errors here and just log them for now - async.eachSeries(ldapGroups, function (group, iteratorCallback) { - console.log(group); - iteratorCallback(); + // we ignore all non internal errors here and just log them for now + async.eachSeries(ldapGroups, function (ldapGroup, iteratorCallback) { + console.log(ldapGroup); + + var groupName = ldapGroup[externalLdapConfig.groupnameField || 'cn']; + if (!groupName) return iteratorCallback(); + + groups.getByName(groupName, function (error, result) { + if (error && error.reason !== BoxError.NOT_FOUND) return iteratorCallback(error); + + if (result) { + debug(`[up-to-date group] groupname=${groupName}`); + + iteratorCallback(); + } else { + debug(`[adding group] groupname=${groupName}`); + + groups.create(groupName, 'ldap', function (error) { + if (error) console.error('Failed to create group', groupName, error); + iteratorCallback(); + }); + } + }); }, function (error) { if (error) return callback(error);