Merge branch 'master' of github.com:designcreateplay/NodeBB

v1.18.x
Julian Lam 12 years ago
commit c69e30c146

@ -5,7 +5,7 @@
"indent_with_tabs": false, "indent_with_tabs": false,
"preserve_newlines": true, "preserve_newlines": true,
"max_preserve_newlines": 10, "max_preserve_newlines": 10,
"jslint_happy": false, "jslint_happy": true,
"brace_style": "collapse", "brace_style": "collapse",
"keep_array_indentation": false, "keep_array_indentation": false,
"keep_function_indentation": false, "keep_function_indentation": false,

@ -24,7 +24,7 @@
// "single" : require single quotes // "single" : require single quotes
// "double" : require double quotes // "double" : require double quotes
"undef" : true, // true: Require all non-global variables to be declared (prevents global leaks) "undef" : true, // true: Require all non-global variables to be declared (prevents global leaks)
"unused" : true, // true: Require all defined variables be used "unused" : false, // true: Require all defined variables be used TODO: Set this to true, update codebase.
"strict" : true, // true: Requires all functions run in ES5 Strict Mode "strict" : true, // true: Requires all functions run in ES5 Strict Mode
"trailing" : false, // true: Prohibit trailing whitespaces "trailing" : false, // true: Prohibit trailing whitespaces
"maxparams" : false, // {int} Max number of formal params allowed per function "maxparams" : false, // {int} Max number of formal params allowed per function

183
app.js

