async authenticate()

in resources/oidc-provider/account/ldap_auth/index.js [18:60]


  async authenticate(email, password) {
    Log.debug('authenticate from oidc/account/cognito just got invoked!')
    return Promise.resolve()
      .then(() => new Promise((resolve, reject) => {

        const client = ldap.createClient({
          url: this.tenantconfig.ldapurl
        })

        const opts = {
          filter: `(&(cn=${email.split('@')[0]})(objectClass=user))`,
          scope: 'sub'
        }

        client.bind(email, password, err => {
          if (err) {
            Log.debug(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({sub:user.sAMAccountName ,raw:user})
              });
            })
          }
        })
      }))
  }