formatting - server side core

v1.18.x
psychobunny 12 years ago
parent c44461e33f
commit aea3181d27

@ -312,7 +312,9 @@ var RDB = require('./redis.js'),
Categories.getCategories = function(cids, callback, current_user) { Categories.getCategories = function(cids, callback, current_user) {
if (!cids || !Array.isArray(cids) || cids.length === 0) { if (!cids || !Array.isArray(cids) || cids.length === 0) {
callback({'categories' : []}); callback({
'categories': []
});
return; return;
} }
@ -342,7 +344,9 @@ var RDB = require('./redis.js'),
return; return;
} }
callback({'categories': categories}); callback({
'categories': categories
});
}); });
}; };

@ -32,7 +32,10 @@ var RDB = require('./redis.js'),
} }
if (room_id) { if (room_id) {
io.sockets.in(room_id).emit('event:rep_up', {uid: uid !== postData.uid ? postData.uid : 0, pid: pid}); io.sockets. in (room_id).emit('event:rep_up', {
uid: uid !== postData.uid ? postData.uid : 0,
pid: pid
});
} }
socket.emit('api:posts.favourite', { socket.emit('api:posts.favourite', {
@ -71,7 +74,10 @@ var RDB = require('./redis.js'),
} }
if (room_id) { if (room_id) {
io.sockets.in(room_id).emit('event:rep_down', {uid: uid !== uid_of_poster ? uid_of_poster : 0, pid: pid}); io.sockets. in (room_id).emit('event:rep_down', {
uid: uid !== uid_of_poster ? uid_of_poster : 0,
pid: pid
});
} }
socket.emit('api:posts.unfavourite', { socket.emit('api:posts.unfavourite', {

@ -1,5 +1,3 @@
var request = require('request'); var request = require('request');
@ -22,7 +20,10 @@ var request = require('request');
} }
}); });
var upload = post.form({type:type, image:image}); var upload = post.form({
type: type,
image: image
});
} }
imgur.setClientID = function(id) { imgur.setClientID = function(id) {
@ -30,4 +31,3 @@ var request = require('request');
} }
}(exports)); }(exports));