@ -16,114 +16,115 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
// Configuration setup (function() {
nconf = require('nconf'); "use strict";
nconf.argv().env();
var fs = require('fs'), // Configuration setup
winston = require('winston'), var nconf = require('nconf');
pkg = require('./package.json'), nconf.argv().env();
url = require('url');
// Runtime environment var fs = require('fs'),
global.env = process.env.NODE_ENV || 'production'; winston = require('winston'),
pkg = require('./package.json');
// Runtime environment
global.env = process.env.NODE_ENV || 'production';
winston.remove(winston.transports.Console);
winston.add(winston.transports.Console, {
colorize: true
});
winston.remove(winston.transports.Console); winston.add(winston.transports.File, {
winston.add(winston.transports.Console, { filename: 'error.log',
colorize: true level: 'error'
}); });
winston.add(winston.transports.File, {
filename: 'error.log',
level: 'error'
});
// TODO: remove once https://github.com/flatiron/winston/issues/280 is fixed
winston.err = function(err) {
winston.error(err.stack);
};
// Log GNU copyright info along with server info // TODO: remove once https://github.com/flatiron/winston/issues/280 is fixed
winston.info('NodeBB v' + pkg.version + ' Copyright (C) 2013 DesignCreatePlay Inc.'); winston.err = function(err) {
winston.info('This program comes with ABSOLUTELY NO WARRANTY.'); winston.error(err.stack);
winston.info('This is free software, and you are welcome to redistribute it under certain conditions.'); };
winston.info('');
if (fs.existsSync(__dirname + '/config.json') && (!nconf.get('setup') && !nconf.get('upgrade'))) { // Log GNU copyright info along with server info
// Load server-side config winston.info('NodeBB v' + pkg.version + ' Copyright (C) 2013 DesignCreatePlay Inc.');
nconf.file({ winston.info('This program comes with ABSOLUTELY NO WARRANTY.');
file: __dirname + '/config.json' winston.info('This is free software, and you are welcome to redistribute it under certain conditions.');
}); winston.info('');
var meta = require('./src/meta.js'); var meta = require('./src/meta.js');
nconf.set('url', nconf.get('base_url') + (nconf.get('use_port') ? ':' + nconf.get('port') : '') + nconf.get('relative_path') + '/'); if (fs.existsSync(__dirname + '/config.json') && (!nconf.get('setup') && !nconf.get('upgrade'))) {
nconf.set('upload_url', nconf.get('url') + 'uploads/'); // Load server-side config
nconf.file({
file: __dirname + '/config.json'
});
nconf.set('url', nconf.get('base_url') + (nconf.get('use_port') ? ':' + nconf.get('port') : '') + nconf.get('relative_path') + '/');
nconf.set('upload_url', nconf.get('url') + 'uploads/');
winston.info('Initializing NodeBB v' + pkg.version + ', on port ' + nconf.get('port') + ', using Redis store at ' + nconf.get('redis:host') + ':' + nconf.get('redis:port') + '.'); winston.info('Initializing NodeBB v' + pkg.version + ', on port ' + nconf.get('port') + ', using Redis store at ' + nconf.get('redis:host') + ':' + nconf.get('redis:port') + '.');
if (process.env.NODE_ENV === 'development') winston.info('Base Configuration OK.');
meta.configs.init(function() { if (process.env.NODE_ENV === 'development') {
// Initial setup for Redis & Reds winston.info('Base Configuration OK.');
var reds = require('reds');
RDB = require('./src/redis.js');
reds.createClient = function() {
return reds.client || (reds.client = RDB);
} }
var categories = require('./src/categories.js'), meta.configs.init(function() {
templates = require('./public/src/templates.js'), // Initial setup for Redis & Reds
webserver = require('./src/webserver.js'), var reds = require('reds'),
websockets = require('./src/websockets.js'), RDB = require('./src/redis.js');
plugins = require('./src/plugins'), // Don't remove this - plugins initializes itself
admin = {
'categories': require('./src/admin/categories.js')
};
global.templates = {}; reds.createClient = function() {
templates.init([ return reds.client || (reds.client = RDB);
'header', 'footer', 'logout', 'outgoing', 'admin/header', 'admin/footer', 'admin/index', };
'emails/reset', 'emails/reset_plaintext', 'emails/email_confirm', 'emails/email_confirm_plaintext',
'emails/header', 'emails/footer',
'noscript/header', 'noscript/home', 'noscript/category', 'noscript/topic' var templates = require('./public/src/templates.js'),
]); webserver = require('./src/webserver.js'),
websockets = require('./src/websockets.js'),
plugins = require('./src/plugins'); // Don't remove this - plugins initializes itself
global.templates = {};
templates.init([
'header', 'footer', 'logout', 'outgoing', 'admin/header', 'admin/footer', 'admin/index',
'emails/reset', 'emails/reset_plaintext', 'emails/email_confirm', 'emails/email_confirm_plaintext',
'emails/header', 'emails/footer',
'noscript/header', 'noscript/home', 'noscript/category', 'noscript/topic'
]);
templates.ready(webserver.init);
});
} else if (nconf.get('upgrade')) {
nconf.file({
file: __dirname + '/config.json'
});
meta.configs.init(function() {
require('./src/upgrade').upgrade();
});
} else {
// New install, ask setup questions
if (nconf.get('setup')) {
winston.info('NodeBB Setup Triggered via Command Line');
}
else {
winston.warn('Configuration not found, starting NodeBB setup');
}
templates.ready(webserver.init); var install = require('./src/install');
});
} else if (nconf.get('upgrade')) { winston.info('Welcome to NodeBB!');
nconf.file({ winston.info('This looks like a new installation, so you\'ll have to answer a few questions about your environment before we can proceed.');
file: __dirname + '/config.json' winston.info('Press enter to accept the default setting (shown in brackets).');
});
var meta = require('./src/meta.js');
meta.configs.init(function() { install.setup(function(err) {
require('./src/upgrade').upgrade(); if (err) {
}); winston.error('There was a problem completing NodeBB setup: ', err.message);
} else { } else {
// New install, ask setup questions winston.info('NodeBB Setup Completed.');
if (nconf.get('setup')) winston.info('NodeBB Setup Triggered via Command Line'); }
else winston.warn('Configuration not found, starting NodeBB setup');
var install = require('./src/install'),
meta = {
config: {}
};
winston.info('Welcome to NodeBB!');
winston.info('This looks like a new installation, so you\'ll have to answer a few questions about your environment before we can proceed.');
winston.info('Press enter to accept the default setting (shown in brackets).');
install.setup(function(err) {
if (err) {
winston.error('There was a problem completing NodeBB setup: ', err.message);
} else {
winston.info('NodeBB Setup Completed.');
}
process.exit(); process.exit();
}); });
} }
}());

