| 
									
										
										
										
											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'), | 
					
						
							| 
									
										
										
										
											2013-09-29 20:27:52 -04:00
										 |  |  | 	nconf = require('nconf'), | 
					
						
							| 
									
										
										
										
											2013-09-30 16:28:22 -04:00
										 |  |  | 	winston = require('winston'), | 
					
						
							|  |  |  | 	validator = require('validator'); | 
					
						
							| 
									
										
										
										
											2013-05-02 15:57:43 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | (function (app) { | 
					
						
							| 
									
										
										
										
											2013-09-24 12:33:51 -04:00
										 |  |  | 	var templates = null, | 
					
						
							|  |  |  | 		clientScripts; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Minify client-side libraries
 | 
					
						
							|  |  |  | 	meta.js.get(function (err, scripts) { | 
					
						
							|  |  |  | 		clientScripts = scripts.map(function (script) { | 
					
						
							|  |  |  | 			return script = { | 
					
						
							|  |  |  | 				script: script | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-24 18:54:14 -04:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 *	`options` object	requires:	req, res | 
					
						
							|  |  |  | 	 *						accepts:	metaTags | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 	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-09-24 12:33:51 -04:00
										 |  |  | 		}], | 
					
						
							| 
									
										
										
										
											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', | 
					
						
							| 
									
										
										
										
											2013-09-23 15:21:04 -04:00
										 |  |  | 				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-09-24 12:33:51 -04:00
										 |  |  | 				meta_tags: metaString, | 
					
						
							|  |  |  | 				clientScripts: clientScripts | 
					
						
							| 
									
										
										
										
											2013-07-24 15:19:26 -04:00
										 |  |  | 			}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-24 15:15:39 -04:00
										 |  |  | 		translator.translate(templates.header.parse(templateValues), function(template) { | 
					
						
							| 
									
										
										
										
											2013-09-24 14:14:26 -04:00
										 |  |  | 			callback(null, template); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											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-09-29 20:27:52 -04:00
										 |  |  | 	app.configure(function() { | 
					
						
							|  |  |  | 		async.series([ | 
					
						
							|  |  |  | 			function(next) { | 
					
						
							|  |  |  | 				// Pre-router middlewares
 | 
					
						
							|  |  |  | 				app.use(express.compress()); | 
					
						
							| 
									
										
										
										
											2013-10-02 00:25:46 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				if(nconf.get("express:logger") == true || meta.config.loggerStatus > 0) { | 
					
						
							| 
									
										
										
										
											2013-10-02 01:15:45 -04:00
										 |  |  | 					/* | 
					
						
							|  |  |  | 					 * HTTP request logging is enabled | 
					
						
							|  |  |  | 					 */ | 
					
						
							| 
									
										
										
										
											2013-10-02 00:25:46 -04:00
										 |  |  | 					var loggerObj = {}; | 
					
						
							|  |  |  | 					if(meta.config.loggerPath) { | 
					
						
							|  |  |  | 						loggerObj.stream = fs.createWriteStream(meta.config.loggerPath, {flags: 'a'}); | 
					
						
							|  |  |  | 					} | 
					
						
							| 
									
										
										
										
											2013-10-02 01:15:45 -04:00
										 |  |  | 					else { | 
					
						
							|  |  |  | 						loggerObj.stream = process.stdout; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					meta.config.loggerStream = loggerObj.stream; | 
					
						
							| 
									
										
										
										
											2013-10-02 00:25:46 -04:00
										 |  |  | 					app.use(express.logger(loggerObj)); | 
					
						
							| 
									
										
										
										
											2013-10-01 22:38:13 -04:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2013-10-02 00:25:46 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-29 20:27:52 -04:00
										 |  |  | 				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'), | 
					
						
							|  |  |  | 					yuicompress: true | 
					
						
							|  |  |  | 				})); | 
					
						
							|  |  |  | 				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.cookieParser()); // If you want to parse cookies (res.cookies)
 | 
					
						
							|  |  |  | 				app.use(express.session({ | 
					
						
							|  |  |  | 					store: new RedisStore({ | 
					
						
							|  |  |  | 						client: RDB, | 
					
						
							|  |  |  | 						ttl: 60 * 60 * 24 * 30 | 
					
						
							|  |  |  | 					}), | 
					
						
							|  |  |  | 					secret: nconf.get('secret'), | 
					
						
							|  |  |  | 					key: 'express.sid', | 
					
						
							|  |  |  | 					cookie: { | 
					
						
							|  |  |  | 						maxAge: 60 * 60 * 24 * 30 * 1000 // 30 days
 | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				})); | 
					
						
							|  |  |  | 				app.use(express.csrf()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				// Local vars, other assorted setup
 | 
					
						
							|  |  |  | 				app.use(function (req, res, next) { | 
					
						
							|  |  |  | 					nconf.set('https', req.secure); | 
					
						
							|  |  |  | 					res.locals.csrf_token = req.session._csrf; | 
					
						
							|  |  |  | 					next(); | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				// Authentication Routes
 | 
					
						
							|  |  |  | 				auth.initialize(app); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				next(); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			function(next) { | 
					
						
							|  |  |  | 				// Static Directories for NodeBB Plugins
 | 
					
						
							|  |  |  | 				plugins.ready(function () { | 
					
						
							|  |  |  | 					for (d in plugins.staticDirs) { | 
					
						
							|  |  |  | 						app.use(nconf.get('relative_path') + '/plugins/' + d, express.static(plugins.staticDirs[d])); | 
					
						
							|  |  |  | 						winston.info('Static directory routed for plugin: ' + d); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					next(); | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			function(next) { | 
					
						
							|  |  |  | 				// Router & post-router middlewares
 | 
					
						
							|  |  |  | 				app.use(app.router); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				// 404 catch-all
 | 
					
						
							|  |  |  | 				app.use(function (req, res, next) { | 
					
						
							|  |  |  | 					res.status(404); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					// respond with html page
 | 
					
						
							|  |  |  | 					if (req.accepts('html')) { | 
					
						
							|  |  |  | 						res.redirect(nconf.get('relative_path') + '/404'); | 
					
						
							|  |  |  | 						return; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					// respond with json
 | 
					
						
							|  |  |  | 					if (req.accepts('json')) { | 
					
						
							|  |  |  | 						res.send({ | 
					
						
							|  |  |  | 							error: 'Not found' | 
					
						
							|  |  |  | 						}); | 
					
						
							|  |  |  | 						return; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					// default to plain-text. send()
 | 
					
						
							|  |  |  | 					res.type('txt').send('Not found'); | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				app.use(function (err, req, res, next) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					// 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); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					res.status(err.status || 500); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					res.json('500', { | 
					
						
							|  |  |  | 						error: err.message | 
					
						
							|  |  |  | 					}); | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				next(); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		], function(err) { | 
					
						
							|  |  |  | 			if (err) { | 
					
						
							|  |  |  | 				winston.error('Errors were encountered while attempting to initialise NodeBB.'); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				winston.info('Middlewares loaded.'); | 
					
						
							| 
									
										
										
										
											2013-09-13 11:10:17 -04:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 	module.exports.init = function () { | 
					
						
							| 
									
										
										
										
											2013-05-17 13:36:35 -04:00
										 |  |  | 		templates = global.templates; | 
					
						
							| 
									
										
										
										
											2013-09-24 14:14:26 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// translate all static templates served by webserver here. ex. footer, logout
 | 
					
						
							|  |  |  | 		translator.translate(templates['footer'].toString(), function(parsedTemplate) { | 
					
						
							|  |  |  | 			templates['footer'] = parsedTemplate; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 		translator.translate(templates['logout'].toString(), function(parsedTemplate) { | 
					
						
							|  |  |  | 			templates['logout'] = parsedTemplate; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-29 21:03:29 -05:00
										 |  |  | 		server.listen(nconf.get('PORT') || nconf.get('port'), nconf.get('bind_address')); | 
					
						
							| 
									
										
										
										
											2013-05-17 13:36:35 -04:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04: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-09-23 12:50:27 -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)
 | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 		(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-09-23 12:50:27 -04:00
										 |  |  | 				(function (route) { | 
					
						
							| 
									
										
										
										
											2013-08-23 13:14:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -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-09-23 12:50:27 -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 | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 						}, 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 		app.get('/', function (req, res) { | 
					
						
							| 
									
										
										
										
											2013-07-24 18:54:14 -04:00
										 |  |  | 			async.parallel({ | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 				"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
										 |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 				"categories": function (next) { | 
					
						
							|  |  |  | 					categories.getAllCategories(function (returnData) { | 
					
						
							|  |  |  | 						returnData.categories = returnData.categories.filter(function (category) { | 
					
						
							| 
									
										
										
										
											2013-09-20 20:43:02 -04:00
										 |  |  | 							if (category.disabled !== '1') return true; | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 							else return false; | 
					
						
							| 
									
										
										
										
											2013-09-20 20:43:02 -04:00
										 |  |  | 						}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-24 18:54:14 -04:00
										 |  |  | 						next(null, returnData); | 
					
						
							|  |  |  | 					}, 0); | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 			}, 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 		app.get('/topic/:topic_id/:slug?', function (req, res) { | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 			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-23 12:50:27 -04:00
										 |  |  | 					loadFeed = function () { | 
					
						
							|  |  |  | 						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-23 12:50:27 -04:00
										 |  |  | 					feed.updateTopic(tid, function (err) { | 
					
						
							| 
									
										
										
										
											2013-09-15 07:58:02 -04:00
										 |  |  | 						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([ | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 				function (next) { | 
					
						
							|  |  |  | 					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); | 
					
						
							|  |  |  | 					}); | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 				function (topicData, next) { | 
					
						
							| 
									
										
										
										
											2013-09-03 12:36:48 -04:00
										 |  |  | 					var lastMod = 0, | 
					
						
							| 
									
										
										
										
											2013-10-01 11:54:00 -04:00
										 |  |  | 						timestamp, | 
					
						
							|  |  |  | 						sanitize = validator.sanitize; | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2013-09-30 16:28:22 -04:00
										 |  |  | 						}, { | 
					
						
							|  |  |  | 							name: "description", | 
					
						
							| 
									
										
										
										
											2013-10-01 11:54:00 -04:00
										 |  |  | 							content: sanitize(topicData.main_posts[0].content.substr(0, 255)).escape().replace('\n', '') | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 						}, { | 
					
						
							|  |  |  | 							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-09-23 12:50:27 -04:00
										 |  |  | 					}, function (err, header) { | 
					
						
							| 
									
										
										
										
											2013-07-24 19:27:25 -04:00
										 |  |  | 						next(err, { | 
					
						
							|  |  |  | 							header: header, | 
					
						
							|  |  |  | 							topics: topicData | 
					
						
							|  |  |  | 						}); | 
					
						
							|  |  |  | 					}); | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 			], 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
										 |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 		app.get('/category/:category_id/:slug?', function (req, res) { | 
					
						
							| 
									
										
										
										
											2013-07-10 16:22:03 -04:00
										 |  |  | 			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-23 12:50:27 -04:00
										 |  |  | 					loadFeed = function () { | 
					
						
							|  |  |  | 						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-23 12:50:27 -04:00
										 |  |  | 					feed.updateCategory(cid, function (err) { | 
					
						
							| 
									
										
										
										
											2013-09-15 07:58:02 -04:00
										 |  |  | 						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([ | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 				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); | 
					
						
							|  |  |  | 					}); | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 				function (categoryData, next) { | 
					
						
							| 
									
										
										
										
											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: categoryData.category_name | 
					
						
							|  |  |  | 						}, { | 
					
						
							|  |  |  | 							name: 'description', | 
					
						
							|  |  |  | 							content: categoryData.category_description | 
					
						
							|  |  |  | 						}, { | 
					
						
							|  |  |  | 							property: "og:type", | 
					
						
							|  |  |  | 							content: 'website' | 
					
						
							|  |  |  | 						}] | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 					}, function (err, header) { | 
					
						
							| 
									
										
										
										
											2013-07-24 19:27:25 -04:00
										 |  |  | 						next(err, { | 
					
						
							|  |  |  | 							header: header, | 
					
						
							|  |  |  | 							categories: categoryData | 
					
						
							|  |  |  | 						}); | 
					
						
							|  |  |  | 					}); | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 			], 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-09-23 12:50:27 -04:00
										 |  |  | 		app.get('/confirm/:code', function (req, res) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			app.build_header({ | 
					
						
							|  |  |  | 				req: req, | 
					
						
							|  |  |  | 				res: res | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 			}, 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-09-23 12:50:27 -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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 			sitemap.render(function (xml) { | 
					
						
							| 
									
										
										
										
											2013-07-17 22:35:16 -04:00
										 |  |  | 				res.type('xml').set('Content-Length', xml.length).send(xml); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 		app.get('/robots.txt', function (req, res) { | 
					
						
							| 
									
										
										
										
											2013-07-20 11:19:08 -04:00
										 |  |  | 			res.set('Content-Type', 'text/plain'); | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			res.send("User-agent: *\n" + | 
					
						
							|  |  |  | 				"Disallow: /admin/\n" + | 
					
						
							|  |  |  | 				"Sitemap: " + nconf.get('url') + "sitemap.xml"); | 
					
						
							| 
									
										
										
										
											2013-07-20 11:19:08 -04:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 		app.get('/cid/:cid', function (req, res) { | 
					
						
							|  |  |  | 			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-09-23 12:50:27 -04:00
										 |  |  | 		app.get('/tid/:tid', function (req, res) { | 
					
						
							|  |  |  | 			topics.getTopicData(req.params.tid, function (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, "Topic doesn't exist!"); | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2013-05-28 14:11:27 -04:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-04-25 21:55:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 		app.get('/pid/:pid', function (req, res) { | 
					
						
							|  |  |  | 			posts.getPostData(req.params.pid, function (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, "Post doesn't exist!"); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04: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 | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 			}, 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 		app.get('/search', function (req, res) { | 
					
						
							| 
									
										
										
										
											2013-09-23 14:40:31 -04:00
										 |  |  | 			if (!req.user) | 
					
						
							|  |  |  | 				return res.redirect('/403'); | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			app.build_header({ | 
					
						
							|  |  |  | 				req: req, | 
					
						
							|  |  |  | 				res: res | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 			}, 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-09-23 12:50:27 -04:00
										 |  |  | 		app.get('/search/:term', function (req, res) { | 
					
						
							| 
									
										
										
										
											2013-09-23 14:40:31 -04:00
										 |  |  | 			if (!req.user) | 
					
						
							|  |  |  | 				return res.redirect('/403'); | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 			app.build_header({ | 
					
						
							|  |  |  | 				req: req, | 
					
						
							|  |  |  | 				res: res | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -04:00
										 |  |  | 			}, function (err, header) { | 
					
						
							| 
									
										
										
										
											2013-09-17 13:09:37 -04:00
										 |  |  | 				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-09-23 12:50:27 -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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-23 12:50:27 -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-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-10-01 22:38:13 -04:00
										 |  |  | global.server = server; |