-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlibrary.js
111 lines (95 loc) · 2.73 KB
/
library.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
(function(module) {
"use strict";
var User = module.parent.require('./user'),
meta = module.parent.require('./meta'),
db = module.parent.require('../src/database'),
passport = module.parent.require('passport'),
passportLDAP = require('passport-ldapauth'),
fs = module.parent.require('fs'),
path = module.parent.require('path'),
nconf = module.parent.require('nconf'),
async = module.parent.require('async');
var constants = Object.freeze({
'name': "LDAP Account",
'admin': {
'route': '/plugins/ldap',
'icon': 'fa-user'
}
});
var Ldap = {};
Ldap.init = function(data, callback) {
function render(req, res, next) {
res.render('admin/plugins/ldap', {});
}
data.router.get('/admin/plugins/ldap', data.middleware.admin.buildHeader, render);
data.router.get('/api/admin/plugins/ldap', render);
callback();
}
Ldap.overrideAuth = function() {
meta.settings.get('ldap', function(err, settings) {
if (!err && settings['server']
&& settings['filter']) {
passport.use(new passportLDAP({
server: {
url: settings['server'],
bindDn: settings['username'],
bindCredentials: settings['secret'],
searchBase: settings['base'],
searchFilter: "(uid={{username}})",
}
}, function( userData, done) {
Ldap.login(userData.uid, userData, function(err, user) {
if (err) {
return done(err);
}
return done(null, user);
});
}));
};
});
};
Ldap.login = function(ldapid, userData, callback) {
Ldap.getUidByLdapId(ldapid, function(err, uid) {
if(err) {
return callback(err);
}
var success = function(uid) {
User.setUserField(uid, 'ldapid', ldapid);
db.setObjectField('ldapid:uid', ldapid, uid);
callback(null, {
uid: uid
});
};
if (uid !== null) {
// Existing User
return success(uid);
} else {
// New User
/* Add to own database */
User.create({username: userData.cn, email: userData.mail}, function(err, uid) {
if(err) {
return callback(err);
}
return success(uid);
});
}
});
};
Ldap.getUidByLdapId = function(ldapid, callback) {
db.getObjectField('ldapid:uid', ldapid, function(err, uid) {
if (err) {
return callback(err);
}
callback(null, uid);
});
};
Ldap.addMenuItem = function(custom_header, callback) {
custom_header.authentication.push({
"route": constants.admin.route,
"icon": constants.admin.icon,
"name": constants.name
});
callback(null, custom_header);
}
module.exports = Ldap;
}(module));