@ -10,7 +10,7 @@
}, },
"main": "app.js", "main": "app.js",
"dependencies": { "dependencies": {
"socket.io": "~0.9.14", "socket.io": "~0.9.16",
"redis": "0.8.3", "redis": "0.8.3",
"express": "3.2.0", "express": "3.2.0",
"express-namespace": "0.1.1", "express-namespace": "0.1.1",

@ -1,5 +1,5 @@
<div class="well"> <div class="well users">
<div class="account-username-box" data-userslug="{userslug}"> <div class="account-username-box" data-userslug="{userslug}">
<span class="account-username"> <span class="account-username">

@ -1,5 +1,5 @@
<div class="well"> <div class="well users">
<div class="account-username-box" data-userslug="{userslug}"> <div class="account-username-box" data-userslug="{userslug}">
<span class="account-username"> <span class="account-username">

@ -4,14 +4,17 @@ var RDB = require('./redis.js'),
user = require('./user.js'), user = require('./user.js'),
async = require('async'), async = require('async'),
topics = require('./topics.js'), topics = require('./topics.js'),
winston = require('winston'); winston = require('winston'),
nconf = require('nconf');
(function(Categories) { (function(Categories) {
"use strict";
Categories.create = function(data, callback) { Categories.create = function(data, callback) {
RDB.incr('global:next_category_id', function(err, cid) { RDB.incr('global:next_category_id', function(err, cid) {
if (err) if (err) {
return callback(err, null); return callback(err, null);
}
var slug = cid + '/' + utils.slugify(data.name); var slug = cid + '/' + utils.slugify(data.name);
RDB.rpush('categories:cid', cid); RDB.rpush('categories:cid', cid);
@ -35,9 +38,10 @@ var RDB = require('./redis.js'),
}; };
Categories.getCategoryById = function(category_id, current_user, callback) { Categories.getCategoryById = function(category_id, current_user, callback) {
Categories.getCategoryData(category_id, function(err, categoryData) { Categories.getCategoryData(category_id, function(err, categoryData) {
if (err) return callback(err); if (err) {
return callback(err);
}
var category_name = categoryData.name, var category_name = categoryData.name,
category_slug = categoryData.slug, category_slug = categoryData.slug,
@ -284,8 +288,11 @@ var RDB = require('./redis.js'),
Categories.getCategoryData = function(cid, callback) { Categories.getCategoryData = function(cid, callback) {
RDB.exists('category:' + cid, function(err, exists) { RDB.exists('category:' + cid, function(err, exists) {
if (exists) RDB.hgetall('category:' + cid, callback); if (exists) {
else callback(new Error('No category found!')); RDB.hgetall('category:' + cid, callback);
} else {
callback(new Error('No category found!'));
}
}); });
}; };
@ -295,10 +302,11 @@ var RDB = require('./redis.js'),
Categories.getCategoryFields = function(cid, fields, callback) { Categories.getCategoryFields = function(cid, fields, callback) {
RDB.hmgetObject('category:' + cid, fields, function(err, data) { RDB.hmgetObject('category:' + cid, fields, function(err, data) {
if (err === null) if (err === null) {
callback(data); callback(data);
else } else {
winston.err(err); winston.err(err);
}
}); });
}; };
@ -329,7 +337,7 @@ var RDB = require('./redis.js'),
} }
Categories.hasReadCategory(cid, current_user, function(hasRead) { Categories.hasReadCategory(cid, current_user, function(hasRead) {
categoryData['badgeclass'] = (parseInt(categoryData.topic_count, 10) === 0 || (hasRead && current_user != 0)) ? '' : 'badge-important'; categoryData.badgeclass = (parseInt(categoryData.topic_count, 10) === 0 || (hasRead && current_user !== 0)) ? '' : 'badge-important';
categories.push(categoryData); categories.push(categoryData);
callback(null); callback(null);
@ -354,15 +362,17 @@ var RDB = require('./redis.js'),
Categories.isUserActiveIn = function(cid, uid, callback) { Categories.isUserActiveIn = function(cid, uid, callback) {
RDB.lrange('uid:' + uid + ':posts', 0, -1, function(err, pids) { RDB.lrange('uid:' + uid + ':posts', 0, -1, function(err, pids) {
if (err) if (err) {
return callback(err, null); return callback(err, null);
}
function getPostCategory(pid, callback) { function getPostCategory(pid, callback) {
posts.getPostField(pid, 'tid', function(tid) { posts.getPostField(pid, 'tid', function(tid) {
topics.getTopicField(tid, 'cid', function(err, postCid) { topics.getTopicField(tid, 'cid', function(err, postCid) {
if (err) if (err) {
return callback(err, null); return callback(err, null);
}
return callback(null, postCid); return callback(null, postCid);
}); });
@ -378,17 +388,23 @@ var RDB = require('./redis.js'),
}, },
function(callback) { function(callback) {
getPostCategory(pids[index], function(err, postCid) { getPostCategory(pids[index], function(err, postCid) {
if (err) if (err) {
return callback(err); return callback(err);
if (postCid === cid) }
if (postCid === cid) {
active = true; active = true;
}
++index; ++index;
callback(null); callback(null);
}); });
}, },
function(err) { function(err) {
if (err) if (err) {
return callback(err, null); return callback(err, null);
}
callback(null, active); callback(null, active);
} }

@ -6,7 +6,8 @@
fs = require('fs'), fs = require('fs'),
rss = require('rss'), rss = require('rss'),
winston = require('winston'), winston = require('winston'),
path = require('path'); path = require('path'),
nconf = require('nconf');
Feed.defaults = { Feed.defaults = {
ttl: 60, ttl: 60,

@ -6,6 +6,7 @@ var async = require('async'),
prompt = require('prompt'), prompt = require('prompt'),
winston = require('winston'), winston = require('winston'),
reds = require('reds'), reds = require('reds'),
nconf = require('nconf');
install = { install = {
questions: [{ questions: [{

@ -3,7 +3,8 @@ var utils = require('./../public/src/utils.js'),
async = require('async'), async = require('async'),
path = require('path'), path = require('path'),
fs = require('fs'), fs = require('fs'),
winston = require('winston'); winston = require('winston'),
nconf = require('nconf');
(function(Meta) { (function(Meta) {

@ -4,6 +4,7 @@ var RDB = require('./redis.js'),
threadTools = require('./threadTools.js'), threadTools = require('./threadTools.js'),
user = require('./user.js'), user = require('./user.js'),
async = require('async'), async = require('async'),
nconf = require('nconf'),
utils = require('../public/src/utils'), utils = require('../public/src/utils'),
plugins = require('./plugins'), plugins = require('./plugins'),

@ -1,7 +1,8 @@
(function(RedisDB) { (function(RedisDB) {
var redis = require('redis'), var redis = require('redis'),
utils = require('./../public/src/utils.js'), utils = require('./../public/src/utils.js'),
winston = require('winston'); winston = require('winston'),
nconf = require('nconf');
RedisDB.exports = redis.createClient(nconf.get('redis:port'), nconf.get('redis:host')); RedisDB.exports = redis.createClient(nconf.get('redis:port'), nconf.get('redis:host'));

@ -5,7 +5,8 @@ var user = require('./../user.js'),
pkg = require('./../../package.json'), pkg = require('./../../package.json'),
categories = require('./../categories.js'), categories = require('./../categories.js'),
plugins = require('../plugins'), plugins = require('../plugins'),
winston = require('winston'); winston = require('winston'),
nconf = require('nconf');
(function(Admin) { (function(Admin) {
Admin.isAdmin = function(req, res, next) { Admin.isAdmin = function(req, res, next) {

@ -5,7 +5,8 @@ var user = require('./../user.js'),
utils = require('./../../public/src/utils.js'), utils = require('./../../public/src/utils.js'),
pkg = require('../../package.json'), pkg = require('../../package.json'),
meta = require('./../meta.js'), meta = require('./../meta.js'),
path = require('path'); path = require('path'),
nconf = require('nconf');
(function(Api) { (function(Api) {

@ -4,7 +4,8 @@ var user = require('./../user.js'),
fs = require('fs'), fs = require('fs'),
utils = require('./../../public/src/utils.js'), utils = require('./../../public/src/utils.js'),
path = require('path'), path = require('path'),
winston = require('winston'); winston = require('winston'),
nconf = require('nconf');
(function(User) { (function(User) {
User.create_routes = function(app) { User.create_routes = function(app) {
@ -157,7 +158,7 @@ var user = require('./../user.js'),
return; return;
} }
var absolutePath = path.join(process.cwd(), global.nconf.get('upload_path'), path.basename(oldpicture)); var absolutePath = path.join(process.cwd(), nconf.get('upload_path'), path.basename(oldpicture));
fs.unlink(absolutePath, function(err) { fs.unlink(absolutePath, function(err) {
if (err) { if (err) {
@ -178,7 +179,7 @@ var user = require('./../user.js'),
} }
var filename = uid + '-profileimg' + extension; var filename = uid + '-profileimg' + extension;
var uploadPath = path.join(process.cwd(), global.nconf.get('upload_path'), filename); var uploadPath = path.join(process.cwd(), nconf.get('upload_path'), filename);
winston.info('Attempting upload to: ' + uploadPath); winston.info('Attempting upload to: ' + uploadPath);
@ -188,7 +189,7 @@ var user = require('./../user.js'),
is.on('end', function() { is.on('end', function() {
fs.unlinkSync(tempPath); fs.unlinkSync(tempPath);
var imageUrl = global.nconf.get('upload_url') + filename; var imageUrl = nconf.get('upload_url') + filename;
user.setUserField(uid, 'uploadedpicture', imageUrl); user.setUserField(uid, 'uploadedpicture', imageUrl);
user.setUserField(uid, 'picture', imageUrl); user.setUserField(uid, 'picture', imageUrl);

@ -2,6 +2,7 @@ var path = require('path'),
async = require('async'), async = require('async'),
sm = require('sitemap'), sm = require('sitemap'),
url = require('url'), url = require('url'),
nconf = require('nconf'),
categories = require('./categories'), categories = require('./categories'),
topics = require('./topics'), topics = require('./topics'),
sitemap = { sitemap = {

@ -8,7 +8,8 @@ var RDB = require('./redis.js'),
reds = require('reds'), reds = require('reds'),
topicSearch = reds.createSearch('nodebbtopicsearch'), topicSearch = reds.createSearch('nodebbtopicsearch'),
winston = require('winston'), winston = require('winston'),
meta = require('./meta'); meta = require('./meta'),
nconf = require('nconf');
(function(ThreadTools) { (function(ThreadTools) {

@ -9,6 +9,7 @@ var utils = require('./../public/src/utils.js'),
notifications = require('./notifications.js'), notifications = require('./notifications.js'),
topics = require('./topics.js'), topics = require('./topics.js'),
async = require('async'), async = require('async'),
nconf = require('nconf'),
userSearch = require('reds').createSearch('nodebbusersearch'); userSearch = require('reds').createSearch('nodebbusersearch');
(function(User) { (function(User) {

@ -21,7 +21,8 @@ var express = require('express'),
auth = require('./routes/authentication.js'), auth = require('./routes/authentication.js'),
meta = require('./meta.js'), meta = require('./meta.js'),
feed = require('./feed'), feed = require('./feed'),
plugins = require('./plugins'); plugins = require('./plugins'),
nconf = require('nconf');
(function(app) { (function(app) {
var templates = null; var templates = null;
@ -116,6 +117,7 @@ var express = require('express'),
module.exports.init = function() { module.exports.init = function() {
templates = global.templates; templates = global.templates;
server.listen(nconf.get('PORT') || nconf.get('port'));
} }
auth.initialize(app); auth.initialize(app);
@ -517,5 +519,5 @@ var express = require('express'),
}(WebServer)); }(WebServer));
server.listen(nconf.get('PORT') || nconf.get('port'));
global.server = server; global.server = server;
Loading…
Cancel
Save