@ -8,46 +8,38 @@ var async = require('async'),
reds = require('reds'), reds = require('reds'),
install = { install = {
questions: [ questions: [{
{
name: 'base_url', name: 'base_url',
description: 'URL of this installation', description: 'URL of this installation',
'default': 'http://localhost', 'default': 'http://localhost',
pattern: /^http(?:s)?:\/\//, pattern: /^http(?:s)?:\/\//,
message: 'Base URL must begin with \'http://\' or \'https://\'', message: 'Base URL must begin with \'http://\' or \'https://\'',
}, }, {
{
name: 'port', name: 'port',
description: 'Port number of your NodeBB', description: 'Port number of your NodeBB',
'default': 4567 'default': 4567
}, }, {
{
name: 'use_port', name: 'use_port',
description: 'Use a port number to access NodeBB?', description: 'Use a port number to access NodeBB?',
'default': 'y', 'default': 'y',
pattern: /y[es]*|n[o]?/, pattern: /y[es]*|n[o]?/,
message: 'Please enter \'yes\' or \'no\'', message: 'Please enter \'yes\' or \'no\'',
}, }, {
{
name: 'secret', name: 'secret',
description: 'Please enter a NodeBB secret', description: 'Please enter a NodeBB secret',
'default': utils.generateUUID() 'default': utils.generateUUID()
}, }, {
{
name: 'redis:host', name: 'redis:host',
description: 'Host IP or address of your Redis instance', description: 'Host IP or address of your Redis instance',
'default': '127.0.0.1' 'default': '127.0.0.1'
}, }, {
{
name: 'redis:port', name: 'redis:port',
description: 'Host port of your Redis instance', description: 'Host port of your Redis instance',
'default': 6379 'default': 6379
}, }, {
{
name: 'redis:password', name: 'redis:password',
description: 'Password of your Redis database' description: 'Password of your Redis database'
} }],
],
setup: function(callback) { setup: function(callback) {
async.series([ async.series([
function(next) { function(next) {
@ -97,15 +89,28 @@ var async = require('async'),
// Applying default database configs // Applying default database configs
winston.info('Populating database with default configs, if not already set...') winston.info('Populating database with default configs, if not already set...')
var meta = require('./meta'), var meta = require('./meta'),
defaults = [ defaults = [{
{ field: 'postDelay', value: 10000 }, field: 'postDelay',
{ field: 'minimumPostLength', value: 8 }, value: 10000
{ field: 'minimumTitleLength', value: 3 }, }, {
{ field: 'minimumUsernameLength', value: 2 }, field: 'minimumPostLength',
{ field: 'maximumUsernameLength', value: 16 }, value: 8
{ field: 'minimumPasswordLength', value: 6 }, }, {
{ field: 'imgurClientID', value: '' } field: 'minimumTitleLength',
]; value: 3
}, {
field: 'minimumUsernameLength',
value: 2
}, {
field: 'maximumUsernameLength',
value: 16
}, {
field: 'minimumPasswordLength',
value: 6
}, {
field: 'imgurClientID',
value: ''
}];
async.each(defaults, function(configObj, next) { async.each(defaults, function(configObj, next) {
meta.configs.setOnEmpty(configObj.field, configObj.value, next); meta.configs.setOnEmpty(configObj.field, configObj.value, next);
@ -189,27 +194,23 @@ var async = require('async'),
Groups = require('./groups'); Groups = require('./groups');
winston.warn('No administrators have been detected, running initial user setup'); winston.warn('No administrators have been detected, running initial user setup');
var questions = [ var questions = [{
{
name: 'username', name: 'username',
description: 'Administrator username', description: 'Administrator username',
required: true, required: true,
type: 'string' type: 'string'
}, }, {
{
name: 'email', name: 'email',
description: 'Administrator email address', description: 'Administrator email address',
pattern: /.+@.+/, pattern: /.+@.+/,
required: true required: true
}, }, {
{
name: 'password', name: 'password',
description: 'Password', description: 'Password',
required: true, required: true,
hidden: true, hidden: true,
type: 'string' type: 'string'
} }],
],
getAdminInfo = function(callback) { getAdminInfo = function(callback) {
prompt.get(questions, function(err, results) { prompt.get(questions, function(err, results) {
if (!results) return callback(new Error('aborted')); if (!results) return callback(new Error('aborted'));
@ -251,7 +252,9 @@ var async = require('async'),
], function(err) { ], function(err) {
winston.info('Configuration Saved OK'); winston.info('Configuration Saved OK');
nconf.file({ file: path.join(__dirname, '..', 'config.json') }); nconf.file({
file: path.join(__dirname, '..', 'config.json')
});
var RDB = require('./redis'); var RDB = require('./redis');
reds.createClient = function() { reds.createClient = function() {

@ -1,4 +1,3 @@
var user = require('./user.js'), var user = require('./user.js'),
bcrypt = require('bcrypt'), bcrypt = require('bcrypt'),
RDB = require('./redis.js'), RDB = require('./redis.js'),
@ -41,7 +40,11 @@ var user = require('./user.js'),
} }
if (res) { if (res) {
next(null, { user: { uid: uid } }); next(null, {
user: {
uid: uid
}
});
} else { } else {
next(new Error('invalid-password')); next(new Error('invalid-password'));
} }
@ -158,4 +161,3 @@ var user = require('./user.js'),
} }
}(exports)); }(exports));

@ -1,4 +1,3 @@
var RDB = require('./redis'), var RDB = require('./redis'),
async = require('async'); async = require('async');

@ -130,4 +130,3 @@ var utils = require('./../public/src/utils.js'),
}(exports)); }(exports));

@ -82,7 +82,10 @@ var RDB = require('./redis.js'),
}); });
} }
next(null, {tid:tid, isMainPost:isMainPost}); next(null, {
tid: tid,
isMainPost: isMainPost
});
}); });
}); });
}, },

