in resources/oidc-provider/account/ldap_auth/index.js [62:127]
async findAccount(ctx, id) {
Log.debug(`ldapaccount: about to find user ${id} in ldap ${this.tenantconfig.ldapurl}`, ctx)
return Promise.resolve()
.then(() => new Promise(async (resolve, reject) => {
const client = ldap.createClient({
url: this.tenantconfig.ldapurl
})
const opts = {
filter: `(&(cn=${id})(objectClass=user))`,
scope: 'sub'
}
const tenantLdapUserPassword = await getSecret(this.tenantconfig.ldapuserpassword)
Log.debug(`ldapaccount: going to bind with user:${this.tenantconfig.ldapuser} and password:${tenantLdapUserPassword}`)
client.bind(this.tenantconfig.ldapuser, tenantLdapUserPassword, err => {
if (err) {
Log.error(err.message)
client.unbind(error => { if (error) { Log.debug(error.message) } else { Log.debug('ldap client disconnected') } reject(err) })
} else {
Log.debug("Bind successfull, going to search now")
var user
client.search(this.tenantconfig.ldapsuffix, opts, (err, res) => {
res.on('searchEntry', entry => {
user = entry.object
Log.debug('ldap user found', entry.object)
})
res.on('searchReference', referral => {
Log.debug('ldap referral: ' + referral.uris.join());
});
res.on('error', err => {
Log.error('ldap error: ' + err.message);
reject(err)
});
res.on('end', result => {
Log.debug('ldap search ended: ',result);
resolve([{ "Name":"sub","Value": user.sAMAccountName },{"Name":"email","Value": user.sAMAccountName+'@'+this.tenantconfig.domain},{"Name":"tenantid","Value":this.tenantconfig.tenant_id}])
});
})
}
})
}))
.then(data => {
// Return the value of Cognito's UserAttributes as climes.
const claims = async (use, scope, claims, rejected) => {
Log.debug(`ldapaccount: claims was called with use: ${use}, scope: ${scope}, claims: ${claims}, rejected: ${rejected}, data: ${data}`)
const clms = data.reduce((acc, current) => {
acc[current.Name] = current.Value
return acc
}, {})
clms.tenantid=this.tenantconfig.tenant_id
Log.debug('ldapaccount: claims will return!', clms)
return clms
}
return new LDAPAccount(id, claims, this.tenantconfig.ldapurl, this.tenantconfig.ldapsuffix, this.tenantconfig.domain, this.tenantconfig.tenant_id)
})
}