| 
									
										
										
										
											2013-04-22 16:51:32 +00:00
										 |  |  | var express = require('express'), | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 	express_namespace = require('express-namespace'), | 
					
						
							| 
									
										
										
										
											2013-04-22 15:17:41 -04:00
										 |  |  | 	WebServer = express(), | 
					
						
							|  |  |  | 	server = require('http').createServer(WebServer), | 
					
						
							| 
									
										
										
										
											2013-04-28 13:58:19 -04:00
										 |  |  | 	RedisStore = require('connect-redis')(express), | 
					
						
							|  |  |  | 	path = require('path'), | 
					
						
							| 
									
										
										
										
											2013-09-15 09:23:48 -04:00
										 |  |  | 	RDB = require('./redis'), | 
					
						
							| 
									
										
										
										
											2013-05-23 13:29:21 -04:00
										 |  |  | 	utils = require('../public/src/utils.js'), | 
					
						
							| 
									
										
										
										
											2013-07-16 13:30:48 -04:00
										 |  |  | 	pkg = require('../package.json'), | 
					
						
							| 
									
										
										
										
											2013-05-22 21:43:01 -04:00
										 |  |  | 	fs = require('fs'), | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-04 18:20:22 -04:00
										 |  |  | 	user = require('./user.js'), | 
					
						
							| 
									
										
										
										
											2013-05-14 12:13:29 -04:00
										 |  |  | 	categories = require('./categories.js'), | 
					
						
							|  |  |  | 	posts = require('./posts.js'), | 
					
						
							|  |  |  | 	topics = require('./topics.js'), | 
					
						
							| 
									
										
										
										
											2013-05-22 21:43:01 -04:00
										 |  |  | 	notifications = require('./notifications.js'), | 
					
						
							| 
									
										
										
										
											2013-05-09 03:33:53 +00:00
										 |  |  | 	admin = require('./routes/admin.js'), | 
					
						
							| 
									
										
										
										
											2013-05-14 13:04:12 -04:00
										 |  |  | 	userRoute = require('./routes/user.js'), | 
					
						
							| 
									
										
										
										
											2013-07-31 15:17:03 -04:00
										 |  |  | 	apiRoute = require('./routes/api.js'), | 
					
						
							| 
									
										
										
										
											2013-07-05 14:47:00 -04:00
										 |  |  | 	testBed = require('./routes/testbed.js'), | 
					
						
							| 
									
										
										
										
											2013-05-25 20:32:22 -04:00
										 |  |  | 	auth = require('./routes/authentication.js'), | 
					
						
							| 
									
										
										
										
											2013-09-03 23:42:26 -04:00
										 |  |  | 	meta = require('./meta.js'), | 
					
						
							| 
									
										
										
										
											2013-09-13 11:10:17 -04:00
										 |  |  | 	feed = require('./feed'), | 
					
						
							| 
									
										
										
										
											2013-09-17 15:38:50 -04:00
										 |  |  | 	plugins = require('./plugins'), | 
					
						
							|  |  |  | 	nconf = require('nconf'); | 
					
						
							| 
									
										
										
										
											2013-05-02 15:57:43 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-22 16:51:32 +00:00
										 |  |  | (function(app) { | 
					
						
							| 
									
										
										
										
											2013-06-20 16:04:58 -04:00
										 |  |  | 	var templates = null; | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-24 18:54:14 -04:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 *	`options` object	requires:	req, res | 
					
						
							|  |  |  | 	 *						accepts:	metaTags | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	app.build_header = function(options, callback) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 		var defaultMetaTags = [{ | 
					
						
							|  |  |  | 			name: 'viewport', | 
					
						
							|  |  |  | 			content: 'width=device-width, initial-scale=1.0' | 
					
						
							|  |  |  | 		}, { | 
					
						
							|  |  |  | 			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' | 
					
						
							|  |  |  | 		}, ], | 
					
						
							| 
									
										
										
										
											2013-07-24 15:19:26 -04:00
										 |  |  | 			metaString = utils.buildMetaTags(defaultMetaTags.concat(options.metaTags || [])), | 
					
						
							|  |  |  | 			templateValues = { | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 				cssSrc: meta.config['theme:src'] || nconf.get('relative_path') + '/vendor/bootstrap/css/bootstrap.min.css', | 
					
						
							|  |  |  | 				title: meta.config['title'] || 'NodeBB', | 
					
						
							|  |  |  | 				browserTitle: meta.config['title'] || 'NodeBB', | 
					
						
							| 
									
										
										
										
											2013-07-24 15:19:26 -04:00
										 |  |  | 				csrf: options.res.locals.csrf_token, | 
					
						
							| 
									
										
										
										
											2013-08-19 13:31:04 -04:00
										 |  |  | 				relative_path: nconf.get('relative_path'), | 
					
						
							| 
									
										
										
										
											2013-07-24 15:19:26 -04:00
										 |  |  | 				meta_tags: metaString | 
					
						
							|  |  |  | 			}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-11 16:12:20 -04:00
										 |  |  | 		// meta.build_title(options.title, (options.req.user ? options.req.user.uid : 0), function(err, title) {
 | 
					
						
							|  |  |  | 		// 	if (!err) templateValues.browserTitle = title;
 | 
					
						
							| 
									
										
										
										
											2013-07-24 15:19:26 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-11 16:12:20 -04:00
										 |  |  | 		// 	callback(null, templates['header'].parse(templateValues));
 | 
					
						
							|  |  |  | 		// });
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		callback(null, templates['header'].parse(templateValues)); | 
					
						
							| 
									
										
										
										
											2013-06-20 16:04:58 -04:00
										 |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2013-04-22 16:51:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-24 16:42:12 -04:00
										 |  |  | 	// Middlewares
 | 
					
						
							| 
									
										
										
										
											2013-06-28 15:56:44 -04:00
										 |  |  | 	app.use(express.favicon(path.join(__dirname, '../', 'public', 'favicon.ico'))); | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 	app.use(require('less-middleware')({ | 
					
						
							|  |  |  | 		src: path.join(__dirname, '../', 'public'), | 
					
						
							|  |  |  | 		prefix: nconf.get('relative_path') | 
					
						
							|  |  |  | 	})); | 
					
						
							| 
									
										
										
										
											2013-08-19 13:31:04 -04:00
										 |  |  | 	app.use(nconf.get('relative_path'), express.static(path.join(__dirname, '../', 'public'))); | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 	app.use(express.bodyParser()); // Puts POST vars in request.body
 | 
					
						
							| 
									
										
										
										
											2013-09-09 14:29:40 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 	app.use(express.cookieParser()); // If you want to parse cookies (res.cookies)
 | 
					
						
							| 
									
										
										
										
											2013-04-28 13:58:19 -04:00
										 |  |  | 	app.use(express.compress()); | 
					
						
							| 
									
										
										
										
											2013-04-25 11:15:03 -04:00
										 |  |  | 	app.use(express.session({ | 
					
						
							| 
									
										
										
										
											2013-04-25 12:59:31 -04:00
										 |  |  | 		store: new RedisStore({ | 
					
						
							| 
									
										
										
										
											2013-09-15 09:23:48 -04:00
										 |  |  | 			client: RDB, | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			ttl: 60 * 60 * 24 * 30 | 
					
						
							| 
									
										
										
										
											2013-04-25 12:59:31 -04:00
										 |  |  | 		}), | 
					
						
							| 
									
										
										
										
											2013-08-19 13:31:04 -04:00
										 |  |  | 		secret: nconf.get('secret'), | 
					
						
							| 
									
										
										
										
											2013-08-26 14:56:00 -04:00
										 |  |  | 		key: 'express.sid', | 
					
						
							|  |  |  | 		cookie: { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			maxAge: 60 * 60 * 24 * 30 * 1000 // 30 days
 | 
					
						
							| 
									
										
										
										
											2013-08-26 14:56:00 -04:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-04-25 11:15:03 -04:00
										 |  |  | 	})); | 
					
						
							| 
									
										
										
										
											2013-06-20 12:41:22 -04:00
										 |  |  | 	app.use(express.csrf()); | 
					
						
							|  |  |  | 	app.use(function(req, res, next) { | 
					
						
							|  |  |  | 		res.locals.csrf_token = req.session._csrf; | 
					
						
							|  |  |  | 		next(); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2013-05-17 13:36:35 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-13 11:10:17 -04:00
										 |  |  | 	// Static Directories for NodeBB Plugins
 | 
					
						
							|  |  |  | 	app.configure(function() { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 		var tailMiddlewares = []; | 
					
						
							| 
									
										
										
										
											2013-09-13 11:10:17 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		plugins.ready(function() { | 
					
						
							|  |  |  | 			// Remove some middlewares until the router is gone
 | 
					
						
							|  |  |  | 			// This is not recommended behaviour: http://stackoverflow.com/a/13691542/122353
 | 
					
						
							|  |  |  | 			// Also: https://www.exratione.com/2013/03/nodejs-abusing-express-3-to-enable-late-addition-of-middleware/
 | 
					
						
							|  |  |  | 			tailMiddlewares.push(app.stack.pop()); | 
					
						
							|  |  |  | 			tailMiddlewares.push(app.stack.pop()); | 
					
						
							|  |  |  | 			tailMiddlewares.push(app.stack.pop()); | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			for (d in plugins.staticDirs) { | 
					
						
							| 
									
										
										
										
											2013-09-13 11:10:17 -04:00
										 |  |  | 				app.use(nconf.get('relative_path') + '/plugins/' + d, express.static(plugins.staticDirs[d])); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// Push the removed middlewares back onto the application stack
 | 
					
						
							|  |  |  | 			tailMiddlewares.reverse(); | 
					
						
							|  |  |  | 			app.stack.push(tailMiddlewares.shift()); | 
					
						
							|  |  |  | 			app.stack.push(tailMiddlewares.shift()); | 
					
						
							|  |  |  | 			app.stack.push(tailMiddlewares.shift()); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-17 13:36:35 -04:00
										 |  |  | 	module.exports.init = function() { | 
					
						
							|  |  |  | 		templates = global.templates; | 
					
						
							| 
									
										
										
										
											2013-09-17 15:38:50 -04:00
										 |  |  | 		server.listen(nconf.get('PORT') || nconf.get('port')); | 
					
						
							| 
									
										
										
										
											2013-05-17 13:36:35 -04:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-09 06:26:32 +00:00
										 |  |  | 	auth.initialize(app); | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-25 12:59:31 -04:00
										 |  |  | 	app.use(function(req, res, next) { | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-19 13:31:04 -04:00
										 |  |  | 		nconf.set('https', req.secure); | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-25 12:59:31 -04:00
										 |  |  | 		next(); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-08 16:57:40 -04:00
										 |  |  | 	app.use(app.router); | 
					
						
							| 
									
										
										
										
											2013-07-08 16:02:54 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	app.use(function(req, res, next) { | 
					
						
							|  |  |  | 		res.status(404); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// respond with html page
 | 
					
						
							|  |  |  | 		if (req.accepts('html')) { | 
					
						
							|  |  |  | 			//res.json('404', { url: req.url });
 | 
					
						
							| 
									
										
										
										
											2013-08-19 13:31:04 -04:00
										 |  |  | 			res.redirect(nconf.get('relative_path') + '/404'); | 
					
						
							| 
									
										
										
										
											2013-07-08 16:02:54 -04:00
										 |  |  | 			return; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// respond with json
 | 
					
						
							|  |  |  | 		if (req.accepts('json')) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			res.send({ | 
					
						
							|  |  |  | 				error: 'Not found' | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2013-07-08 16:02:54 -04:00
										 |  |  | 			return; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-08 16:02:54 -04:00
										 |  |  | 		// default to plain-text. send()
 | 
					
						
							|  |  |  | 		res.type('txt').send('Not found'); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	app.use(function(err, req, res, next) { | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-08 16:02:54 -04:00
										 |  |  | 		// we may use properties of the error object
 | 
					
						
							|  |  |  | 		// here and next(err) appropriately, or if
 | 
					
						
							|  |  |  | 		// we possibly recovered from the error, simply next().
 | 
					
						
							|  |  |  | 		console.error(err.stack); | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-08 16:02:54 -04:00
										 |  |  | 		res.status(err.status || 500); | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 		res.json('500', { | 
					
						
							|  |  |  | 			error: err.message | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-02 09:13:09 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-09 06:26:32 +00:00
										 |  |  | 	app.create_route = function(url, tpl) { // to remove
 | 
					
						
							| 
									
										
										
										
											2013-05-07 21:29:28 +00:00
										 |  |  | 		return '<script>templates.ready(function(){ajaxify.go("' + url + '", null, "' + tpl + '");});</script>'; | 
					
						
							| 
									
										
										
										
											2013-05-09 06:26:32 +00:00
										 |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-10 21:31:58 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-19 13:31:04 -04:00
										 |  |  | 	app.namespace(nconf.get('relative_path'), function() { | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		auth.create_routes(app); | 
					
						
							|  |  |  | 		admin.create_routes(app); | 
					
						
							|  |  |  | 		userRoute.create_routes(app); | 
					
						
							|  |  |  | 		testBed.create_routes(app); | 
					
						
							| 
									
										
										
										
											2013-07-31 15:17:03 -04:00
										 |  |  | 		apiRoute.create_routes(app); | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-10 21:31:58 -04:00
										 |  |  | 		// Basic Routes (entirely client-side parsed, goal is to move the rest of the crap in this file into this one section)
 | 
					
						
							|  |  |  | 		(function() { | 
					
						
							| 
									
										
										
										
											2013-07-28 18:27:49 -04:00
										 |  |  | 			var routes = ['login', 'register', 'account', 'recent', 'unread', 'popular', 'active', '403', '404']; | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			for (var i = 0, ii = routes.length; i < ii; i++) { | 
					
						
							| 
									
										
										
										
											2013-07-10 21:31:58 -04:00
										 |  |  | 				(function(route) { | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-10 21:31:58 -04:00
										 |  |  | 					app.get('/' + route, function(req, res) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 						if ((route === 'login' || route === 'register') && (req.user && req.user.uid > 0)) { | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-23 14:55:25 -04:00
										 |  |  | 							user.getUserField(req.user.uid, 'userslug', function(err, userslug) { | 
					
						
							| 
									
										
										
										
											2013-09-18 16:01:54 -04:00
										 |  |  | 								res.redirect('/user/' + userslug); | 
					
						
							| 
									
										
										
										
											2013-07-10 21:31:58 -04:00
										 |  |  | 							}); | 
					
						
							|  |  |  | 							return; | 
					
						
							|  |  |  | 						} | 
					
						
							| 
									
										
										
										
											2013-07-24 15:19:26 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 						app.build_header({ | 
					
						
							|  |  |  | 							req: req, | 
					
						
							|  |  |  | 							res: res | 
					
						
							|  |  |  | 						}, function(err, header) { | 
					
						
							| 
									
										
										
										
											2013-07-24 18:54:14 -04:00
										 |  |  | 							res.send(header + app.create_route(route) + templates['footer']); | 
					
						
							|  |  |  | 						}); | 
					
						
							| 
									
										
										
										
											2013-07-10 21:31:58 -04:00
										 |  |  | 					}); | 
					
						
							|  |  |  | 				}(routes[i])); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}()); | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		app.get('/', function(req, res) { | 
					
						
							| 
									
										
										
										
											2013-07-24 18:54:14 -04:00
										 |  |  | 			async.parallel({ | 
					
						
							|  |  |  | 				"header": function(next) { | 
					
						
							| 
									
										
										
										
											2013-07-25 15:34:22 -04:00
										 |  |  | 					app.build_header({ | 
					
						
							|  |  |  | 						req: req, | 
					
						
							|  |  |  | 						res: res, | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 						metaTags: [{ | 
					
						
							|  |  |  | 							name: "title", | 
					
						
							|  |  |  | 							content: meta.config.title || 'NodeBB' | 
					
						
							|  |  |  | 						}, { | 
					
						
							|  |  |  | 							name: "description", | 
					
						
							|  |  |  | 							content: meta.config.description || '' | 
					
						
							|  |  |  | 						}, { | 
					
						
							|  |  |  | 							property: 'og:title', | 
					
						
							|  |  |  | 							content: 'Index | ' + (meta.config.title || 'NodeBB') | 
					
						
							|  |  |  | 						}, { | 
					
						
							|  |  |  | 							property: "og:type", | 
					
						
							|  |  |  | 							content: 'website' | 
					
						
							|  |  |  | 						}] | 
					
						
							| 
									
										
										
										
											2013-07-25 15:34:22 -04:00
										 |  |  | 					}, next); | 
					
						
							| 
									
										
										
										
											2013-07-24 18:54:14 -04:00
										 |  |  | 				}, | 
					
						
							|  |  |  | 				"categories": function(next) { | 
					
						
							|  |  |  | 					categories.getAllCategories(function(returnData) { | 
					
						
							|  |  |  | 						next(null, returnData); | 
					
						
							|  |  |  | 					}, 0); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			}, function(err, data) { | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 				res.send( | 
					
						
							| 
									
										
										
										
											2013-07-24 18:54:14 -04:00
										 |  |  | 					data.header + | 
					
						
							|  |  |  | 					'\n\t<noscript>\n' + templates['noscript/header'] + templates['noscript/home'].parse(data.categories) + '\n\t</noscript>' + | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 					app.create_route('') + | 
					
						
							|  |  |  | 					templates['footer'] | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2013-07-24 18:54:14 -04:00
										 |  |  | 			}) | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		app.get('/topic/:topic_id/:slug?', function(req, res) { | 
					
						
							|  |  |  | 			var tid = req.params.topic_id; | 
					
						
							| 
									
										
										
										
											2013-09-04 13:52:28 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-21 16:16:07 -04:00
										 |  |  | 			if (tid.match(/^\d+\.rss$/)) { | 
					
						
							| 
									
										
										
										
											2013-09-03 23:42:26 -04:00
										 |  |  | 				tid = tid.slice(0, -4); | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 				var rssPath = path.join(__dirname, '../', 'feeds/topics', tid + '.rss'), | 
					
						
							| 
									
										
										
										
											2013-09-03 23:42:26 -04:00
										 |  |  | 					loadFeed = function() { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 						fs.readFile(rssPath, function(err, data) { | 
					
						
							| 
									
										
										
										
											2013-09-04 13:52:28 -04:00
										 |  |  | 							if (err) res.type('text').send(404, "Unable to locate an rss feed at this location."); | 
					
						
							|  |  |  | 							else res.type('xml').set('Content-Length', data.length).send(data); | 
					
						
							| 
									
										
										
										
											2013-09-03 23:42:26 -04:00
										 |  |  | 						}); | 
					
						
							| 
									
										
										
										
											2013-09-04 13:52:28 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-03 23:42:26 -04:00
										 |  |  | 					}; | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-03 23:42:26 -04:00
										 |  |  | 				if (!fs.existsSync(rssPath)) { | 
					
						
							| 
									
										
										
										
											2013-09-15 07:58:02 -04:00
										 |  |  | 					feed.updateTopic(tid, function(err) { | 
					
						
							|  |  |  | 						if (err) res.redirect('/404'); | 
					
						
							|  |  |  | 						else loadFeed(); | 
					
						
							| 
									
										
										
										
											2013-09-03 23:42:26 -04:00
										 |  |  | 					}); | 
					
						
							|  |  |  | 				} else loadFeed(); | 
					
						
							| 
									
										
										
										
											2013-09-04 13:52:28 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				return; | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2013-06-14 13:01:24 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-24 19:27:25 -04:00
										 |  |  | 			async.waterfall([ | 
					
						
							|  |  |  | 				function(next) { | 
					
						
							| 
									
										
										
										
											2013-09-03 13:11:21 -04:00
										 |  |  | 					topics.getTopicWithPosts(tid, ((req.user) ? req.user.uid : 0), 0, -1, function(err, topicData) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 						if (topicData) { | 
					
						
							|  |  |  | 							if (topicData.deleted === '1' && topicData.expose_tools === 0) | 
					
						
							| 
									
										
										
										
											2013-08-24 18:51:24 -04:00
										 |  |  | 								return next(new Error('Topic deleted'), null); | 
					
						
							|  |  |  | 						} | 
					
						
							| 
									
										
										
										
											2013-08-24 18:47:10 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-24 19:27:25 -04:00
										 |  |  | 						next(err, topicData); | 
					
						
							|  |  |  | 					}); | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				function(topicData, next) { | 
					
						
							| 
									
										
										
										
											2013-09-03 12:36:48 -04:00
										 |  |  | 					var lastMod = 0, | 
					
						
							| 
									
										
										
										
											2013-07-25 15:34:22 -04:00
										 |  |  | 						timestamp; | 
					
						
							| 
									
										
										
										
											2013-08-16 17:04:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 					for (var x = 0, numPosts = topicData.posts.length; x < numPosts; x++) { | 
					
						
							| 
									
										
										
										
											2013-07-25 15:34:22 -04:00
										 |  |  | 						timestamp = parseInt(topicData.posts[x].timestamp, 10); | 
					
						
							|  |  |  | 						if (timestamp > lastMod) lastMod = timestamp; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-24 19:27:25 -04:00
										 |  |  | 					app.build_header({ | 
					
						
							|  |  |  | 						req: req, | 
					
						
							|  |  |  | 						res: res, | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 						metaTags: [{ | 
					
						
							|  |  |  | 							name: "title", | 
					
						
							|  |  |  | 							content: topicData.topic_name | 
					
						
							|  |  |  | 						}, { | 
					
						
							|  |  |  | 							property: 'og:title', | 
					
						
							|  |  |  | 							content: topicData.topic_name + ' | ' + (meta.config.title || 'NodeBB') | 
					
						
							|  |  |  | 						}, { | 
					
						
							|  |  |  | 							property: "og:type", | 
					
						
							|  |  |  | 							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 | 
					
						
							|  |  |  | 						}] | 
					
						
							| 
									
										
										
										
											2013-07-24 19:27:25 -04:00
										 |  |  | 					}, function(err, header) { | 
					
						
							|  |  |  | 						next(err, { | 
					
						
							|  |  |  | 							header: header, | 
					
						
							|  |  |  | 							topics: topicData | 
					
						
							|  |  |  | 						}); | 
					
						
							|  |  |  | 					}); | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 			], function(err, data) { | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 				if (err) return res.redirect('404'); | 
					
						
							| 
									
										
										
										
											2013-07-24 19:27:25 -04:00
										 |  |  | 				var topic_url = tid + (req.params.slug ? '/' + req.params.slug : ''); | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-24 19:27:25 -04:00
										 |  |  | 				res.send( | 
					
						
							|  |  |  | 					data.header + | 
					
						
							|  |  |  | 					'\n\t<noscript>\n' + templates['noscript/header'] + templates['noscript/topic'].parse(data.topics) + '\n\t</noscript>' + | 
					
						
							|  |  |  | 					'\n\t<script>templates.ready(function(){ajaxify.go("topic/' + topic_url + '");});</script>' + | 
					
						
							|  |  |  | 					templates['footer'] | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		app.get('/category/:category_id/:slug?', function(req, res) { | 
					
						
							|  |  |  | 			var cid = req.params.category_id; | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-21 16:32:59 -04:00
										 |  |  | 			if (cid.match(/^\d+\.rss$/)) { | 
					
						
							| 
									
										
										
										
											2013-09-04 13:52:28 -04:00
										 |  |  | 				cid = cid.slice(0, -4); | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 				var rssPath = path.join(__dirname, '../', 'feeds/categories', cid + '.rss'), | 
					
						
							| 
									
										
										
										
											2013-09-04 13:52:28 -04:00
										 |  |  | 					loadFeed = function() { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 						fs.readFile(rssPath, function(err, data) { | 
					
						
							| 
									
										
										
										
											2013-09-04 13:52:28 -04:00
										 |  |  | 							if (err) res.type('text').send(404, "Unable to locate an rss feed at this location."); | 
					
						
							|  |  |  | 							else res.type('xml').set('Content-Length', data.length).send(data); | 
					
						
							|  |  |  | 						}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				if (!fs.existsSync(rssPath)) { | 
					
						
							| 
									
										
										
										
											2013-09-15 07:58:02 -04:00
										 |  |  | 					feed.updateCategory(cid, function(err) { | 
					
						
							|  |  |  | 						if (err) res.redirect('/404'); | 
					
						
							|  |  |  | 						else loadFeed(); | 
					
						
							| 
									
										
										
										
											2013-09-04 13:52:28 -04:00
										 |  |  | 					}); | 
					
						
							|  |  |  | 				} else loadFeed(); | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				return; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2013-07-21 16:16:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-24 19:27:25 -04:00
										 |  |  | 			async.waterfall([ | 
					
						
							|  |  |  | 				function(next) { | 
					
						
							|  |  |  | 					categories.getCategoryById(cid, 0, function(err, categoryData) { | 
					
						
							| 
									
										
										
										
											2013-08-30 14:47:31 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 						if (categoryData) { | 
					
						
							|  |  |  | 							if (categoryData.disabled === '1') | 
					
						
							| 
									
										
										
										
											2013-08-30 14:47:31 -04:00
										 |  |  | 								return next(new Error('Category disabled'), null); | 
					
						
							|  |  |  | 						} | 
					
						
							| 
									
										
										
										
											2013-07-24 19:27:25 -04:00
										 |  |  | 						next(err, categoryData); | 
					
						
							|  |  |  | 					}); | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				function(categoryData, next) { | 
					
						
							|  |  |  | 					app.build_header({ | 
					
						
							|  |  |  | 						req: req, | 
					
						
							|  |  |  | 						res: res, | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 						metaTags: [{ | 
					
						
							|  |  |  | 							name: 'title', | 
					
						
							|  |  |  | 							content: categoryData.category_name | 
					
						
							|  |  |  | 						}, { | 
					
						
							|  |  |  | 							name: 'description', | 
					
						
							|  |  |  | 							content: categoryData.category_description | 
					
						
							|  |  |  | 						}, { | 
					
						
							|  |  |  | 							property: "og:type", | 
					
						
							|  |  |  | 							content: 'website' | 
					
						
							|  |  |  | 						}] | 
					
						
							| 
									
										
										
										
											2013-07-24 19:27:25 -04:00
										 |  |  | 					}, function(err, header) { | 
					
						
							|  |  |  | 						next(err, { | 
					
						
							|  |  |  | 							header: header, | 
					
						
							|  |  |  | 							categories: categoryData | 
					
						
							|  |  |  | 						}); | 
					
						
							|  |  |  | 					}); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			], function(err, data) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 				if (err) return res.redirect('404'); | 
					
						
							| 
									
										
										
										
											2013-07-24 19:27:25 -04:00
										 |  |  | 				var category_url = cid + (req.params.slug ? '/' + req.params.slug : ''); | 
					
						
							| 
									
										
										
										
											2013-07-23 17:21:44 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-24 19:27:25 -04:00
										 |  |  | 				res.send( | 
					
						
							|  |  |  | 					data.header + | 
					
						
							|  |  |  | 					'\n\t<noscript>\n' + templates['noscript/header'] + templates['noscript/category'].parse(data.categories) + '\n\t</noscript>' + | 
					
						
							|  |  |  | 					'\n\t<script>templates.ready(function(){ajaxify.go("category/' + category_url + '");});</script>' + | 
					
						
							|  |  |  | 					templates['footer'] | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2013-05-30 16:02:13 -04:00
										 |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-05-30 16:02:13 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 		app.get('/confirm/:code', function(req, res) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			app.build_header({ | 
					
						
							|  |  |  | 				req: req, | 
					
						
							|  |  |  | 				res: res | 
					
						
							|  |  |  | 			}, function(err, header) { | 
					
						
							| 
									
										
										
										
											2013-07-24 18:54:14 -04:00
										 |  |  | 				res.send(header + '<script>templates.ready(function(){ajaxify.go("confirm/' + req.params.code + '");});</script>' + templates['footer']); | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-05-30 16:02:13 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-17 22:35:16 -04:00
										 |  |  | 		app.get('/sitemap.xml', function(req, res) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			var sitemap = require('./sitemap.js'); | 
					
						
							| 
									
										
										
										
											2013-07-17 22:35:16 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			sitemap.render(function(xml) { | 
					
						
							|  |  |  | 				res.type('xml').set('Content-Length', xml.length).send(xml); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-20 11:19:08 -04:00
										 |  |  | 		app.get('/robots.txt', function(req, res) { | 
					
						
							|  |  |  | 			res.set('Content-Type', 'text/plain'); | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			res.send("User-agent: *\n" + | 
					
						
							|  |  |  | 				"Disallow: \n" + | 
					
						
							|  |  |  | 				"Disallow: /admin/\n" + | 
					
						
							|  |  |  | 				"Sitemap: " + nconf.get('url') + "sitemap.xml"); | 
					
						
							| 
									
										
										
										
											2013-07-20 11:19:08 -04:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 		app.get('/cid/:cid', function(req, res) { | 
					
						
							| 
									
										
										
										
											2013-07-22 16:47:41 -04:00
										 |  |  | 			categories.getCategoryData(req.params.cid, function(err, data) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 				if (data) | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 					res.send(data); | 
					
						
							|  |  |  | 				else | 
					
						
							|  |  |  | 					res.send(404, "Category doesn't exist!"); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-07-05 16:44:11 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 		app.get('/tid/:tid', function(req, res) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			topics.getTopicData(req.params.tid, function(data) { | 
					
						
							|  |  |  | 				if (data) | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 					res.send(data); | 
					
						
							|  |  |  | 				else | 
					
						
							|  |  |  | 					res.send(404, "Topic doesn't exist!"); | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2013-05-28 14:11:27 -04:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-04-25 21:55:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 		app.get('/pid/:pid', function(req, res) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			posts.getPostData(req.params.pid, function(data) { | 
					
						
							|  |  |  | 				if (data) | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 					res.send(data); | 
					
						
							|  |  |  | 				else | 
					
						
							|  |  |  | 					res.send(404, "Post doesn't exist!"); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-23 03:07:27 +08:00
										 |  |  | 		app.get('/outgoing', function(req, res) { | 
					
						
							| 
									
										
										
										
											2013-08-08 15:04:22 -04:00
										 |  |  | 			if (!req.query.url) return res.redirect('/404'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			app.build_header({ | 
					
						
							|  |  |  | 				req: req, | 
					
						
							|  |  |  | 				res: res | 
					
						
							|  |  |  | 			}, function(err, header) { | 
					
						
							| 
									
										
										
										
											2013-08-08 15:04:22 -04:00
										 |  |  | 				res.send( | 
					
						
							|  |  |  | 					header + | 
					
						
							| 
									
										
										
										
											2013-08-26 12:22:55 -04:00
										 |  |  | 					'\n\t<script>templates.ready(function(){ajaxify.go("outgoing?url=' + encodeURIComponent(req.query.url) + '", null, null, true);});</script>' + | 
					
						
							| 
									
										
										
										
											2013-08-08 15:04:22 -04:00
										 |  |  | 					templates['footer'] | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-08-03 20:54:16 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		app.get('/search', function(req, res) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			app.build_header({ | 
					
						
							|  |  |  | 				req: req, | 
					
						
							|  |  |  | 				res: res | 
					
						
							|  |  |  | 			}, function(err, header) { | 
					
						
							| 
									
										
										
										
											2013-08-03 20:54:16 -04:00
										 |  |  | 				res.send(header + app.create_route("search", null, "search") + templates['footer']); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-03 20:54:16 -04:00
										 |  |  | 		app.get('/search/:term', function(req, res) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			app.build_header({ | 
					
						
							|  |  |  | 				req: req, | 
					
						
							|  |  |  | 				res: res | 
					
						
							|  |  |  | 			}, function(err, header) { | 
					
						
							|  |  |  | 				res.send(header + app.create_route("search/" + req.params.term, null, "search") + templates['footer']); | 
					
						
							| 
									
										
										
										
											2013-08-03 20:54:16 -04:00
										 |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-06 15:46:15 -04:00
										 |  |  | 		app.get('/reindex', function(req, res) { | 
					
						
							|  |  |  | 			topics.reIndexAll(function(err) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 				if (err) { | 
					
						
							| 
									
										
										
										
											2013-08-29 13:40:04 -04:00
										 |  |  | 					return res.json(err); | 
					
						
							| 
									
										
										
										
											2013-08-06 15:46:15 -04:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2013-08-29 13:40:04 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				user.reIndexAll(function(err) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 					if (err) { | 
					
						
							| 
									
										
										
										
											2013-08-29 13:40:04 -04:00
										 |  |  | 						return res.json(err); | 
					
						
							|  |  |  | 					} else { | 
					
						
							|  |  |  | 						res.send('Topics and users reindexed'); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				}); | 
					
						
							| 
									
										
										
										
											2013-08-06 15:46:15 -04:00
										 |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-05-05 13:05:05 -04:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2013-06-20 12:41:22 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-22 16:51:32 +00:00
										 |  |  | }(WebServer)); | 
					
						
							| 
									
										
										
										
											2013-04-22 15:17:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-17 15:38:50 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | global.server = server; |