@ -124,8 +124,7 @@ var RDB = require('./redis.js'),
plugins.fireHook('filter:post.get', data, function(data) { plugins.fireHook('filter:post.get', data, function(data) {
callback(data); callback(data);
}); });
} } else
else
console.log(err); console.log(err);
}); });
} }
@ -134,8 +133,7 @@ var RDB = require('./redis.js'),
RDB.hmgetObject('post:' + pid, fields, function(err, data) { RDB.hmgetObject('post:' + pid, fields, function(err, data) {
if (err === null) { if (err === null) {
callback(data); callback(data);
} } else {
else {
console.log(err); console.log(err);
} }
}); });
@ -256,7 +254,9 @@ var RDB = require('./redis.js'),
threadTools.notify_followers(tid, uid); threadTools.notify_followers(tid, uid);
Posts.addUserInfoToPost(postData, function() { Posts.addUserInfoToPost(postData, function() {
var socketData = { posts: [postData] }; var socketData = {
posts: [postData]
};
io.sockets. in ('topic_' + tid).emit('event:new_post', socketData); io.sockets. in ('topic_' + tid).emit('event:new_post', socketData);
io.sockets. in ('recent_posts').emit('event:new_post', socketData); io.sockets. in ('recent_posts').emit('event:new_post', socketData);
io.sockets. in ('users/' + uid).emit('event:new_post', socketData); io.sockets. in ('users/' + uid).emit('event:new_post', socketData);
@ -372,7 +372,9 @@ var RDB = require('./redis.js'),
if (!images) if (!images)
return callback(null, []); return callback(null, []);
var uploadedImages = images.filter(function(image) { return !!image.url; }); var uploadedImages = images.filter(function(image) {
return !!image.url;
});
function uploadImage(image, next) { function uploadImage(image, next) {
if (!image.data) if (!image.data)
@ -383,7 +385,10 @@ var RDB = require('./redis.js'),
next(err); next(err);
} else { } else {
if (data.success) { if (data.success) {
var img= {url:data.data.link, name:image.name}; var img = {
url: data.data.link,
name: image.name
};
uploadedImages.push(img); uploadedImages.push(img);
next(null); next(null);
} else { } else {
@ -414,8 +419,7 @@ var RDB = require('./redis.js'),
Posts.getPostsByPids(pids, function(err, posts) { Posts.getPostsByPids(pids, function(err, posts) {
callback(posts); callback(posts);
}); });
} } else
else
callback([]); callback([]);
}); });
} }
@ -429,8 +433,7 @@ var RDB = require('./redis.js'),
}; };
socket.emit('post.stats', stats); socket.emit('post.stats', stats);
} } else
else
console.log(err); console.log(err);
}); });
} }

@ -45,8 +45,7 @@
} }
callback(null, returnData); callback(null, returnData);
} } else {
else {
console.log(err); console.log(err);
callback(err, null); callback(err, null);
} }

@ -6,11 +6,19 @@ var path = require('path'),
topics = require('./topics'), topics = require('./topics'),
sitemap = { sitemap = {
getStaticUrls: function(callback) { getStaticUrls: function(callback) {
callback(null, [ callback(null, [{
{ url: '', changefreq: 'weekly', priority: '0.6' }, url: '',
{ url: 'recent', changefreq: 'daily', priority: '0.4' }, changefreq: 'weekly',
{ url: 'users', changefreq: 'daily', priority: '0.4' } priority: '0.6'
]); }, {
url: 'recent',
changefreq: 'daily',
priority: '0.4'
}, {
url: 'users',
changefreq: 'daily',
priority: '0.4'
}]);
}, },
getDynamicUrls: function(callback) { getDynamicUrls: function(callback) {
var returnUrls = []; var returnUrls = [];

@ -240,7 +240,9 @@ var RDB = require('./redis.js'),
status: 'ok', status: 'ok',
follow: true follow: true
}); });
} else callback({ status: 'error' }); } else callback({
status: 'error'
});
} }
}); });
} else { } else {
@ -251,7 +253,9 @@ var RDB = require('./redis.js'),
status: 'ok', status: 'ok',
follow: false follow: false
}); });
} else callback({ status: 'error' }); } else callback({
status: 'error'
});
} }
}); });
} }

