|
|
|
@ -41,28 +41,38 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) { |
|
|
|
|
let ldapUser; |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
ldap.connectSync(); |
|
|
|
|
const users = ldap.searchUsersSync(loginRequest.username); |
|
|
|
|
|
|
|
|
|
if (users.length !== 1) { |
|
|
|
|
log_info('Search returned', users.length, 'record(s) for', loginRequest.username); |
|
|
|
|
throw new Error('User not Found'); |
|
|
|
|
} |
|
|
|
|
ldap.connectSync(); |
|
|
|
|
|
|
|
|
|
if (!!LDAP.settings_get('LDAP_USER_AUTHENTICATION')) { |
|
|
|
|
ldap.bindUserIfNecessary(loginRequest.username, loginRequest.ldapPass); |
|
|
|
|
ldapUser = ldap.searchUsersSync(loginRequest.username)[0]; |
|
|
|
|
} else { |
|
|
|
|
|
|
|
|
|
const users = ldap.searchUsersSync(loginRequest.username); |
|
|
|
|
|
|
|
|
|
if (users.length !== 1) { |
|
|
|
|
log_info('Search returned', users.length, 'record(s) for', loginRequest.username); |
|
|
|
|
throw new Error('User not Found'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (ldap.authSync(users[0].dn, loginRequest.ldapPass) === true) { |
|
|
|
|
if (ldap.isUserInGroup(loginRequest.username, users[0])) { |
|
|
|
|
ldapUser = users[0]; |
|
|
|
|
} else { |
|
|
|
|
throw new Error('User not in a valid group'); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
log_info('Wrong password for', loginRequest.username); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ldap.authSync(users[0].dn, loginRequest.ldapPass) === true) { |
|
|
|
|
if (ldap.isUserInGroup(loginRequest.username, users[0])) { |
|
|
|
|
ldapUser = users[0]; |
|
|
|
|
} else { |
|
|
|
|
throw new Error('User not in a valid group'); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
log_info('Wrong password for', loginRequest.username); |
|
|
|
|
} |
|
|
|
|
} catch (error) { |
|
|
|
|
log_error(error); |
|
|
|
|
log_error(error); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (ldapUser === undefined) { |
|
|
|
|
if (!ldapUser) { |
|
|
|
|
if (LDAP.settings_get('LDAP_LOGIN_FALLBACK') === true) { |
|
|
|
|
return fallbackDefaultAccountSystem(self, loginRequest.username, loginRequest.ldapPass); |
|
|
|
|
} |
|
|
|
@ -76,8 +86,7 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) { |
|
|
|
|
|
|
|
|
|
const Unique_Identifier_Field = getLdapUserUniqueID(ldapUser); |
|
|
|
|
let user; |
|
|
|
|
|
|
|
|
|
// Attempt to find user by unique identifier
|
|
|
|
|
// Attempt to find user by unique identifier
|
|
|
|
|
|
|
|
|
|
if (Unique_Identifier_Field) { |
|
|
|
|
userQuery = { |
|
|
|
@ -88,14 +97,14 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) { |
|
|
|
|
log_debug('userQuery', userQuery); |
|
|
|
|
|
|
|
|
|
user = Meteor.users.findOne(userQuery); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Attempt to find user by username
|
|
|
|
|
|
|
|
|
|
let username; |
|
|
|
|
let email; |
|
|
|
|
|
|
|
|
|
if (LDAP.settings_get('LDAP_USERNAME_FIELD') !== '') { |
|
|
|
|
if (LDAP.settings_get('LDAP_USERNAME_FIELD') !== '') { |
|
|
|
|
username = slug(getLdapUsername(ldapUser)); |
|
|
|
|
} else { |
|
|
|
|
username = slug(loginRequest.username); |
|
|
|
@ -105,6 +114,7 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) { |
|
|
|
|
email = getLdapEmail(ldapUser); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!user) { |
|
|
|
|
if(email && LDAP.settings_get('LDAP_EMAIL_MATCH_REQUIRE') === true) { |
|
|
|
|
if(LDAP.settings_get('LDAP_EMAIL_MATCH_VERIFIED') === true) { |
|
|
|
|