From 06d966cd8bf049b9c6abbbd088dc93b09e341fe0 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento <rodrigoknascimento@gmail.com> Date: Tue, 2 May 2017 10:09:02 -0300 Subject: [PATCH] Remove RocketChatFileAvatarInstance --- packages/rocketchat-ldap/server/sync.js | 16 ++++++--- .../server/functions/setUsername.coffee | 10 ++---- server/startup/avatar.js | 34 ------------------- server/startup/migrations/v002.js | 14 +++++--- 4 files changed, 23 insertions(+), 51 deletions(-) diff --git a/packages/rocketchat-ldap/server/sync.js b/packages/rocketchat-ldap/server/sync.js index df3ec4bf828..cdac0c76917 100644 --- a/packages/rocketchat-ldap/server/sync.js +++ b/packages/rocketchat-ldap/server/sync.js @@ -143,16 +143,22 @@ syncUserData = function syncUserData(user, ldapUser) { const avatar = ldapUser.raw.thumbnailPhoto || ldapUser.raw.jpegPhoto; if (avatar) { logger.info('Syncing user avatar'); + const rs = RocketChatFile.bufferToStream(avatar); - RocketChatFileAvatarInstance.deleteFile(encodeURIComponent(`${ user.username }.jpg`)); - const ws = RocketChatFileAvatarInstance.createWriteStream(encodeURIComponent(`${ user.username }.jpg`), 'image/jpeg'); - ws.on('end', Meteor.bindEnvironment(function() { + const fileStore = FileUpload.getStore('Avatars'); + fileStore.deleteByName(user.username); + + const file = { + userId: user._id, + type: 'image/jpeg' + }; + + fileStore.insert(file, rs, () => { Meteor.setTimeout(function() { RocketChat.models.Users.setAvatarOrigin(user._id, 'ldap'); RocketChat.Notifications.notifyLogged('updateAvatar', {username: user.username}); }, 500); - })); - rs.pipe(ws); + }); } } }; diff --git a/packages/rocketchat-lib/server/functions/setUsername.coffee b/packages/rocketchat-lib/server/functions/setUsername.coffee index a3afa4a49e9..f07e6327538 100644 --- a/packages/rocketchat-lib/server/functions/setUsername.coffee +++ b/packages/rocketchat-lib/server/functions/setUsername.coffee @@ -61,13 +61,9 @@ RocketChat._setUsername = (userId, username) -> RocketChat.models.Subscriptions.setUserUsernameByUserId user._id, username RocketChat.models.Subscriptions.setNameForDirectRoomsWithOldName previousUsername, username - rs = RocketChatFileAvatarInstance.getFileWithReadStream(encodeURIComponent("#{previousUsername}.jpg")) - if rs? - RocketChatFileAvatarInstance.deleteFile encodeURIComponent("#{username}.jpg") - ws = RocketChatFileAvatarInstance.createWriteStream encodeURIComponent("#{username}.jpg"), rs.contentType - ws.on 'end', Meteor.bindEnvironment -> - RocketChatFileAvatarInstance.deleteFile encodeURIComponent("#{previousUsername}.jpg") - rs.readStream.pipe(ws) + fileStore = FileUpload.getStore('Avatars') + file = fileStore.model.findOneByName(previousUsername) + fileStore.model.updateFileNameById(file._id, username) # Set new username RocketChat.models.Users.setUsername user._id, username diff --git a/server/startup/avatar.js b/server/startup/avatar.js index ae69381aff5..0fa118f685e 100644 --- a/server/startup/avatar.js +++ b/server/startup/avatar.js @@ -1,39 +1,5 @@ /* globals FileUpload */ Meteor.startup(function() { - let storeType = 'GridFS'; - - if (RocketChat.settings.get('Accounts_AvatarStoreType')) { - storeType = RocketChat.settings.get('Accounts_AvatarStoreType'); - } - - const RocketChatStore = RocketChatFile[storeType]; - - if (!RocketChatStore) { - throw new Error(`Invalid RocketChatStore type [${ storeType }]`); - } - - console.log((`Using ${ storeType } for Avatar storage`).green); - - function transformWrite(file, readStream, writeStream) { - if (RocketChatFile.enabled === false || RocketChat.settings.get('Accounts_AvatarResize') !== true) { - return readStream.pipe(writeStream); - } - const height = RocketChat.settings.get('Accounts_AvatarSize'); - const width = height; - return RocketChatFile.gm(readStream, file.fileName).background('#ffffff').resize(width, `${ height }^`).gravity('Center').crop(width, height).extent(width, height).stream('jpeg').pipe(writeStream); - } - - let path = '~/uploads'; - if (RocketChat.settings.get('Accounts_AvatarStorePath') && RocketChat.settings.get('Accounts_AvatarStorePath').trim() !== '') { - path = RocketChat.settings.get('Accounts_AvatarStorePath'); - } - - this.RocketChatFileAvatarInstance = new RocketChatStore({ - name: 'avatars', - absolutePath: path, - transformWrite - }); - WebApp.connectHandlers.use('/avatar/', Meteor.bindEnvironment(function(req, res/*, next*/) { const params = { username: decodeURIComponent(req.url.replace(/^\//, '').replace(/\?.*$/, '')) diff --git a/server/startup/migrations/v002.js b/server/startup/migrations/v002.js index ad2d589a3cb..e67336ed640 100644 --- a/server/startup/migrations/v002.js +++ b/server/startup/migrations/v002.js @@ -26,13 +26,17 @@ RocketChat.Migrations.add({ const {image, contentType} = RocketChatFile.dataURIParse(dataURI); const rs = RocketChatFile.bufferToStream(new Buffer(image, 'base64')); - const ws = RocketChatFileAvatarInstance.createWriteStream(`${ user.username }.jpg`, contentType); + const fileStore = FileUpload.getStore('Avatars'); + fileStore.deleteByName(user.username); - ws.on('end', Meteor.bindEnvironment(function() { - return RocketChat.models.Users.setAvatarOrigin(user._id, service); - })); + const file = { + userId: user._id, + type: contentType + }; - return rs.pipe(ws); + fileStore.insert(file, rs, () => { + return RocketChat.models.Users.setAvatarOrigin(user._id, service); + }); }); } }); -- GitLab