From 9787e6c3df57217c39d1b6e1ebe10f4a61dbd5e9 Mon Sep 17 00:00:00 2001
From: barisusakli <barisusakli@gmail.com>
Date: Mon, 14 Sep 2015 13:36:02 -0400
Subject: [PATCH] dont download images to local, pass to upload plugin

---
 src/user/picture.js | 47 +++++++++++++++------------------------------
 1 file changed, 15 insertions(+), 32 deletions(-)

diff --git a/src/user/picture.js b/src/user/picture.js
index 68b3d90431..2a934bfc7e 100644
--- a/src/user/picture.js
+++ b/src/user/picture.js
@@ -90,28 +90,10 @@ module.exports = function(User) {
 	};
 
 	User.uploadFromUrl = function(uid, url, callback) {
-		var extension = url.substring(url.lastIndexOf('.') + 1);
-		if (['png', 'jpeg', 'jpg', 'gif'].indexOf(extension) == -1) {
-			return callback('[[error:invalid-image-extension]]');
+		if (!plugins.hasListeners('filter:uploadImage')) {
+			return callback(new Error('[[error:no-plugin]]'));
 		}
-		var filename = 'uid_' + uid + '_tmp-image.' + extension;
-		downloadFromUrl(url, filename, function(err, downloadedImage) {
-			if (err) {
-				return callback(err);
-			}
-
-			User.uploadPicture(uid, downloadedImage, function(err, image) {
-				fs.unlink(filename, function(err) {
-					if (err) {
-						winston.error(err);
-					}
-				});
-				callback(err, image);
-			});
-		});
-	};
 
-	function downloadFromUrl(url, filename, callback) {
 		request.head(url, function(err, res, body) {
 			if (err) {
 				return callback(err);
@@ -121,21 +103,22 @@ module.exports = function(User) {
 			var type = res.headers['content-type'];
 			var extension = mime.extension(type);
 
+			if (['png', 'jpeg', 'jpg', 'gif'].indexOf(extension) === -1) {
+				return callback(new Error('[[error:invalid-image-extension]]'));
+			}
+
 			if (size > uploadSize * 1024) {
 				return callback(new Error('[[error:file-too-big, ' + uploadSize + ']]'));
 			}
 
-			request.get(url)
-				.on('error', function(err) {
-					winston.error(err);
-				})
-				.pipe(fs.createWriteStream(filename))
-				.on('close', function(err) {
-					if (err) {
-						return callback(err);
-					}
-					callback(null, {path: filename, size: size, type: type, name: filename + '.' + extension});
-				});
+			var picture = {url: url, name: ''};
+			plugins.fireHook('filter:uploadImage', {image: picture, uid: uid}, function(err, image) {
+				if (err) {
+					return callback(err);
+				}
+				User.setUserFields(uid, {uploadedpicture: image.url, picture: image.url});
+				callback(null, image);
+			});
 		});
-	}
+	};
 };
\ No newline at end of file