mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-07-15 13:51:35 +00:00
Added LDAP Auth Implementation
This commit is contained in:
parent
c2793fe29b
commit
464a1ea121
6 changed files with 459 additions and 25 deletions
124
server/authProviders/ldap.js
Normal file
124
server/authProviders/ldap.js
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
const ldap = require('ldapjs');
|
||||
const Logger = require('../Logger');
|
||||
const { res } = require('../libs/dateAndTime');
|
||||
const { integer } = require('../libs/requestIp/isJs');
|
||||
|
||||
class LdapAuth {
|
||||
constructor() {}
|
||||
async getClient() {
|
||||
return await new Promise((resolve, reject) => {
|
||||
Logger.debug('Connecting...')
|
||||
const client = ldap.createClient({
|
||||
url: global.ldapUrl,
|
||||
bindDN: global.ldapBindUser,
|
||||
bindCredentials: global.ldapBindPass
|
||||
});
|
||||
let onError, onConnect, onTimeout;
|
||||
onError = err => {
|
||||
Logger.error('Error Connecting.')
|
||||
client.removeListener('connect', onConnect);
|
||||
reject(err);
|
||||
};
|
||||
onConnect = () => {
|
||||
Logger.debug('Connected.')
|
||||
Logger.debug('Binding...')
|
||||
client.removeListener('error', onError);
|
||||
client.bind(global.ldapBindUser, global.ldapBindPass, err => {
|
||||
if (err) {
|
||||
Logger.error('Error Binding.')
|
||||
reject(err);
|
||||
}
|
||||
else {
|
||||
Logger.debug('Bound.')
|
||||
resolve(client);
|
||||
}
|
||||
|
||||
// client.search
|
||||
})
|
||||
};
|
||||
onTimeout = () => {
|
||||
Logger.error('Timeout Connecting.')
|
||||
reject(new Error('LDAP connection timeout'));
|
||||
}
|
||||
client.once('connect', onConnect)
|
||||
client.once('error', onError)
|
||||
client.once('connectTimeout', onTimeout)
|
||||
})
|
||||
}
|
||||
async findAllUsers() {
|
||||
const client = await this.getClient();
|
||||
return await new Promise((resolve, reject) => {
|
||||
Logger.info('Searching...')
|
||||
Logger.debug(`global.ldapBaseDn: ${global.ldapBaseDn}`)
|
||||
Logger.debug(`global.ldapSearchFilter: ${global.ldapSearchFilter}`)
|
||||
client.search(global.ldapBaseDn, {
|
||||
scope: 'sub',
|
||||
filter: global.ldapSearchFilter
|
||||
}, (err, res) => {
|
||||
Logger.info('Search returned.')
|
||||
const items = []
|
||||
Logger.debug('Attaching to entry events...')
|
||||
res.on('searchEntry', entry => {
|
||||
Logger.debug('adding entry...')
|
||||
items.push(entry.object)
|
||||
})
|
||||
Logger.debug('Attaching to error events...')
|
||||
res.on('end', result => {
|
||||
Logger.debug('end of entries.')
|
||||
Logger.info(`Search complete, returning ${items.length} items.`)
|
||||
resolve(items);
|
||||
})
|
||||
|
||||
})
|
||||
})
|
||||
}
|
||||
authenticateUser(username, password) {
|
||||
Logger.info('Authenticating LDAP User...');
|
||||
return new Promise((resolve, reject) => {
|
||||
const tempClient = ldap.createClient({
|
||||
url: global.ldapUrl,
|
||||
bindDN: username,
|
||||
bindCredentials: password
|
||||
})
|
||||
let onError, onConnect, onTimeout;
|
||||
onError = err => {
|
||||
Logger.error('Error Connecting.')
|
||||
tempClient.removeListener('connect', onConnect);
|
||||
resolve(false);
|
||||
};
|
||||
onConnect = () => {
|
||||
Logger.debug('Connected.')
|
||||
Logger.debug('Binding...')
|
||||
tempClient.removeListener('error', onError);
|
||||
tempClient.bind(username, password, err => {
|
||||
if (err) {
|
||||
Logger.error('Error Binding.')
|
||||
resolve(false);
|
||||
}
|
||||
else {
|
||||
Logger.debug('Bound.')
|
||||
tempClient.unbind(err => {
|
||||
if (err) {
|
||||
Logger.error('Error Unbinding.')
|
||||
resolve(false);
|
||||
} else {
|
||||
Logger.info('User Authenticated.')
|
||||
resolve(true);
|
||||
}
|
||||
})
|
||||
}
|
||||
// client.search
|
||||
})
|
||||
};
|
||||
onTimeout = () => {
|
||||
Logger.error('Timeout Connecting.')
|
||||
resolve(false);
|
||||
}
|
||||
tempClient.once('connect', onConnect)
|
||||
tempClient.once('error', onError)
|
||||
tempClient.once('connectTimeout', onTimeout)
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
module.exports = new LdapAuth()
|
||||
Loading…
Add table
Add a link
Reference in a new issue