🎨 change gravatar file design (#7553)

no issue
- preperation for User model refactoring
- the rule is:
  --> when calling a unit, this unit should return something new
  --> and NOT modifying an existing object and return it (this is an unexpected behaviour, especially for utils and libs)
This commit is contained in:
Katharina Irrgang 2016-10-13 14:52:22 +02:00 committed by Hannah Wolfe
parent da9c6be06c
commit 5b9c213849
3 changed files with 28 additions and 18 deletions

View File

@ -407,9 +407,12 @@ User = ghostBookshelf.Model.extend({
return generatePasswordHash(userData.password).then(function then(hash) {
// Assign the hashed password
userData.password = hash;
// LookupGravatar
return gravatar.lookup(userData);
}).then(function then(userData) {
}).then(function then(response) {
if (response && response.image) {
userData.image = response.image;
}
// Save the user with the hashed password
return ghostBookshelf.Model.add.call(self, userData, options);
}).then(function then(addedUser) {
@ -451,14 +454,16 @@ User = ghostBookshelf.Model.extend({
// Assign the hashed password
userData.password = hash;
return Promise.join(
gravatar.lookup(userData),
ghostBookshelf.Model.generateSlug.call(this, User, userData.name, options)
);
}).then(function then(results) {
userData = results[0];
userData.slug = results[1];
return gravatar.lookup(userData)
.then(function (response) {
if (response && response.image) {
userData.image = response.image;
}
return ghostBookshelf.Model.generateSlug.call(this, User, userData.name, options);
});
}).then(function then(slug) {
userData.slug = slug;
return self.edit.call(self, userData, options);
});
},

View File

@ -6,37 +6,44 @@ var Promise = require('bluebird'),
module.exports.lookup = function lookup(userData, timeout) {
var gravatarUrl = '//www.gravatar.com/avatar/' +
crypto.createHash('md5').update(userData.email.toLowerCase().trim()).digest('hex') +
'?s=250';
'?s=250', image;
return new Promise(function gravatarRequest(resolve) {
/**
* @TODO:
* - mock gravatar in test env globally, do not check for test env!
* - in test/utils/index.js -> mocks.gravatar.enable();
*/
if (config.isPrivacyDisabled('useGravatar') || config.get('env').indexOf('testing') > -1) {
return resolve(userData);
return resolve();
}
var request, timer, timerEnded = false;
request = https.get('https:' + gravatarUrl + '&d=404&r=x', function (response) {
clearTimeout(timer);
if (response.statusCode !== 404 && !timerEnded) {
gravatarUrl += '&d=mm&r=x';
userData.image = gravatarUrl;
image = gravatarUrl;
}
resolve(userData);
resolve({image: image});
});
request.on('error', function () {
clearTimeout(timer);
// just resolve with no image url
if (!timerEnded) {
return resolve(userData);
return resolve();
}
});
timer = setTimeout(function () {
timerEnded = true;
request.abort();
return resolve(userData);
return resolve();
}, timeout || 2000);
});
};

View File

@ -410,9 +410,7 @@ describe('Server Utilities', function () {
.reply(200);
gravatar.lookup({email: 'exists@example.com'}, 10).then(function (result) {
should.exist(result);
should.not.exist(result.image);
should.not.exist(result);
done();
}).catch(done);
});