You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CoreID/app/ldap/middleware/BindUser.middleware.js

34 lines
967 B

const LDAPMiddleware = require('./LDAPMiddleware')
const LDAP = require('ldapjs')
class BindUserMiddleware extends LDAPMiddleware {
static get services() {
return [...super.services, 'canon', 'output', 'ldap_server']
}
async test(req, res, next) {
const bind_dn = req.connection.ldap.bindDN
if ( bind_dn.equals(this.ldap_server.anonymous()) ) {
this.output.warn(`Blocked anonymous LDAP request on user-protected route.`)
return next(new LDAP.InsufficientAccessRightsError())
}
const user = await this.user_controller().get_resource_from_dn(bind_dn)
if ( !user || !user.can('ldap:bind') ) {
return next(new LDAP.InvalidCredentialsError())
}
req.user = user
req.bindDN = bind_dn
return next()
}
user_controller() {
return this.canon.get('ldap_controller::Users')
}
}
module.exports = exports = BindUserMiddleware