2015-08-28 14:46:13 -04:00
|
|
|
'use strict';
|
|
|
|
|
|
2019-12-16 08:44:55 -05:00
|
|
|
const util = require('util');
|
|
|
|
|
const nconf = require('nconf');
|
|
|
|
|
const meta = require('../meta');
|
|
|
|
|
const user = require('../user');
|
2022-11-11 16:23:00 -05:00
|
|
|
const groups = require('../groups');
|
2020-06-03 20:18:42 -04:00
|
|
|
const helpers = require('./helpers');
|
2015-08-28 14:46:13 -04:00
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
module.exports = function (middleware) {
|
2021-02-04 00:01:39 -07:00
|
|
|
middleware.maintenanceMode = helpers.try(async (req, res, next) => {
|
2018-10-21 16:47:51 -04:00
|
|
|
if (!meta.config.maintenanceMode) {
|
2020-06-03 20:18:42 -04:00
|
|
|
return next();
|
2015-08-28 14:46:13 -04:00
|
|
|
}
|
|
|
|
|
|
2020-02-06 15:43:14 -05:00
|
|
|
const hooksAsync = util.promisify(middleware.pluginHooks);
|
|
|
|
|
await hooksAsync(req, res);
|
|
|
|
|
|
2019-12-16 08:44:55 -05:00
|
|
|
const url = req.url.replace(nconf.get('relative_path'), '');
|
2017-02-03 19:02:38 +03:00
|
|
|
if (url.startsWith('/login') || url.startsWith('/api/login')) {
|
2020-06-03 20:18:42 -04:00
|
|
|
return next();
|
2015-08-28 14:46:13 -04:00
|
|
|
}
|
|
|
|
|
|
2022-11-11 16:23:00 -05:00
|
|
|
const [isAdmin, isMemberOfExempt] = await Promise.all([
|
|
|
|
|
user.isAdministrator(req.uid),
|
|
|
|
|
groups.isMemberOfAny(req.uid, meta.config.groupsExemptFromMaintenanceMode),
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
if (isAdmin || isMemberOfExempt) {
|
2020-06-03 20:18:42 -04:00
|
|
|
return next();
|
2019-12-16 08:44:55 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
res.status(meta.config.maintenanceModeStatus);
|
2016-11-22 14:37:14 +03:00
|
|
|
|
2019-12-16 08:44:55 -05:00
|
|
|
const data = {
|
|
|
|
|
site_title: meta.config.title || 'NodeBB',
|
|
|
|
|
message: meta.config.maintenanceModeMessage,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (res.locals.isAPI) {
|
|
|
|
|
return res.json(data);
|
|
|
|
|
}
|
2020-06-04 01:14:46 -04:00
|
|
|
await middleware.buildHeaderAsync(req, res);
|
2019-12-16 08:44:55 -05:00
|
|
|
res.render('503', data);
|
2020-06-03 20:18:42 -04:00
|
|
|
});
|
2017-02-18 02:30:48 -07:00
|
|
|
};
|