Create and update users from external ldap

This commit is contained in:
Johannes Zellner
2019-08-29 22:15:48 +02:00
parent 4b86311ab9
commit b823213c94
4 changed files with 32 additions and 8 deletions
+24 -4
View File
@@ -10,10 +10,13 @@ exports = module.exports = {
};
var assert = require('assert'),
auditsource = require('./auditsource.js'),
debug = require('debug')('box:ldapclient'),
ldap = require('ldapjs'),
settings = require('./settings.js'),
tasks = require('./tasks.js'),
users = require('./users.js'),
UserError = users.UsersError,
util = require('util');
function ExternalLdapError(reason, errorOrMessage) {
@@ -137,20 +140,37 @@ function sync(progressCallback, callback) {
scope: 'sub'
};
// TODO this needs pagination!
client.search(externalLdapConfig.baseDn, opts, function (error, result) {
if (error) return callback(new ExternalLdapError(ExternalLdapError.EXTERNAL_ERROR, error));
result.on('searchEntry', function(entry) {
console.log('entry: ' + JSON.stringify(entry.object));
result.on('searchEntry', function (entry) {
const user = entry.object;
// TODO ensure db record for user
console.log('Ldap user: ', user);
users.getByUsername(user.uid, function (error, result) {
if (error && error.reason !== UserError.NOT_FOUND) return console.error(error);
if (error) {
users.create(user.uid, null, user.mail, user.displayName, { source: 'ldap' }, auditsource.EXTERNAL_LDAP_TASK, function (error) {
if (error) console.error('Failed to create user', user, error);
});
} else if (result.email !== user.mail || result.displayName !== user.displayName) {
users.update(result.id, { email: user.mail, displayName: user.displayName }, auditsource.EXTERNAL_LDAP_TASK, function (error) {
if (error) console.error('Failed to update user', user, error);
});
} else {
// user known and up-to-date
}
});
});
result.on('error', function (error) {
callback(new ExternalLdapError(ExternalLdapError.EXTERNAL_ERROR, error));
});
result.on('end', function(result) {
result.on('end', function (result) {
console.log('status: ' + result.status);
callback();
});