|
|
@ -87,7 +87,9 @@ var utils = require('./../public/src/utils.js'),
|
|
|
|
RDB.incr('usercount', function(err, count) {
|
|
|
|
RDB.incr('usercount', function(err, count) {
|
|
|
|
RDB.handle(err);
|
|
|
|
RDB.handle(err);
|
|
|
|
|
|
|
|
|
|
|
|
if (typeof io !== 'undefined') io.sockets.emit('user.count', {count: count});
|
|
|
|
if (typeof io !== 'undefined') io.sockets.emit('user.count', {
|
|
|
|
|
|
|
|
count: count
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
RDB.zadd('users:joindate', timestamp, uid);
|
|
|
|
RDB.zadd('users:joindate', timestamp, uid);
|
|
|
@ -96,7 +98,10 @@ var utils = require('./../public/src/utils.js'),
|
|
|
|
|
|
|
|
|
|
|
|
userSearch.index(username, uid);
|
|
|
|
userSearch.index(username, uid);
|
|
|
|
|
|
|
|
|
|
|
|
if (typeof io !== 'undefined') io.sockets.emit('user.latest', {userslug: userslug, username: username});
|
|
|
|
if (typeof io !== 'undefined') io.sockets.emit('user.latest', {
|
|
|
|
|
|
|
|
userslug: userslug,
|
|
|
|
|
|
|
|
username: username
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
if (password !== undefined) {
|
|
|
|
if (password !== undefined) {
|
|
|
|
User.hashPassword(password, function(err, hash) {
|
|
|
|
User.hashPassword(password, function(err, hash) {
|
|
|
@ -195,11 +200,15 @@ var utils = require('./../public/src/utils.js'),
|
|
|
|
User.updateProfile = function(uid, data, callback) {
|
|
|
|
User.updateProfile = function(uid, data, callback) {
|
|
|
|
|
|
|
|
|
|
|
|
var fields = ['email', 'fullname', 'website', 'location', 'birthday', 'signature'];
|
|
|
|
var fields = ['email', 'fullname', 'website', 'location', 'birthday', 'signature'];
|
|
|
|
var returnData = {success:false};
|
|
|
|
var returnData = {
|
|
|
|
|
|
|
|
success: false
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
function isSignatureValid(next) {
|
|
|
|
function isSignatureValid(next) {
|
|
|
|
if (data['signature'] !== undefined && data['signature'].length > 150) {
|
|
|
|
if (data['signature'] !== undefined && data['signature'].length > 150) {
|
|
|
|
next({error:'Signature can\'t be longer than 150 characters!'}, false);
|
|
|
|
next({
|
|
|
|
|
|
|
|
error: 'Signature can\'t be longer than 150 characters!'
|
|
|
|
|
|
|
|
}, false);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
next(null, true);
|
|
|
|
next(null, true);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -216,7 +225,9 @@ var utils = require('./../public/src/utils.js'),
|
|
|
|
if (err)
|
|
|
|
if (err)
|
|
|
|
return next(err, null);
|
|
|
|
return next(err, null);
|
|
|
|
if (!available) {
|
|
|
|
if (!available) {
|
|
|
|
next({error:'Email not available!'}, false);
|
|
|
|
next({
|
|
|
|
|
|
|
|
error: 'Email not available!'
|
|
|
|
|
|
|
|
}, false);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
next(null, true);
|
|
|
|
next(null, true);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -283,7 +294,9 @@ var utils = require('./../public/src/utils.js'),
|
|
|
|
|
|
|
|
|
|
|
|
User.changePassword = function(uid, data, callback) {
|
|
|
|
User.changePassword = function(uid, data, callback) {
|
|
|
|
if (!utils.isPasswordValid(data.newPassword)) {
|
|
|
|
if (!utils.isPasswordValid(data.newPassword)) {
|
|
|
|
return callback({error:'Invalid password!'});
|
|
|
|
return callback({
|
|
|
|
|
|
|
|
error: 'Invalid password!'
|
|
|
|
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
User.getUserField(uid, 'password', function(err, user_password) {
|
|
|
|
User.getUserField(uid, 'password', function(err, user_password) {
|
|
|
@ -299,7 +312,9 @@ var utils = require('./../public/src/utils.js'),
|
|
|
|
callback(null);
|
|
|
|
callback(null);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
callback({error:'Your current password is not correct!'});
|
|
|
|
callback({
|
|
|
|
|
|
|
|
error: 'Your current password is not correct!'
|
|
|
|
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
@ -448,8 +463,12 @@ var utils = require('./../public/src/utils.js'),
|
|
|
|
if (meta.config['email:host'] && meta.config['email:port'] && meta.config['email:from']) {
|
|
|
|
if (meta.config['email:host'] && meta.config['email:port'] && meta.config['email:from']) {
|
|
|
|
var confirm_code = utils.generateUUID(),
|
|
|
|
var confirm_code = utils.generateUUID(),
|
|
|
|
confirm_link = nconf.get('url') + 'confirm/' + confirm_code,
|
|
|
|
confirm_link = nconf.get('url') + 'confirm/' + confirm_code,
|
|
|
|
confirm_email = global.templates['emails/header'] + global.templates['emails/email_confirm'].parse({'CONFIRM_LINK': confirm_link}) + global.templates['emails/footer'],
|
|
|
|
confirm_email = global.templates['emails/header'] + global.templates['emails/email_confirm'].parse({
|
|
|
|
confirm_email_plaintext = global.templates['emails/email_confirm_plaintext'].parse({ 'CONFIRM_LINK': confirm_link });
|
|
|
|
'CONFIRM_LINK': confirm_link
|
|
|
|
|
|
|
|
}) + global.templates['emails/footer'],
|
|
|
|
|
|
|
|
confirm_email_plaintext = global.templates['emails/email_confirm_plaintext'].parse({
|
|
|
|
|
|
|
|
'CONFIRM_LINK': confirm_link
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// Email confirmation code
|
|
|
|
// Email confirmation code
|
|
|
|
var expiry_time = 60 * 60 * 2, // Expire after 2 hours
|
|
|
|
var expiry_time = 60 * 60 * 2, // Expire after 2 hours
|
|
|
@ -467,12 +486,10 @@ var utils = require('./../public/src/utils.js'),
|
|
|
|
from: meta.config.mailer.from,
|
|
|
|
from: meta.config.mailer.from,
|
|
|
|
to: email,
|
|
|
|
to: email,
|
|
|
|
subject: '[NodeBB] Registration Email Verification',
|
|
|
|
subject: '[NodeBB] Registration Email Verification',
|
|
|
|
attachment: [
|
|
|
|
attachment: [{
|
|
|
|
{
|
|
|
|
|
|
|
|
data: confirm_email,
|
|
|
|
data: confirm_email,
|
|
|
|
alternative: true
|
|
|
|
alternative: true
|
|
|
|
}
|
|
|
|
}]
|
|
|
|
]
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
emailjsServer.send(message, function(err, success) {
|
|
|
|
emailjsServer.send(message, function(err, success) {
|
|
|
@ -612,7 +629,9 @@ var utils = require('./../public/src/utils.js'),
|
|
|
|
RDB.get('usercount', function(err, count) {
|
|
|
|
RDB.get('usercount', function(err, count) {
|
|
|
|
RDB.handle(err);
|
|
|
|
RDB.handle(err);
|
|
|
|
|
|
|
|
|
|
|
|
socket.emit('user.count', { count: count ? count : 0 });
|
|
|
|
socket.emit('user.count', {
|
|
|
|
|
|
|
|
count: count ? count : 0
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
@ -622,7 +641,10 @@ var utils = require('./../public/src/utils.js'),
|
|
|
|
|
|
|
|
|
|
|
|
User.getUserFields(uid, ['username', 'userslug'], function(err, userData) {
|
|
|
|
User.getUserFields(uid, ['username', 'userslug'], function(err, userData) {
|
|
|
|
if (!err && userData)
|
|
|
|
if (!err && userData)
|
|
|
|
socket.emit('user.latest', {userslug: userData.userslug, username: userData.username});
|
|
|
|
socket.emit('user.latest', {
|
|
|
|
|
|
|
|
userslug: userData.userslug,
|
|
|
|
|
|
|
|
username: userData.username
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -771,7 +793,9 @@ var utils = require('./../public/src/utils.js'),
|
|
|
|
|
|
|
|
|
|
|
|
if (expiry >= +Date.now() / 1000 | 0) {
|
|
|
|
if (expiry >= +Date.now() / 1000 | 0) {
|
|
|
|
if (!callback) {
|
|
|
|
if (!callback) {
|
|
|
|
socket.emit('user:reset.valid', { valid: true });
|
|
|
|
socket.emit('user:reset.valid', {
|
|
|
|
|
|
|
|
valid: true
|
|
|
|
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
callback(true);
|
|
|
|
callback(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -780,7 +804,9 @@ var utils = require('./../public/src/utils.js'),
|
|
|
|
RDB.del('reset:' + code + ':uid');
|
|
|
|
RDB.del('reset:' + code + ':uid');
|
|
|
|
RDB.del('reset:' + code + ':expiry');
|
|
|
|
RDB.del('reset:' + code + ':expiry');
|
|
|
|
if (!callback) {
|
|
|
|
if (!callback) {
|
|
|
|
socket.emit('user:reset.valid', { valid: false });
|
|
|
|
socket.emit('user:reset.valid', {
|
|
|
|
|
|
|
|
valid: false
|
|
|
|
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
callback(false);
|
|
|
|
callback(false);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -788,7 +814,9 @@ var utils = require('./../public/src/utils.js'),
|
|
|
|
});
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
if (!callback) {
|
|
|
|
if (!callback) {
|
|
|
|
socket.emit('user:reset.valid', { valid: false });
|
|
|
|
socket.emit('user:reset.valid', {
|
|
|
|
|
|
|
|
valid: false
|
|
|
|
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
callback(false);
|
|
|
|
callback(false);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -804,20 +832,22 @@ var utils = require('./../public/src/utils.js'),
|
|
|
|
RDB.set('reset:' + reset_code + ':expiry', (60 * 60) + new Date() / 1000 | 0); // Active for one hour
|
|
|
|
RDB.set('reset:' + reset_code + ':expiry', (60 * 60) + new Date() / 1000 | 0); // Active for one hour
|
|
|
|
|
|
|
|
|
|
|
|
var reset_link = nconf.get('url') + 'reset/' + reset_code,
|
|
|
|
var reset_link = nconf.get('url') + 'reset/' + reset_code,
|
|
|
|
reset_email = global.templates['emails/reset'].parse({'RESET_LINK': reset_link}),
|
|
|
|
reset_email = global.templates['emails/reset'].parse({
|
|
|
|
reset_email_plaintext = global.templates['emails/reset_plaintext'].parse({ 'RESET_LINK': reset_link });
|
|
|
|
'RESET_LINK': reset_link
|
|
|
|
|
|
|
|
}),
|
|
|
|
|
|
|
|
reset_email_plaintext = global.templates['emails/reset_plaintext'].parse({
|
|
|
|
|
|
|
|
'RESET_LINK': reset_link
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
var message = emailjs.message.create({
|
|
|
|
var message = emailjs.message.create({
|
|
|
|
text: reset_email_plaintext,
|
|
|
|
text: reset_email_plaintext,
|
|
|
|
from: meta.config.mailer ? meta.config.mailer.from : 'localhost@example.org',
|
|
|
|
from: meta.config.mailer ? meta.config.mailer.from : 'localhost@example.org',
|
|
|
|
to: email,
|
|
|
|
to: email,
|
|
|
|
subject: 'Password Reset Requested',
|
|
|
|
subject: 'Password Reset Requested',
|
|
|
|
attachment: [
|
|
|
|
attachment: [{
|
|
|
|
{
|
|
|
|
|
|
|
|
data: reset_email,
|
|
|
|
data: reset_email,
|
|
|
|
alternative: true
|
|
|
|
alternative: true
|
|
|
|
}
|
|
|
|
}]
|
|
|
|
]
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
emailjsServer.send(message, function(err, success) {
|
|
|
|
emailjsServer.send(message, function(err, success) {
|
|
|
@ -860,7 +890,9 @@ var utils = require('./../public/src/utils.js'),
|
|
|
|
RDB.del('reset:' + code + ':uid');
|
|
|
|
RDB.del('reset:' + code + ':uid');
|
|
|
|
RDB.del('reset:' + code + ':expiry');
|
|
|
|
RDB.del('reset:' + code + ':expiry');
|
|
|
|
|
|
|
|
|
|
|
|
socket.emit('user:reset.commit', { status: 'ok' });
|
|
|
|
socket.emit('user:reset.commit', {
|
|
|
|
|
|
|
|
status: 'ok'
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
@ -872,7 +904,9 @@ var utils = require('./../public/src/utils.js'),
|
|
|
|
User.get_uid_by_email(email, function(exists) {
|
|
|
|
User.get_uid_by_email(email, function(exists) {
|
|
|
|
exists = !! exists;
|
|
|
|
exists = !! exists;
|
|
|
|
if (typeof callback !== 'function') {
|
|
|
|
if (typeof callback !== 'function') {
|
|
|
|
socket.emit('user.email.exists', { exists: exists });
|
|
|
|
socket.emit('user.email.exists', {
|
|
|
|
|
|
|
|
exists: exists
|
|
|
|
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
callback(exists);
|
|
|
|
callback(exists);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -887,9 +921,13 @@ var utils = require('./../public/src/utils.js'),
|
|
|
|
if (email !== null) {
|
|
|
|
if (email !== null) {
|
|
|
|
RDB.set('email:' + email + ':confirm', true);
|
|
|
|
RDB.set('email:' + email + ':confirm', true);
|
|
|
|
RDB.del('confirm:' + code + ':email');
|
|
|
|
RDB.del('confirm:' + code + ':email');
|
|
|
|
callback({ status: 'ok' });
|
|
|
|
callback({
|
|
|
|
|
|
|
|
status: 'ok'
|
|
|
|
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
callback({ status: 'not_ok' });
|
|
|
|
callback({
|
|
|
|
|
|
|
|
status: 'not_ok'
|
|
|
|
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|