mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-02-26 16:41:21 +01:00
Merge branch 'develop' into bootstrap5
This commit is contained in:
@@ -25,6 +25,7 @@
|
||||
"postQueue": 0,
|
||||
"postQueueReputationThreshold": 0,
|
||||
"groupsExemptFromPostQueue": ["administrators", "Global Moderators"],
|
||||
"groupsExemptFromMaintenanceMode": ["administrators", "Global Moderators"],
|
||||
"minimumPostLength": 8,
|
||||
"maximumPostLength": 32767,
|
||||
"systemTags": "",
|
||||
|
||||
@@ -31,10 +31,10 @@
|
||||
"@adactive/bootstrap-tagsinput": "0.8.2",
|
||||
"@isaacs/ttlcache": "1.2.1",
|
||||
"@popperjs/core": "2.11.6",
|
||||
"ace-builds": "1.12.3",
|
||||
"ace-builds": "1.13.0",
|
||||
"archiver": "5.3.1",
|
||||
"async": "3.2.4",
|
||||
"autoprefixer": "10.4.12",
|
||||
"autoprefixer": "10.4.13",
|
||||
"bcryptjs": "2.4.3",
|
||||
"benchpressjs": "2.4.3",
|
||||
"body-parser": "1.20.1",
|
||||
@@ -60,7 +60,7 @@
|
||||
"csurf": "1.11.0",
|
||||
"daemon": "1.1.0",
|
||||
"diff": "5.1.0",
|
||||
"esbuild": "0.15.12",
|
||||
"esbuild": "0.15.13",
|
||||
"express": "4.18.2",
|
||||
"express-session": "1.17.3",
|
||||
"express-useragent": "1.0.15",
|
||||
@@ -81,11 +81,11 @@
|
||||
"less": "4.1.3",
|
||||
"lodash": "4.17.21",
|
||||
"logrotate-stream": "0.2.8",
|
||||
"lru-cache": "7.14.0",
|
||||
"lru-cache": "7.14.1",
|
||||
"material-design-lite": "1.3.0",
|
||||
"mime": "3.0.0",
|
||||
"mkdirp": "1.0.4",
|
||||
"mongodb": "4.10.0",
|
||||
"mongodb": "4.11.0",
|
||||
"morgan": "1.10.0",
|
||||
"mousetrap": "1.6.5",
|
||||
"multiparty": "4.2.3",
|
||||
@@ -110,11 +110,11 @@
|
||||
"passport-local": "1.0.0",
|
||||
"pg": "8.8.0",
|
||||
"pg-cursor": "2.7.4",
|
||||
"postcss": "8.4.18",
|
||||
"postcss": "8.4.19",
|
||||
"postcss-clean": "1.2.0",
|
||||
"progress-webpack-plugin": "1.0.16",
|
||||
"prompt": "1.3.0",
|
||||
"ioredis": "5.2.3",
|
||||
"ioredis": "5.2.4",
|
||||
"request": "2.88.2",
|
||||
"request-promise-native": "1.0.9",
|
||||
"rimraf": "3.0.2",
|
||||
@@ -124,7 +124,7 @@
|
||||
"sass": "1.54.9",
|
||||
"semver": "7.3.8",
|
||||
"serve-favicon": "2.5.0",
|
||||
"sharp": "0.31.1",
|
||||
"sharp": "0.31.2",
|
||||
"sitemap": "7.1.1",
|
||||
"slideout": "1.0.1",
|
||||
"socket.io": "4.5.3",
|
||||
@@ -140,25 +140,25 @@
|
||||
"tinycon": "0.6.8",
|
||||
"toobusy-js": "0.5.1",
|
||||
"validator": "13.7.0",
|
||||
"webpack": "5.74.0",
|
||||
"webpack": "5.75.0",
|
||||
"webpack-merge": "5.8.0",
|
||||
"winston": "3.8.2",
|
||||
"xml": "1.0.1",
|
||||
"xregexp": "5.1.1",
|
||||
"yargs": "17.6.0",
|
||||
"yargs": "17.6.2",
|
||||
"zxcvbn": "4.4.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@apidevtools/swagger-parser": "10.0.3",
|
||||
"@commitlint/cli": "17.1.2",
|
||||
"@commitlint/config-angular": "17.1.0",
|
||||
"@commitlint/cli": "17.2.0",
|
||||
"@commitlint/config-angular": "17.2.0",
|
||||
"coveralls": "3.1.1",
|
||||
"eslint": "8.27.0",
|
||||
"eslint-config-nodebb": "0.1.1",
|
||||
"eslint-plugin-import": "2.26.0",
|
||||
"grunt": "1.5.3",
|
||||
"grunt-contrib-watch": "1.1.0",
|
||||
"husky": "8.0.1",
|
||||
"husky": "8.0.2",
|
||||
"jsdom": "20.0.2",
|
||||
"lint-staged": "13.0.3",
|
||||
"mocha": "10.1.0",
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"maintenance-mode.help": "When the forum is in maintenance mode, all requests will be redirected to a static holding page. Administrators are exempt from this redirection, and are able to access the site normally.",
|
||||
"maintenance-mode.status": "Maintenance Mode Status Code",
|
||||
"maintenance-mode.message": "Maintenance Message",
|
||||
"maintenance-mode.groups-exempt-from-maintenance-mode": "Select groups that should be exempt from maintenance mode",
|
||||
"headers": "Headers",
|
||||
"headers.allow-from": "Set ALLOW-FROM to Place NodeBB in an iFrame",
|
||||
"headers.csp-frame-ancestors": "Set Content-Security-Policy frame-ancestors header to Place NodeBB in an iFrame",
|
||||
|
||||
@@ -48,6 +48,13 @@ settingsController.post = async (req, res) => {
|
||||
});
|
||||
};
|
||||
|
||||
settingsController.advanced = async (req, res) => {
|
||||
const groupData = await groups.getNonPrivilegeGroups('groups:createtime', 0, -1);
|
||||
res.render('admin/settings/advanced', {
|
||||
groupsExemptFromMaintenanceMode: groupData,
|
||||
});
|
||||
};
|
||||
|
||||
settingsController.languages = async function (req, res) {
|
||||
const languageData = await languages.list();
|
||||
languageData.forEach((language) => {
|
||||
|
||||
@@ -274,8 +274,16 @@ module.exports = function (Groups) {
|
||||
|
||||
async function updateConfig(oldName, newName) {
|
||||
if (meta.config.groupsExemptFromPostQueue.includes(oldName)) {
|
||||
meta.config.groupsExemptFromPostQueue.splice(meta.config.groupsExemptFromPostQueue.indexOf(oldName), 1, newName);
|
||||
meta.config.groupsExemptFromPostQueue.splice(
|
||||
meta.config.groupsExemptFromPostQueue.indexOf(oldName), 1, newName
|
||||
);
|
||||
await meta.configs.set('groupsExemptFromPostQueue', meta.config.groupsExemptFromPostQueue);
|
||||
}
|
||||
if (meta.config.groupsExemptFromMaintenanceMode.includes(oldName)) {
|
||||
meta.config.groupsExemptFromMaintenanceMode.splice(
|
||||
meta.config.groupsExemptFromMaintenanceMode.indexOf(oldName), 1, newName
|
||||
);
|
||||
await meta.configs.set('groupsExemptFromMaintenanceMode', meta.config.groupsExemptFromMaintenanceMode);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -4,6 +4,7 @@ const util = require('util');
|
||||
const nconf = require('nconf');
|
||||
const meta = require('../meta');
|
||||
const user = require('../user');
|
||||
const groups = require('../groups');
|
||||
const helpers = require('./helpers');
|
||||
|
||||
module.exports = function (middleware) {
|
||||
@@ -20,8 +21,12 @@ module.exports = function (middleware) {
|
||||
return next();
|
||||
}
|
||||
|
||||
const isAdmin = await user.isAdministrator(req.uid);
|
||||
if (isAdmin) {
|
||||
const [isAdmin, isMemberOfExempt] = await Promise.all([
|
||||
user.isAdministrator(req.uid),
|
||||
groups.isMemberOfAny(req.uid, meta.config.groupsExemptFromMaintenanceMode),
|
||||
]);
|
||||
|
||||
if (isAdmin || isMemberOfExempt) {
|
||||
return next();
|
||||
}
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@ module.exports = function (app, name, middleware, controllers) {
|
||||
helpers.setupAdminPageRoute(app, `/${name}/settings/email`, middlewares, controllers.admin.settings.email);
|
||||
helpers.setupAdminPageRoute(app, `/${name}/settings/user`, middlewares, controllers.admin.settings.user);
|
||||
helpers.setupAdminPageRoute(app, `/${name}/settings/post`, middlewares, controllers.admin.settings.post);
|
||||
helpers.setupAdminPageRoute(app, `/${name}/settings/advanced`, middlewares, controllers.admin.settings.advanced);
|
||||
helpers.setupAdminPageRoute(app, `/${name}/settings/languages`, middlewares, controllers.admin.settings.languages);
|
||||
helpers.setupAdminPageRoute(app, `/${name}/settings/navigation`, middlewares, controllers.admin.settings.navigation);
|
||||
helpers.setupAdminPageRoute(app, `/${name}/settings/homepage`, middlewares, controllers.admin.settings.homepage);
|
||||
|
||||
@@ -19,6 +19,14 @@
|
||||
<label class="form-label" for="maintenanceModeMessage">[[admin/settings/advanced:maintenance-mode.message]]</label>
|
||||
<textarea id="maintenanceModeMessage" class="form-control" data-field="maintenanceModeMessage"></textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="groupsExemptFromMaintenanceMode">[[admin/settings/advanced:maintenance-mode.groups-exempt-from-maintenance-mode]]</label>
|
||||
<select id="groupsExemptFromMaintenanceMode" class="form-control" multiple data-field="groupsExemptFromMaintenanceMode">
|
||||
{{{ each groupsExemptFromMaintenanceMode }}}
|
||||
<option value="{groupsExemptFromMaintenanceMode.displayName}">{groupsExemptFromMaintenanceMode.displayName}</option>
|
||||
{{{ end }}}
|
||||
</select>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1305,6 +1305,18 @@ describe('Controllers', () => {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should return 200 if guests are allowed', (done) => {
|
||||
const oldValue = meta.config.groupsExemptFromMaintenanceMode;
|
||||
meta.config.groupsExemptFromMaintenanceMode.push('guests');
|
||||
request(`${nconf.get('url')}/api/recent`, { json: true }, (err, res, body) => {
|
||||
assert.ifError(err);
|
||||
assert.strictEqual(res.statusCode, 200);
|
||||
assert(body);
|
||||
meta.config.groupsExemptFromMaintenanceMode = oldValue;
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('account pages', () => {
|
||||
|
||||
Reference in New Issue
Block a user