mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-01-21 06:52:59 +01:00
change some socket calls to use the callback, when user changes their email if they are using a gravatar picture it will be updated too, fixed email updating
This commit is contained in:
125
src/user.js
125
src/user.js
@@ -185,9 +185,10 @@ var utils = require('./../public/src/utils.js'),
|
||||
});
|
||||
}
|
||||
|
||||
User.updateProfile = function(socket, uid, data) {
|
||||
User.updateProfile = function(uid, data, callback) {
|
||||
|
||||
var fields = ['email', 'fullname', 'website', 'location', 'birthday', 'signature'];
|
||||
var returnData = {success:false};
|
||||
|
||||
function isSignatureValid(next) {
|
||||
if(data['signature'] !== undefined && data['signature'].length > 150) {
|
||||
@@ -198,61 +199,69 @@ var utils = require('./../public/src/utils.js'),
|
||||
}
|
||||
|
||||
function isEmailAvailable(next) {
|
||||
if(data['email'] !== undefined) {
|
||||
User.getUserField(uid, 'email', function(email) {
|
||||
if(email !== data['email']) {
|
||||
User.isEmailAvailable(data['email'], function(available) {
|
||||
if(!available) {
|
||||
next({error:'Email not available!'}, false);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
next(null, true);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
next(null, true);
|
||||
if(!data['email']) {
|
||||
return next(null, true);
|
||||
}
|
||||
|
||||
User.getUserField(uid, 'email', function(email) {
|
||||
if(email !== data['email']) {
|
||||
User.isEmailAvailable(data['email'], function(available) {
|
||||
if(!available) {
|
||||
next({error:'Email not available!'}, false);
|
||||
} else {
|
||||
next(null, true);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
next(null, true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async.series([isSignatureValid, isEmailAvailable], function(err, results) {
|
||||
if(err) {
|
||||
socket.emit('event:alert', {
|
||||
title: 'Error',
|
||||
message: err.error,
|
||||
type: 'error',
|
||||
timeout: 2000
|
||||
});
|
||||
console.log(err);
|
||||
callback(returnData);
|
||||
} else {
|
||||
updateFields();
|
||||
async.each(fields, updateField, function(err) {
|
||||
if(err) {
|
||||
console.log(err);
|
||||
callback(returnData);
|
||||
} else {
|
||||
returnData.success = true;
|
||||
callback(returnData);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
function updateFields() {
|
||||
for(var i = 0, key, ii = fields.length; i < ii; ++i) {
|
||||
key = fields[i];
|
||||
function updateField(field, callback) {
|
||||
if(data[field] !== undefined) {
|
||||
if(field === 'email') {
|
||||
var gravatarpicture = User.createGravatarURLFromEmail(data[field]);
|
||||
User.setUserField(uid, 'gravatarpicture', gravatarpicture);
|
||||
User.getUserFields(uid, ['email', 'picture', 'uploadedpicture'], function(userData) {
|
||||
RDB.del('email:' + userData['email'] + ':uid');
|
||||
RDB.set('email:' + data['email'] + ':uid', uid);
|
||||
User.setUserField(uid, field, data[field]);
|
||||
if(userData.picture !== userData.uploadedpicture) {
|
||||
returnData.picture = gravatarpicture;
|
||||
User.setUserField(uid, 'picture', gravatarpicture);
|
||||
}
|
||||
returnData.gravatarpicture = gravatarpicture;
|
||||
callback(null);
|
||||
});
|
||||
return;
|
||||
} else if(field === 'signature') {
|
||||
data[field] = utils.strip_tags(data[field]);
|
||||
}
|
||||
|
||||
if(data[key] !== undefined) {
|
||||
if(key === 'email') {
|
||||
User.setUserField(uid, 'gravatarpicture', User.createGravatarURLFromEmail(data[key]));
|
||||
user.getUserField(uid, 'email', function(email) {
|
||||
RDB.del('email:' + email + ':uid');
|
||||
RDB.set('email:' + data['email'] + ':uid', uid);
|
||||
});
|
||||
} else if(key === 'signature') {
|
||||
data[key] = utils.strip_tags(data[key]);
|
||||
}
|
||||
User.setUserField(uid, field, data[field]);
|
||||
|
||||
User.setUserField(uid, key, data[key]);
|
||||
}
|
||||
callback(null);
|
||||
} else {
|
||||
callback(null);
|
||||
}
|
||||
|
||||
socket.emit('event:alert', {
|
||||
title: 'Success',
|
||||
message: 'Your profile has been updated successfully!',
|
||||
type: 'success',
|
||||
timeout: 2000
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -268,15 +277,9 @@ var utils = require('./../public/src/utils.js'),
|
||||
});
|
||||
}
|
||||
|
||||
User.changePassword = function(socket, uid, data, callback) {
|
||||
User.changePassword = function(uid, data, callback) {
|
||||
if(!utils.isPasswordValid(data.newPassword)) {
|
||||
socket.emit('event:alert', {
|
||||
title: 'Error',
|
||||
message: 'Invalid password!',
|
||||
type: 'error',
|
||||
timeout: 2000
|
||||
});
|
||||
callback(false);
|
||||
callback({err:'Invalid password!'});
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -284,7 +287,7 @@ var utils = require('./../public/src/utils.js'),
|
||||
bcrypt.compare(data.currentPassword, user_password, function(err, res) {
|
||||
if(err) {
|
||||
console.log(err);
|
||||
callback(false);
|
||||
callback({err:'bcrpyt compare error!'});
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -292,22 +295,10 @@ var utils = require('./../public/src/utils.js'),
|
||||
User.hashPassword(data.newPassword, function(hash) {
|
||||
User.setUserField(uid, 'password', hash);
|
||||
|
||||
socket.emit('event:alert', {
|
||||
title: 'Success',
|
||||
message: 'Your password is updated!',
|
||||
type: 'success',
|
||||
timeout: 2000
|
||||
});
|
||||
callback(true);
|
||||
callback({err:null});
|
||||
});
|
||||
} else {
|
||||
socket.emit('event:alert', {
|
||||
title: 'Warning',
|
||||
message: 'Your current password is not correct!',
|
||||
type: 'warning',
|
||||
timeout: 2000
|
||||
});
|
||||
callback(false);
|
||||
callback({err:'Your current password is not correct!'});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -247,19 +247,15 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }),
|
||||
socket.emit('api:user.isOnline', isUserOnline(uid));
|
||||
});
|
||||
|
||||
socket.on('api:user.changePassword', function(data) {
|
||||
user.changePassword(socket, uid, data, function(success) {
|
||||
if(success) {
|
||||
socket.emit('api:user.changePassword');
|
||||
}
|
||||
});
|
||||
socket.on('api:user.changePassword', function(data, callback) {
|
||||
user.changePassword(uid, data, callback);
|
||||
});
|
||||
|
||||
socket.on('api:user.updateProfile', function(data) {
|
||||
user.updateProfile(socket, uid, data);
|
||||
socket.on('api:user.updateProfile', function(data, callback) {
|
||||
user.updateProfile(uid, data, callback);
|
||||
});
|
||||
|
||||
socket.on('api:user.changePicture', function(data) {
|
||||
socket.on('api:user.changePicture', function(data, callback) {
|
||||
|
||||
var type = data.type;
|
||||
|
||||
@@ -267,71 +263,43 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }),
|
||||
user.getUserFields(uid, ['picture'], function(fields) {
|
||||
fields.uid = uid;
|
||||
socket.emit('api:updateHeader', fields);
|
||||
callback(true);
|
||||
});
|
||||
}
|
||||
|
||||
if(type === 'gravatar') {
|
||||
if(type === 'gravatar') {
|
||||
user.getUserField(uid, 'gravatarpicture', function(gravatar) {
|
||||
user.setUserField(uid, 'picture', gravatar);
|
||||
updateHeader();
|
||||
});
|
||||
}
|
||||
else if(type === 'uploaded') {
|
||||
} else if(type === 'uploaded') {
|
||||
user.getUserField(uid, 'uploadedpicture', function(uploadedpicture) {
|
||||
user.setUserField(uid, 'picture', uploadedpicture);
|
||||
updateHeader();
|
||||
});
|
||||
} else {
|
||||
callback(false);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
socket.on('api:user.follow', function(data) {
|
||||
socket.on('api:user.follow', function(data, callback) {
|
||||
if(uid) {
|
||||
user.follow(uid, data.uid, function(success) {
|
||||
if(success) {
|
||||
user.getUserField(data.uid, 'username', function(username) {
|
||||
socket.emit('event:alert', {
|
||||
title: 'Following',
|
||||
message: 'You are now following ' + username + '!',
|
||||
type: 'success',
|
||||
timeout: 2000
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
user.follow(uid, data.uid, callback);
|
||||
}
|
||||
});
|
||||
|
||||
socket.on('api:user.unfollow', function(data) {
|
||||
socket.on('api:user.unfollow', function(data, callback) {
|
||||
if(uid) {
|
||||
user.unfollow(uid, data.uid, function(success) {
|
||||
if(success) {
|
||||
user.getUserField(data.uid, 'username', function(username) {
|
||||
socket.emit('event:alert', {
|
||||
title: 'Unfollowed',
|
||||
message: 'You are no longer following ' + username + '!',
|
||||
type: 'success',
|
||||
timeout: 2000
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
user.unfollow(uid, data.uid, callback);
|
||||
}
|
||||
});
|
||||
|
||||
socket.on('api:user.saveSettings', function(data) {
|
||||
socket.on('api:user.saveSettings', function(data, callback) {
|
||||
if(uid) {
|
||||
user.setUserFields(uid, {
|
||||
showemail:data.showemail
|
||||
});
|
||||
|
||||
socket.emit('event:alert', {
|
||||
title: 'Saved',
|
||||
message: 'Settings saved!',
|
||||
type: 'success',
|
||||
timeout: 2000
|
||||
});
|
||||
callback(true);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -339,15 +307,12 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }),
|
||||
topics.post(socket, uid, data.title, data.content, data.category_id, data.images);
|
||||
});
|
||||
|
||||
socket.on('api:topics.markAllRead', function(data) {
|
||||
socket.on('api:topics.markAllRead', function(data, callback) {
|
||||
topics.markAllRead(uid, function(err, success) {
|
||||
if(!err && success) {
|
||||
socket.emit('event:alert', {
|
||||
title: 'Success',
|
||||
message: 'All topics marked as read!',
|
||||
type: 'success',
|
||||
timeout: 2000
|
||||
});
|
||||
callback(true);
|
||||
} else {
|
||||
callback(false);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user