UNPKG

mecano

Version:

Common functions for system deployment.

118 lines (115 loc) 3.26 kB
// Generated by CoffeeScript 1.11.1 var each; module.exports = function(options, callback) { var binddn, modified, passwd, uri; binddn = options.binddn ? "-D " + options.binddn : ''; passwd = options.passwd ? "-w " + options.passwd : ''; if (options.url) { console.log("Mecano: option 'options.url' is deprecated, use 'options.uri'"); if (options.uri == null) { options.uri = options.url; } } if (options.uri === true) { options.uri = 'ldapi:///'; } uri = options.uri ? "-H " + options.uri : ''; if (!options.user) { return callback(Error("Mecano `ldap.user`: required property 'user'")); } if (!Array.isArray(options.user)) { options.user = [options.user]; } modified = false; return each(options.user).call((function(_this) { return function(user, callback) { var do_checkpass, do_end, do_ldappass, do_user; do_user = function() { var entry, k, v; entry = {}; for (k in user) { v = user[k]; if (k === 'userPassword') { continue; } entry[k] = v; } return _this.ldap.add({ entry: entry, uri: options.uri, binddn: options.binddn, passwd: options.passwd }, function(err, updated, added) { if (err) { return callback(err); } if (added) { options.log({ message: "User added", level: 'WARN', module: 'mecano/ldap/user' }); } else if (updated) { options.log({ message: "User updated", level: 'WARN', module: 'mecano/ldap/user' }); } if (updated || added) { modified = true; } if (added) { return do_ldappass(); } else { return do_checkpass(); } }); }; do_checkpass = function() { if (!user.userPassword) { return do_end(); } return _this.execute({ cmd: "ldapsearch -D " + user.dn + " -w " + user.userPassword + " " + uri + " -b \"\" -s base \"objectclass=*\"", code_skipped: 49 }, function(err, identical, stdout) { if (err) { return callback(err); } if (identical) { return do_end(); } else { return do_ldappass(); } }); }; do_ldappass = function() { if (!user.userPassword) { return do_end(); } return _this.execute({ cmd: "ldappasswd " + binddn + " " + passwd + " " + uri + " -s " + user.userPassword + " '" + user.dn + "'" }, function(err) { if (err) { return callback(err); } options.log({ message: "Password modified", level: 'WARN', module: 'mecano/ldap/user' }); modified = true; return do_end(); }); }; do_end = function() { return callback(); }; return do_user(); }; })(this)).then(function(err) { return callback(err, modified); }); }; each = require('each');