|
|
@@ -158,13 +158,7 @@ class PassportService {
|
|
|
const opts = {
|
|
|
usernameField: PassportService.USERNAME_FIELD,
|
|
|
passwordField: PassportService.PASSWORD_FIELD,
|
|
|
- server: {
|
|
|
- url,
|
|
|
- bindDN,
|
|
|
- bindCredentials,
|
|
|
- searchBase,
|
|
|
- searchFilter,
|
|
|
- }
|
|
|
+ server: { url, bindDN, bindCredentials, searchBase, searchFilter }
|
|
|
};
|
|
|
debug('ldap configuration: ', opts);
|
|
|
callback(null, opts);
|
|
|
@@ -172,9 +166,16 @@ class PassportService {
|
|
|
};
|
|
|
|
|
|
passport.use(new LdapStrategy(getLDAPConfiguration,
|
|
|
- (user, done) => {
|
|
|
- debug("LDAP authentication has successed");
|
|
|
- return done(null, user);
|
|
|
+ (ldapUserInfo, done) => {
|
|
|
+ debug("LDAP authentication has successed", ldapUserInfo);
|
|
|
+
|
|
|
+ this.findOrRegisterUserByLdapInfo(ldapUserInfo)
|
|
|
+ .then((user) => {
|
|
|
+ done(null, user);
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ done(null, false, { message: err });
|
|
|
+ });
|
|
|
}
|
|
|
));
|
|
|
|
|
|
@@ -182,6 +183,23 @@ class PassportService {
|
|
|
debug('LdapStrategy: setup is done');
|
|
|
}
|
|
|
|
|
|
+ findOrRegisterUserByLdapInfo(ldapUserInfo) {
|
|
|
+ const User = this.crowi.model('User');
|
|
|
+ const username = ldapUserInfo['uid'];
|
|
|
+
|
|
|
+ return User.findUserByUsername(username)
|
|
|
+ .then((user) => {
|
|
|
+ if (user != null) {
|
|
|
+ debug(`LdapStrategy: username ${username} is found `, user);
|
|
|
+ return user;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ debug(`LdapStrategy: username ${username} is not found, it is going to be registered.`);
|
|
|
+ return User.createUser('', username, undefined, undefined, undefined);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* setup serializer and deserializer
|
|
|
*
|