From 58a0c20ade2ff37a85aa8ef57f5e6fb4396cb124 Mon Sep 17 00:00:00 2001 From: pierre-lehnen-rc <55164754+pierre-lehnen-rc@users.noreply.github.com> Date: Fri, 18 Sep 2020 19:39:52 -0300 Subject: [PATCH] [FIX] Errors in LDAP avatar sync preventing login (#18948) --- app/ldap/server/sync.js | 62 +++++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 27 deletions(-) diff --git a/app/ldap/server/sync.js b/app/ldap/server/sync.js index c11d9ed7336..7d6dc753fa4 100644 --- a/app/ldap/server/sync.js +++ b/app/ldap/server/sync.js @@ -337,6 +337,40 @@ export function mapLDAPGroupsToChannels(ldap, ldapUser, user) { return userChannels; } +function syncUserAvatar(user, ldapUser) { + if (!user?._id || settings.get('LDAP_Sync_User_Avatar') !== true) { + return; + } + + const avatarField = (settings.get('LDAP_Avatar_Field') || 'thumbnailPhoto').trim(); + const avatar = ldapUser._raw[avatarField] || ldapUser._raw.thumbnailPhoto || ldapUser._raw.jpegPhoto; + if (!avatar) { + return; + } + + logger.info('Syncing user avatar'); + + Meteor.defer(() => { + const rs = RocketChatFile.bufferToStream(avatar); + const fileStore = FileUpload.getStore('Avatars'); + fileStore.deleteByName(user.username); + + const file = { + userId: user._id, + type: 'image/jpeg', + }; + + Meteor.runAsUser(user._id, () => { + fileStore.insert(file, rs, (err, result) => { + Meteor.setTimeout(function() { + Users.setAvatarData(user._id, 'ldap', result.etag); + Notifications.notifyLogged('updateAvatar', { username: user.username, etag: result.etag }); + }, 500); + }); + }); + }); +} + export function syncUserData(user, ldapUser, ldap) { logger.info('Syncing user data'); logger.debug('user', { email: user.email, _id: user._id }); @@ -397,33 +431,7 @@ export function syncUserData(user, ldapUser, ldap) { } } - const avatarField = (settings.get('LDAP_Avatar_Field') || 'thumbnailPhoto').trim(); - - if (user && user._id && settings.get('LDAP_Sync_User_Avatar') === true) { - const avatar = ldapUser._raw[avatarField] || ldapUser._raw.thumbnailPhoto || ldapUser._raw.jpegPhoto; - - if (avatar) { - logger.info('Syncing user avatar'); - - const rs = RocketChatFile.bufferToStream(avatar); - const fileStore = FileUpload.getStore('Avatars'); - fileStore.deleteByName(user.username); - - const file = { - userId: user._id, - type: 'image/jpeg', - }; - - Meteor.runAsUser(user._id, () => { - fileStore.insert(file, rs, (err, result) => { - Meteor.setTimeout(function() { - Users.setAvatarData(user._id, 'ldap', result.etag); - Notifications.notifyLogged('updateAvatar', { username: user.username, etag: result.etag }); - }, 500); - }); - }); - } - } + syncUserAvatar(user, ldapUser); } export function addLdapUser(ldapUser, username, password, ldap) { -- GitLab