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