Skip to content

Commit 9610f17

Browse files
committed
#267 get all groups for ms-ad
1 parent 48601fa commit 9610f17

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

lib/passport-configurator.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ PassportConfigurator.prototype.buildUserLdapProfile = function(user, options) {
142142
}
143143

144144
// support groupSearch results
145-
if (ldapAttrName === '_groups') {
145+
if (ldapAttrName === '_groups' || ldapAttrName === 'memberOf') {
146146
profile[profileAttrName] = [].concat(user[ldapAttrName]);
147147
} else {
148148
profile[profileAttrName] = [].concat(user[ldapAttrName])[0];

test/passport-configurator.test.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,55 @@ describe('PassportConfigurator', function() {
147147
done();
148148
});
149149

150+
it('supports user ldap profile configuration with group search for microsoft active directory',
151+
function(done) {
152+
var providerConfig = {
153+
ldap: {
154+
provider: 'ldap',
155+
authScheme: 'ldap',
156+
module: 'passport-ldapauth',
157+
authPath: '/auth/ldap',
158+
successRedirect: '/auth/account',
159+
failureRedirect: '/ldap',
160+
session: true,
161+
failureFlash: true,
162+
profileAttributesFromLDAP: {
163+
login: 'uid',
164+
username: 'uid',
165+
displayName: 'displayName',
166+
email: 'mail',
167+
externalId: 'uid',
168+
id: 'uid',
169+
groups: 'memberOf',
170+
},
171+
},
172+
};
173+
174+
/* user's ldap attributes */
175+
var userFromLdap = {
176+
uid: 'john-doe-uid',
177+
displayName: 'John Doe',
178+
179+
memberOf: [
180+
{dn: 'cn=PortalAdmins,o=greenwell', controls: []},
181+
{dn: 'cn=ConnectionsAdmins,o=greenwell', controls: []},
182+
],
183+
};
184+
var profile = passportConfigurator.buildUserLdapProfile(userFromLdap, providerConfig.ldap);
185+
186+
assert.equal(profile.login, userFromLdap.uid, '"login" should take value of "uid"');
187+
assert.equal(profile.username, userFromLdap.uid, '"username" should take value of "uid"');
188+
assert.equal(profile.displayName, userFromLdap.displayName,
189+
'"displayName" should take value of "displayName"');
190+
assert.equal(profile.email, userFromLdap.mail, '"email" should take value of "mail"');
191+
assert.deepEqual(profile.emails, [{value: userFromLdap.mail}],
192+
'"emails" should be computed from "mail"');
193+
assert.equal(profile.externalId, userFromLdap.uid, '"externalId" should take value of "uid"');
194+
assert.deepEqual(profile.groups, userFromLdap.memberOf,
195+
'"groups" should be computed from "memberOf"');
196+
done();
197+
});
198+
150199
function setupModels() {
151200
var ds = loopback.createDataSource({
152201
connector: 'memory',

0 commit comments

Comments
 (0)