@ -129,7 +129,9 @@ var RDB = require('./redis.js')
done = false; done = false;
async.whilst( async.whilst(
function () { return unreadTids.length < 21 && !done; }, function() {
return unreadTids.length < 21 && !done;
},
function(callback) { function(callback) {
RDB.zrevrange('topics:recent', start, stop, function(err, tids) { RDB.zrevrange('topics:recent', start, stop, function(err, tids) {
@ -197,7 +199,9 @@ var RDB = require('./redis.js')
done = false; done = false;
async.whilst( async.whilst(
function () { return unreadTids.length < 20 && !done; }, function() {
return unreadTids.length < 20 && !done;
},
function(callback) { function(callback) {
RDB.zrevrange('topics:recent', start, stop, function(err, tids) { RDB.zrevrange('topics:recent', start, stop, function(err, tids) {
if (err) if (err)
@ -266,6 +270,7 @@ var RDB = require('./redis.js')
} }
// temporary. I don't think this call should belong here // temporary. I don't think this call should belong here
function getPrivileges(next) { function getPrivileges(next) {
categories.privileges(category_id, current_user, function(user_privs) { categories.privileges(category_id, current_user, function(user_privs) {
next(null, user_privs); next(null, user_privs);
@ -438,7 +443,9 @@ var RDB = require('./redis.js')
numTids, x; numTids, x;
// Sort into ascending order // Sort into ascending order
tids.sort(function(a, b) { return a - b; }); tids.sort(function(a, b) {
return a - b;
});
// Eliminate everything after the "after" tid // Eliminate everything after the "after" tid
if (after) { if (after) {
@ -457,7 +464,9 @@ var RDB = require('./redis.js')
} }
// Sort into descending order // Sort into descending order
tids.sort(function(a, b) { return b - a; }); tids.sort(function(a, b) {
return b - a;
});
async.each(tids, function(tid, next) { async.each(tids, function(tid, next) {
Topics.getTopicDataWithUsername(tid, function(topicData) { Topics.getTopicDataWithUsername(tid, function(topicData) {
@ -688,7 +697,9 @@ var RDB = require('./redis.js')
Topics.getTopicForCategoryView(tid, uid, function(topicData) { Topics.getTopicForCategoryView(tid, uid, function(topicData) {
io.sockets. in ('category_' + category_id).emit('event:new_topic', topicData); io.sockets. in ('category_' + category_id).emit('event:new_topic', topicData);
io.sockets. in ('recent_posts').emit('event:new_topic', topicData); io.sockets. in ('recent_posts').emit('event:new_topic', topicData);
io.sockets.in('users/' + uid).emit('event:new_post', {posts:postData}); io.sockets. in ('users/' + uid).emit('event:new_post', {
posts: postData
});
}); });
callback(null, postData); callback(null, postData);

@ -24,8 +24,7 @@ function upgradeCategory(cid, callback) {
if (!err) { if (!err) {
RDB.rename('temp_categories:' + cid + ':tid', 'categories:' + cid + ':tid'); RDB.rename('temp_categories:' + cid + ':tid', 'categories:' + cid + ':tid');
callback(null); callback(null);
} } else
else
callback(err); callback(err);
}); });

@ -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'
});
} }
}); });
} }

@ -31,12 +31,19 @@ var express = require('express'),
* accepts: metaTags * accepts: metaTags
*/ */
app.build_header = function(options, callback) { app.build_header = function(options, callback) {
var defaultMetaTags = [ var defaultMetaTags = [{
{ name: 'viewport', content: 'width=device-width, initial-scale=1.0' }, name: 'viewport',
{ name: 'content-type', content: 'text/html; charset=UTF-8' }, content: 'width=device-width, initial-scale=1.0'
{ name: 'apple-mobile-web-app-capable', content: 'yes' }, }, {
{ property: 'og:site_name', content: meta.config.title || 'NodeBB' }, name: 'content-type',
], content: 'text/html; charset=UTF-8'
}, {
name: 'apple-mobile-web-app-capable',
content: 'yes'
}, {
property: 'og:site_name',
content: meta.config.title || 'NodeBB'
}, ],
metaString = utils.buildMetaTags(defaultMetaTags.concat(options.metaTags || [])), metaString = utils.buildMetaTags(defaultMetaTags.concat(options.metaTags || [])),
templateValues = { templateValues = {
cssSrc: meta.config['theme:src'] || nconf.get('relative_path') + '/vendor/bootstrap/css/bootstrap.min.css', cssSrc: meta.config['theme:src'] || nconf.get('relative_path') + '/vendor/bootstrap/css/bootstrap.min.css',
@ -58,7 +65,10 @@ var express = require('express'),
// Middlewares // Middlewares
app.use(express.favicon(path.join(__dirname, '../', 'public', 'favicon.ico'))); app.use(express.favicon(path.join(__dirname, '../', 'public', 'favicon.ico')));
app.use(require('less-middleware')({ src: path.join(__dirname, '../', 'public'), prefix:nconf.get('relative_path') })); app.use(require('less-middleware')({
src: path.join(__dirname, '../', 'public'),
prefix: nconf.get('relative_path')
}));
app.use(nconf.get('relative_path'), express.static(path.join(__dirname, '../', 'public'))); app.use(nconf.get('relative_path'), express.static(path.join(__dirname, '../', 'public')));
app.use(express.bodyParser()); // Puts POST vars in request.body app.use(express.bodyParser()); // Puts POST vars in request.body
@ -138,7 +148,9 @@ var express = require('express'),
// respond with json // respond with json
if (req.accepts('json')) { if (req.accepts('json')) {
res.send({ error: 'Not found' }); res.send({
error: 'Not found'
});
return; return;
} }
@ -155,7 +167,9 @@ var express = require('express'),
res.status(err.status || 500); res.status(err.status || 500);
res.json('500', { error: err.message }); res.json('500', {
error: err.message
});
}); });
@ -189,7 +203,10 @@ var express = require('express'),
return; return;
} }
app.build_header({ req: req, res: res }, function(err, header) { app.build_header({
req: req,
res: res
}, function(err, header) {
res.send(header + app.create_route(route) + templates['footer']); res.send(header + app.create_route(route) + templates['footer']);
}); });
}); });
@ -204,12 +221,19 @@ var express = require('express'),
app.build_header({ app.build_header({
req: req, req: req,
res: res, res: res,
metaTags: [ metaTags: [{
{ name: "title", content: meta.config.title || 'NodeBB' }, name: "title",
{ name: "description", content: meta.config.description || '' }, content: meta.config.title || 'NodeBB'
{ property: 'og:title', content: 'Index | ' + (meta.config.title || 'NodeBB') }, }, {
{ property: "og:type", content: 'website' } name: "description",
] content: meta.config.description || ''
}, {
property: 'og:title',
content: 'Index | ' + (meta.config.title || 'NodeBB')
}, {
property: "og:type",
content: 'website'
}]
}, next); }, next);
}, },
"categories": function(next) { "categories": function(next) {
@ -275,16 +299,31 @@ var express = require('express'),
app.build_header({ app.build_header({
req: req, req: req,
res: res, res: res,
metaTags: [ metaTags: [{
{ name: "title", content: topicData.topic_name }, name: "title",
{ property: 'og:title', content: topicData.topic_name + ' | ' + (meta.config.title || 'NodeBB') }, content: topicData.topic_name
{ property: "og:type", content: 'article' }, }, {
{ property: "og:url", content: nconf.get('url') + 'topic/' + topicData.slug }, property: 'og:title',
{ property: 'og:image', content: topicData.main_posts[0].picture }, content: topicData.topic_name + ' | ' + (meta.config.title || 'NodeBB')
{ property: "article:published_time", content: new Date(parseInt(topicData.main_posts[0].timestamp, 10)).toISOString() }, }, {
{ property: 'article:modified_time', content: new Date(lastMod).toISOString() }, property: "og:type",
{ property: 'article:section', content: topicData.category_name } content: 'article'
] }, {
property: "og:url",
content: nconf.get('url') + 'topic/' + topicData.slug
}, {
property: 'og:image',
content: topicData.main_posts[0].picture
}, {
property: "article:published_time",
content: new Date(parseInt(topicData.main_posts[0].timestamp, 10)).toISOString()
}, {
property: 'article:modified_time',
content: new Date(lastMod).toISOString()
}, {
property: 'article:section',
content: topicData.category_name
}]
}, function(err, header) { }, function(err, header) {
next(err, { next(err, {
header: header, header: header,
@ -344,11 +383,16 @@ var express = require('express'),
app.build_header({ app.build_header({
req: req, req: req,
res: res, res: res,
metaTags: [ metaTags: [{
{ name: 'title', content: categoryData.category_name }, name: 'title',
{ name: 'description', content: categoryData.category_description }, content: categoryData.category_name
{ property: "og:type", content: 'website' } }, {
] name: 'description',
content: categoryData.category_description
}, {
property: "og:type",
content: 'website'
}]
}, function(err, header) { }, function(err, header) {
next(err, { next(err, {
header: header, header: header,
@ -370,7 +414,10 @@ var express = require('express'),
}); });
app.get('/confirm/:code', function(req, res) { app.get('/confirm/:code', function(req, res) {
app.build_header({ req: req, res: res }, function(err, header) { app.build_header({
req: req,
res: res
}, function(err, header) {
res.send(header + '<script>templates.ready(function(){ajaxify.go("confirm/' + req.params.code + '");});</script>' + templates['footer']); res.send(header + '<script>templates.ready(function(){ajaxify.go("confirm/' + req.params.code + '");});</script>' + templates['footer']);
}); });
}); });
@ -421,7 +468,10 @@ var express = require('express'),
app.get('/outgoing', function(req, res) { app.get('/outgoing', function(req, res) {
if (!req.query.url) return res.redirect('/404'); if (!req.query.url) return res.redirect('/404');
app.build_header({ req: req, res: res }, function(err, header) { app.build_header({
req: req,
res: res
}, function(err, header) {
res.send( res.send(
header + header +
'\n\t<script>templates.ready(function(){ajaxify.go("outgoing?url=' + encodeURIComponent(req.query.url) + '", null, null, true);});</script>' + '\n\t<script>templates.ready(function(){ajaxify.go("outgoing?url=' + encodeURIComponent(req.query.url) + '", null, null, true);});</script>' +
@ -431,13 +481,19 @@ var express = require('express'),
}); });
app.get('/search', function(req, res) { app.get('/search', function(req, res) {
app.build_header({ req: req, res: res }, function(err, header) { app.build_header({
req: req,
res: res
}, function(err, header) {
res.send(header + app.create_route("search", null, "search") + templates['footer']); res.send(header + app.create_route("search", null, "search") + templates['footer']);
}); });
}); });
app.get('/search/:term', function(req, res) { app.get('/search/:term', function(req, res) {
app.build_header({ req: req, res: res }, function(err, header) { app.build_header({
req: req,
res: res
}, function(err, header) {
res.send(header + app.create_route("search/" + req.params.term, null, "search") + templates['footer']); res.send(header + app.create_route("search/" + req.params.term, null, "search") + templates['footer']);
}); });
}); });

@ -1,4 +1,3 @@
var SocketIO = require('socket.io').listen(global.server, { var SocketIO = require('socket.io').listen(global.server, {
log: false, log: false,
transports: ['websocket', 'xhr-polling', 'jsonp-polling', 'flashsocket'] transports: ['websocket', 'xhr-polling', 'jsonp-polling', 'flashsocket']
@ -58,7 +57,11 @@ var SocketIO = require('socket.io').listen(global.server, {
io.sockets. in ('global').emit('api:user.isOnline', isUserOnline(uid)); io.sockets. in ('global').emit('api:user.isOnline', isUserOnline(uid));
user.getUserField(uid, 'username', function(err, username) { user.getUserField(uid, 'username', function(err, username) {
socket.emit('event:connect', {status: 1, username:username, uid:uid}); socket.emit('event:connect', {
status: 1,
username: username,
uid: uid
});
}); });
} }
}); });
@ -191,13 +194,14 @@ var SocketIO = require('socket.io').listen(global.server, {
socket.emit('api:updateHeader', fields); socket.emit('api:updateHeader', fields);
} }
}); });
} } else {
else {
socket.emit('api:updateHeader', { socket.emit('api:updateHeader', {
uid: 0, uid: 0,
username: "Anonymous User", username: "Anonymous User",
email: '', email: '',
picture: require('gravatar').url('', {s:'24'}, https=nconf.get('https')) picture: require('gravatar').url('', {
s: '24'
}, https = nconf.get('https'))
}); });
} }
@ -206,7 +210,9 @@ var SocketIO = require('socket.io').listen(global.server, {
socket.on('user.exists', function(data) { socket.on('user.exists', function(data) {
if (data.username) { if (data.username) {
user.exists(utils.slugify(data.username), function(exists) { user.exists(utils.slugify(data.username), function(exists) {
socket.emit('user.exists', {exists: exists}); socket.emit('user.exists', {
exists: exists
});
}); });
} }
}); });
@ -257,7 +263,10 @@ var SocketIO = require('socket.io').listen(global.server, {
}); });
socket.on('api:user.isOnline', function(uid, callback) { socket.on('api:user.isOnline', function(uid, callback) {
callback({online:isUserOnline(uid), timestamp:Date.now()}); callback({
online: isUserOnline(uid),
timestamp: Date.now()
});
}); });
socket.on('api:user.changePassword', function(data, callback) { socket.on('api:user.changePassword', function(data, callback) {
@ -479,7 +488,9 @@ var SocketIO = require('socket.io').listen(global.server, {
socket.on('api:posts.getRawPost', function(data) { socket.on('api:posts.getRawPost', function(data) {
posts.getPostField(data.pid, 'content', function(raw) { posts.getPostField(data.pid, 'content', function(raw) {
socket.emit('api:posts.getRawPost', { post: raw }); socket.emit('api:posts.getRawPost', {
post: raw
});
}); });
}); });
@ -562,7 +573,12 @@ var SocketIO = require('socket.io').listen(global.server, {
numSockets = userSockets[touid].length; numSockets = userSockets[touid].length;
for (var x = 0; x < numSockets; ++x) { for (var x = 0; x < numSockets; ++x) {
userSockets[touid][x].emit('chatMessage', {fromuid:uid, username:username, message: finalMessage, timestamp: Date.now()}); userSockets[touid][x].emit('chatMessage', {
fromuid: uid,
username: username,
message: finalMessage,
timestamp: Date.now()
});
} }
} }
@ -571,7 +587,12 @@ var SocketIO = require('socket.io').listen(global.server, {
numSockets = userSockets[uid].length; numSockets = userSockets[uid].length;
for (var x = 0; x < numSockets; ++x) { for (var x = 0; x < numSockets; ++x) {
userSockets[uid][x].emit('chatMessage', {fromuid:touid, username:username, message:'You : ' + msg, timestamp: Date.now()}); userSockets[uid][x].emit('chatMessage', {
fromuid: touid,
username: username,
message: 'You : ' + msg,
timestamp: Date.now()
});
} }
} }
}); });
@ -586,7 +607,9 @@ var SocketIO = require('socket.io').listen(global.server, {
socket.on('api:config.set', function(data) { socket.on('api:config.set', function(data) {
meta.configs.set(data.key, data.value, function(err) { meta.configs.set(data.key, data.value, function(err) {
if (!err) socket.emit('api:config.set', { status: 'ok' }); if (!err) socket.emit('api:config.set', {
status: 'ok'
});
}); });
}); });
@ -696,7 +719,9 @@ var SocketIO = require('socket.io').listen(global.server, {
end = start + 9; end = start + 9;
topics.getTopicPosts(data.tid, start, end, uid, function(posts) { topics.getTopicPosts(data.tid, start, end, uid, function(posts) {
callback({posts:posts}); callback({
posts: posts
});
}); });
}); });
@ -705,7 +730,9 @@ var SocketIO = require('socket.io').listen(global.server, {
end = start + 9; end = start + 9;
categories.getCategoryTopics(data.cid, start, end, uid, function(topics) { categories.getCategoryTopics(data.cid, start, end, uid, function(topics) {
callback({topics:topics}); callback({
topics: topics
});
}); });
}); });
@ -735,7 +762,9 @@ var SocketIO = require('socket.io').listen(global.server, {
if (err) { if (err) {
winston.err(err); winston.err(err);
} else { } else {
callback({users:data}); callback({
users: data
});
} }
}); });
}); });

Loading…
Cancel
Save