You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
990 B
JavaScript
45 lines
990 B
JavaScript
'use strict';
|
|
|
|
var async = require('async');
|
|
var nconf = require('nconf');
|
|
var meta = require('../meta');
|
|
var user = require('../user');
|
|
|
|
module.exports = function (middleware) {
|
|
middleware.maintenanceMode = function (req, res, callback) {
|
|
if (!meta.config.maintenanceMode) {
|
|
return setImmediate(callback);
|
|
}
|
|
var url = req.url.replace(nconf.get('relative_path'), '');
|
|
|
|
if (url.startsWith('/login') || url.startsWith('/api/login')) {
|
|
return setImmediate(callback);
|
|
}
|
|
var data;
|
|
async.waterfall([
|
|
function (next) {
|
|
user.isAdministrator(req.uid, next);
|
|
},
|
|
function (isAdmin, next) {
|
|
if (isAdmin) {
|
|
return callback();
|
|
}
|
|
res.status(503);
|
|
data = {
|
|
site_title: meta.config.title || 'NodeBB',
|
|
message: meta.config.maintenanceModeMessage,
|
|
};
|
|
|
|
if (res.locals.isAPI) {
|
|
return res.json(data);
|
|
}
|
|
|
|
middleware.buildHeader(req, res, next);
|
|
},
|
|
function () {
|
|
res.render('503', data);
|
|
},
|
|
], callback);
|
|
};
|
|
};
|