Create and update users from external ldap
This commit is contained in:
+24
-4
@@ -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();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user