feat: #7743, webserver

v1.18.x
Barış Soner Uşaklı 6 years ago
parent 87552c559c
commit 0d047f4eb9

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

Loading…
Cancel
Save