mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-30 18:46:01 +01:00 
			
		
		
		
	feat: #7743, webserver
This commit is contained in:
		| @@ -761,3 +761,5 @@ Flags.notify = function (flagObj, uid, callback) { | |||||||
| 		break; | 		break; | ||||||
| 	} | 	} | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | require('./promisify')(Flags); | ||||||
|   | |||||||
| @@ -125,9 +125,9 @@ Plugins.reload = async function () { | |||||||
| 	}); | 	}); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| Plugins.reloadRoutes = async function (router) { | Plugins.reloadRoutes = async function (params) { | ||||||
| 	var controllers = require('../controllers'); | 	var controllers = require('../controllers'); | ||||||
| 	await Plugins.fireHook('static:app.load', { app: app, router: router, middleware: middleware, controllers: controllers }); | 	await Plugins.fireHook('static:app.load', { app: app, router: params.router, middleware: middleware, controllers: controllers }); | ||||||
| 	winston.verbose('[plugins] All plugins reloaded and rerouted'); | 	winston.verbose('[plugins] All plugins reloaded and rerouted'); | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -46,26 +46,21 @@ Auth.getLoginStrategies = function () { | |||||||
| 	return loginStrategies; | 	return loginStrategies; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| Auth.reloadRoutes = function (router, callback) { | Auth.reloadRoutes = async function (params) { | ||||||
| 	loginStrategies.length = 0; | 	loginStrategies.length = 0; | ||||||
|  | 	const router = params.router; | ||||||
| 	if (plugins.hasListeners('action:auth.overrideLogin')) { | 	if (plugins.hasListeners('action:auth.overrideLogin')) { | ||||||
| 		winston.warn('[authentication] Login override detected, skipping local login strategy.'); | 		winston.warn('[authentication] Login override detected, skipping local login strategy.'); | ||||||
| 		plugins.fireHook('action:auth.overrideLogin'); | 		plugins.fireHook('action:auth.overrideLogin'); | ||||||
| 	} else { | 	} else { | ||||||
| 		passport.use(new passportLocal({ passReqToCallback: true }, controllers.authentication.localLogin)); | 		passport.use(new passportLocal({ passReqToCallback: true }, controllers.authentication.localLogin)); | ||||||
| 	} | 	} | ||||||
|  | 	try { | ||||||
| 	async.waterfall([ | 		loginStrategies = await plugins.fireHook('filter:auth.init', loginStrategies); | ||||||
| 		function (next) { | 	} catch (err) { | ||||||
| 			plugins.fireHook('filter:auth.init', loginStrategies, function (err) { |  | ||||||
| 				if (err) { |  | ||||||
| 		winston.error('[authentication] ' + err.stack); | 		winston.error('[authentication] ' + err.stack); | ||||||
| 	} | 	} | ||||||
| 				next(null, loginStrategies); |  | ||||||
| 			}); |  | ||||||
| 		}, |  | ||||||
| 		function (loginStrategies, next) { |  | ||||||
| 	loginStrategies = loginStrategies || []; | 	loginStrategies = loginStrategies || []; | ||||||
| 	loginStrategies.forEach(function (strategy) { | 	loginStrategies.forEach(function (strategy) { | ||||||
| 		if (strategy.url) { | 		if (strategy.url) { | ||||||
| @@ -134,10 +129,6 @@ Auth.reloadRoutes = function (router, callback) { | |||||||
| 	router.post('/register/abort', controllers.authentication.registerAbort); | 	router.post('/register/abort', controllers.authentication.registerAbort); | ||||||
| 	router.post('/login', Auth.middleware.applyCSRF, Auth.middleware.applyBlacklist, controllers.authentication.login); | 	router.post('/login', Auth.middleware.applyCSRF, Auth.middleware.applyBlacklist, controllers.authentication.login); | ||||||
| 	router.post('/logout', Auth.middleware.applyCSRF, controllers.authentication.logout); | 	router.post('/logout', Auth.middleware.applyCSRF, controllers.authentication.logout); | ||||||
|  |  | ||||||
| 			next(); |  | ||||||
| 		}, |  | ||||||
| 	], callback); |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
| passport.serializeUser(function (user, done) { | passport.serializeUser(function (user, done) { | ||||||
|   | |||||||
| @@ -3,7 +3,6 @@ | |||||||
| var nconf = require('nconf'); | var nconf = require('nconf'); | ||||||
| var winston = require('winston'); | var winston = require('winston'); | ||||||
| var path = require('path'); | var path = require('path'); | ||||||
| var async = require('async'); |  | ||||||
| var express = require('express'); | var express = require('express'); | ||||||
|  |  | ||||||
| var meta = require('../meta'); | var meta = require('../meta'); | ||||||
| @@ -90,7 +89,7 @@ function groupRoutes(app, middleware, controllers) { | |||||||
| 	setupPageRoute(app, '/groups/:slug/members', middleware, middlewares, controllers.groups.members); | 	setupPageRoute(app, '/groups/:slug/members', middleware, middlewares, controllers.groups.members); | ||||||
| } | } | ||||||
|  |  | ||||||
| module.exports = function (app, middleware, callback) { | module.exports = async function (app, middleware) { | ||||||
| 	const router = express.Router(); | 	const router = express.Router(); | ||||||
| 	router.render = function () { | 	router.render = function () { | ||||||
| 		app.render.apply(app, arguments); | 		app.render.apply(app, arguments); | ||||||
| @@ -109,21 +108,15 @@ module.exports = function (app, middleware, callback) { | |||||||
| 	// homepage handled by `action:homepage.get:[route]` | 	// homepage handled by `action:homepage.get:[route]` | ||||||
| 	setupPageRoute(router, '/', middleware, [], controllers.home.pluginHook); | 	setupPageRoute(router, '/', middleware, [], controllers.home.pluginHook); | ||||||
|  |  | ||||||
| 	async.series([ | 	await plugins.reloadRoutes({ router: router }); | ||||||
| 		async.apply(plugins.reloadRoutes, router), | 	await authRoutes.reloadRoutes({ router: router }); | ||||||
| 		async.apply(authRoutes.reloadRoutes, router), | 	addCoreRoutes(app, router, middleware); | ||||||
| 		async.apply(addCoreRoutes, app, router, middleware), | 	await user.addInterstitials(); | ||||||
| 		async.apply(user.addInterstitials), |  | ||||||
| 		function (next) { |  | ||||||
| 	winston.info('Routes added'); | 	winston.info('Routes added'); | ||||||
| 			next(); |  | ||||||
| 		}, |  | ||||||
| 	], function (err) { |  | ||||||
| 		callback(err); |  | ||||||
| 	}); |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
| function addCoreRoutes(app, router, middleware, callback) { | function addCoreRoutes(app, router, middleware) { | ||||||
| 	adminRoutes(router, middleware, controllers); | 	adminRoutes(router, middleware, controllers); | ||||||
| 	metaRoutes(router, middleware, controllers); | 	metaRoutes(router, middleware, controllers); | ||||||
| 	apiRoutes(router, middleware, controllers); | 	apiRoutes(router, middleware, controllers); | ||||||
| @@ -190,5 +183,4 @@ function addCoreRoutes(app, router, middleware, callback) { | |||||||
| 	app.use(controllers['404'].handle404); | 	app.use(controllers['404'].handle404); | ||||||
| 	app.use(controllers.errors.handleURIErrors); | 	app.use(controllers.errors.handleURIErrors); | ||||||
| 	app.use(controllers.errors.handleErrors); | 	app.use(controllers.errors.handleErrors); | ||||||
| 	setImmediate(callback); |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ | |||||||
| 'use strict'; | 'use strict'; | ||||||
|  |  | ||||||
| var fs = require('fs'); | var fs = require('fs'); | ||||||
|  | const util = require('util'); | ||||||
| var path = require('path'); | var path = require('path'); | ||||||
| var os = require('os'); | var os = require('os'); | ||||||
| var nconf = require('nconf'); | var nconf = require('nconf'); | ||||||
| @@ -65,7 +66,7 @@ server.on('connection', function (conn) { | |||||||
| 	}); | 	}); | ||||||
| }); | }); | ||||||
|  |  | ||||||
| module.exports.destroy = function (callback) { | exports.destroy = function (callback) { | ||||||
| 	server.close(callback); | 	server.close(callback); | ||||||
| 	for (var key in connections) { | 	for (var key in connections) { | ||||||
| 		if (connections.hasOwnProperty(key)) { | 		if (connections.hasOwnProperty(key)) { | ||||||
| @@ -74,22 +75,12 @@ module.exports.destroy = function (callback) { | |||||||
| 	} | 	} | ||||||
| }; | }; | ||||||
|  |  | ||||||
| module.exports.listen = function (callback) { | exports.listen = async function () { | ||||||
| 	callback = callback || function () { }; |  | ||||||
| 	emailer.registerApp(app); | 	emailer.registerApp(app); | ||||||
|  | 	setupExpressApp(app); | ||||||
| 	async.waterfall([ |  | ||||||
| 		function (next) { |  | ||||||
| 			setupExpressApp(app, next); |  | ||||||
| 		}, |  | ||||||
| 		function (next) { |  | ||||||
| 	helpers.register(); | 	helpers.register(); | ||||||
|  |  | ||||||
| 	logger.init(app); | 	logger.init(app); | ||||||
|  | 	await initializeNodeBB(); | ||||||
| 			initializeNodeBB(next); |  | ||||||
| 		}, |  | ||||||
| 		function (next) { |  | ||||||
| 	winston.info('NodeBB Ready'); | 	winston.info('NodeBB Ready'); | ||||||
|  |  | ||||||
| 	require('./socket.io').server.emit('event:nodebb.ready', { | 	require('./socket.io').server.emit('event:nodebb.ready', { | ||||||
| @@ -99,51 +90,30 @@ module.exports.listen = function (callback) { | |||||||
|  |  | ||||||
| 	plugins.fireHook('action:nodebb.ready'); | 	plugins.fireHook('action:nodebb.ready'); | ||||||
|  |  | ||||||
| 			listen(next); | 	await util.promisify(listen)(); | ||||||
| 		}, |  | ||||||
| 	], callback); |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
| function initializeNodeBB(callback) { | async function initializeNodeBB() { | ||||||
| 	var middleware = require('./middleware'); | 	const middleware = require('./middleware'); | ||||||
|  | 	await meta.themes.setupPaths(); | ||||||
| 	async.waterfall([ | 	await plugins.init(app, middleware); | ||||||
| 		function (next) { | 	await plugins.fireHook('static:assets.prepare', {}); | ||||||
| 			meta.themes.setupPaths(next); | 	await plugins.fireHook('static:app.preload', { | ||||||
| 		}, |  | ||||||
| 		function (next) { |  | ||||||
| 			plugins.init(app, middleware, next); |  | ||||||
| 		}, |  | ||||||
| 		async.apply(plugins.fireHook, 'static:assets.prepare', {}), |  | ||||||
| 		function (next) { |  | ||||||
| 			plugins.fireHook('static:app.preload', { |  | ||||||
| 		app: app, | 		app: app, | ||||||
| 		middleware: middleware, | 		middleware: middleware, | ||||||
| 			}, next); |  | ||||||
| 		}, |  | ||||||
| 		function (next) { |  | ||||||
| 			routes(app, middleware, next); |  | ||||||
| 		}, |  | ||||||
| 		function (next) { |  | ||||||
| 			meta.sounds.addUploads(next); |  | ||||||
| 		}, |  | ||||||
| 		function (next) { |  | ||||||
| 			meta.blacklist.load(next); |  | ||||||
| 		}, |  | ||||||
| 		function (next) { |  | ||||||
| 			flags.init(next); |  | ||||||
| 		}, |  | ||||||
| 	], function (err) { |  | ||||||
| 		callback(err); |  | ||||||
| 	}); | 	}); | ||||||
|  | 	await routes(app, middleware); | ||||||
|  | 	await meta.sounds.addUploads(); | ||||||
|  | 	await meta.blacklist.load(); | ||||||
|  | 	await flags.init(); | ||||||
| } | } | ||||||
|  |  | ||||||
| function setupExpressApp(app, callback) { | function setupExpressApp(app) { | ||||||
| 	var middleware = require('./middleware'); | 	const middleware = require('./middleware'); | ||||||
| 	var pingController = require('./controllers/ping'); | 	const pingController = require('./controllers/ping'); | ||||||
|  |  | ||||||
| 	var relativePath = nconf.get('relative_path'); | 	const relativePath = nconf.get('relative_path'); | ||||||
| 	var viewsDir = nconf.get('views_dir'); | 	const viewsDir = nconf.get('views_dir'); | ||||||
|  |  | ||||||
| 	app.engine('tpl', function (filepath, data, next) { | 	app.engine('tpl', function (filepath, data, next) { | ||||||
| 		filepath = filepath.replace(/\.tpl$/, '.js'); | 		filepath = filepath.replace(/\.tpl$/, '.js'); | ||||||
| @@ -210,8 +180,6 @@ function setupExpressApp(app, callback) { | |||||||
| 	var toobusy = require('toobusy-js'); | 	var toobusy = require('toobusy-js'); | ||||||
| 	toobusy.maxLag(meta.config.eventLoopLagThreshold); | 	toobusy.maxLag(meta.config.eventLoopLagThreshold); | ||||||
| 	toobusy.interval(meta.config.eventLoopInterval); | 	toobusy.interval(meta.config.eventLoopInterval); | ||||||
|  |  | ||||||
| 	callback(); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| function setupFavicon(app) { | function setupFavicon(app) { | ||||||
| @@ -308,7 +276,7 @@ function listen(callback) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| module.exports.testSocket = function (socketPath, callback) { | exports.testSocket = function (socketPath, callback) { | ||||||
| 	if (typeof socketPath !== 'string') { | 	if (typeof socketPath !== 'string') { | ||||||
| 		return callback(new Error('invalid socket path : ' + socketPath)); | 		return callback(new Error('invalid socket path : ' + socketPath)); | ||||||
| 	} | 	} | ||||||
| @@ -337,3 +305,5 @@ module.exports.testSocket = function (socketPath, callback) { | |||||||
| 		async.apply(fs.unlink, socketPath),	// The socket was stale, kick it out of the way | 		async.apply(fs.unlink, socketPath),	// The socket was stale, kick it out of the way | ||||||
| 	], callback); | 	], callback); | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | require('./promisify')(exports); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user