From 46c7b7e89fc569bf7acf408dd260f188996fb33a Mon Sep 17 00:00:00 2001 From: pierre-lehnen-rc <55164754+pierre-lehnen-rc@users.noreply.github.com> Date: Fri, 21 Jan 2022 21:14:43 -0300 Subject: [PATCH] [FIX] Errors on advanced sync prevent LDAP users from logging in (#23958) Co-authored-by: Leonardo Ostjen Couto --- app/models/server/models/Rooms.js | 2 +- ee/server/lib/ldap/Manager.ts | 46 +++++++++++++++++++------------ 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/app/models/server/models/Rooms.js b/app/models/server/models/Rooms.js index 2e335f1a3d4..64cc36b9ba0 100644 --- a/app/models/server/models/Rooms.js +++ b/app/models/server/models/Rooms.js @@ -375,7 +375,7 @@ export class Rooms extends Base { let channelName = s.trim(name); try { // TODO evaluate if this function call should be here - const { getValidRoomName } = import('../../../utils/lib/getValidRoomName'); + const { getValidRoomName } = Promise.await(import('../../../utils/lib/getValidRoomName')); channelName = getValidRoomName(channelName, null, { allowDuplicates: true }); } catch (e) { console.error(e); diff --git a/ee/server/lib/ldap/Manager.ts b/ee/server/lib/ldap/Manager.ts index ba03ad3485e..e47513a094a 100644 --- a/ee/server/lib/ldap/Manager.ts +++ b/ee/server/lib/ldap/Manager.ts @@ -114,9 +114,14 @@ export class LDAPEEManager extends LDAPManager { } public static async advancedSyncForUser(ldap: LDAPConnection, user: IUser, isNewRecord: boolean, dn: string): Promise { - await this.syncUserRoles(ldap, user, dn); - await this.syncUserChannels(ldap, user, dn); - await this.syncUserTeams(ldap, user, dn, isNewRecord); + try { + await this.syncUserRoles(ldap, user, dn); + await this.syncUserChannels(ldap, user, dn); + await this.syncUserTeams(ldap, user, dn, isNewRecord); + } catch (e) { + logger.debug(`Advanced Sync failed for user: ${dn}`); + logger.error(e); + } } private static async advancedSync( @@ -312,23 +317,28 @@ export class LDAPEEManager extends LDAPManager { const channels: Array = [].concat(fieldMap[ldapField]); for await (const channel of channels) { - const room: IRoom | undefined = Rooms.findOneByNonValidatedName(channel) || this.createRoomForSync(channel); - if (!room) { - return; - } - - if (isUserInGroup) { - if (room.teamMain) { - logger.error(`Can't add user to channel ${channel} because it is a team.`); - } else { - addUserToRoom(room._id, user); - logger.debug(`Synced user channel ${room._id} from LDAP for ${username}`); + try { + const room: IRoom | undefined = Rooms.findOneByNonValidatedName(channel) || this.createRoomForSync(channel); + if (!room) { + return; } - } else if (syncUserChannelsRemove && !room.teamMain) { - const subscription = await SubscriptionsRaw.findOneByRoomIdAndUserId(room._id, user._id); - if (subscription) { - removeUserFromRoom(room._id, user); + + if (isUserInGroup) { + if (room.teamMain) { + logger.error(`Can't add user to channel ${channel} because it is a team.`); + } else { + addUserToRoom(room._id, user); + logger.debug(`Synced user channel ${room._id} from LDAP for ${username}`); + } + } else if (syncUserChannelsRemove && !room.teamMain) { + const subscription = await SubscriptionsRaw.findOneByRoomIdAndUserId(room._id, user._id); + if (subscription) { + removeUserFromRoom(room._id, user); + } } + } catch (e) { + logger.debug(`Failed to sync user room, user = ${username}, channel = ${channel}`); + logger.error(e); } } }