From 4b843ba16f31f28b67479bd95630b9d66341fe4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Tue, 4 Jun 2019 11:10:20 -0400 Subject: [PATCH] fix: #7567, allow invite and approval at the same time --- install/data/defaults.json | 1 + .../language/en-GB/admin/settings/user.json | 4 +++- src/controllers/index.js | 5 ++--- src/middleware/header.js | 2 +- .../1.12.3/update_registration_type.js | 20 +++++++++++++++++++ src/user/approval.js | 10 +++++----- src/views/admin/settings/user.tpl | 13 ++++++++++-- test/authentication.js | 4 ++-- test/user.js | 10 ++++------ 9 files changed, 49 insertions(+), 20 deletions(-) create mode 100644 src/upgrades/1.12.3/update_registration_type.js diff --git a/install/data/defaults.json b/install/data/defaults.json index 70dcaf6d75..be82f8a190 100644 --- a/install/data/defaults.json +++ b/install/data/defaults.json @@ -27,6 +27,7 @@ "maximumTagLength": 15, "allowTopicsThumbnail": 0, "registrationType": "normal", + "registrationApprovalType": "normal", "allowAccountDelete": 1, "allowFileUploads": 0, "allowedFileExtensions": "png,jpg,bmp", diff --git a/public/language/en-GB/admin/settings/user.json b/public/language/en-GB/admin/settings/user.json index 2cfb16addc..9f029bf777 100644 --- a/public/language/en-GB/admin/settings/user.json +++ b/public/language/en-GB/admin/settings/user.json @@ -34,13 +34,15 @@ "online-cutoff-help": "If user performs no actions for this duration, they are considered inactive and they do not receive realtime updates.", "registration": "User Registration", "registration-type": "Registration Type", + "registration-approval-type": "Registration Approval Type", "registration-type.normal": "Normal", "registration-type.admin-approval": "Admin Approval", "registration-type.admin-approval-ip": "Admin Approval for IPs", "registration-type.invite-only": "Invite Only", "registration-type.admin-invite-only": "Admin Invite Only", "registration-type.disabled": "No registration", - "registration-type.help": "Normal - Users can register from the /register page.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", + "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", + "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", diff --git a/src/controllers/index.js b/src/controllers/index.js index 30fe85ce04..f304b4d840 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -100,7 +100,6 @@ Controllers.login = function (req, res, next) { var data = {}; var loginStrategies = require('../routes/authentication').getLoginStrategies(); var registrationType = meta.config.registrationType || 'normal'; - var allowLoginWith = (meta.config.allowLoginWith || 'username-email'); var returnTo = (req.headers['x-return-to'] || '').replace(nconf.get('base_url') + nconf.get('relative_path'), ''); @@ -117,7 +116,7 @@ Controllers.login = function (req, res, next) { data.alternate_logins = loginStrategies.length > 0; data.authentication = loginStrategies; - data.allowRegistration = registrationType === 'normal' || registrationType === 'admin-approval' || registrationType === 'admin-approval-ip'; + data.allowRegistration = registrationType === 'normal'; data.allowLoginWith = '[[login:' + allowLoginWith + ']]'; data.breadcrumbs = helpers.buildBreadcrumbs([{ text: '[[global:login]]', @@ -159,7 +158,7 @@ Controllers.register = function (req, res, next) { var registrationType = meta.config.registrationType || 'normal'; if (registrationType === 'disabled') { - return next(); + return setImmediate(next); } var errorText; diff --git a/src/middleware/header.js b/src/middleware/header.js index 8e26934560..3c14793b78 100644 --- a/src/middleware/header.js +++ b/src/middleware/header.js @@ -63,7 +63,7 @@ module.exports = function (middleware) { 'brand:logo:url': meta.config['brand:logo:url'] || '', 'brand:logo:alt': meta.config['brand:logo:alt'] || '', 'brand:logo:display': meta.config['brand:logo'] ? '' : 'hide', - allowRegistration: registrationType === 'normal' || registrationType === 'admin-approval' || registrationType === 'admin-approval-ip', + allowRegistration: registrationType === 'normal', searchEnabled: plugins.hasListeners('filter:search.query'), config: res.locals.config, relative_path: nconf.get('relative_path'), diff --git a/src/upgrades/1.12.3/update_registration_type.js b/src/upgrades/1.12.3/update_registration_type.js new file mode 100644 index 0000000000..431189ebc2 --- /dev/null +++ b/src/upgrades/1.12.3/update_registration_type.js @@ -0,0 +1,20 @@ +'use strict'; + +var db = require('../../database'); + +module.exports = { + name: 'Update registration type', + timestamp: Date.UTC(2019, 5, 4), + method: function (callback) { + const meta = require('../../meta'); + const registrationType = meta.config.registrationType || 'normal'; + if (registrationType === 'admin-approval' || registrationType === 'admin-approval-ip') { + db.setObject('config', { + registrationType: 'normal', + registrationApprovalType: registrationType, + }, callback); + } else { + setImmediate(callback); + } + }, +}; diff --git a/src/user/approval.js b/src/user/approval.js index dd319485d8..32df3fcf85 100644 --- a/src/user/approval.js +++ b/src/user/approval.js @@ -163,15 +163,15 @@ module.exports = function (User) { } User.shouldQueueUser = function (ip, callback) { - var registrationType = meta.config.registrationType || 'normal'; - if (registrationType === 'normal' || registrationType === 'invite-only' || registrationType === 'admin-invite-only') { - setImmediate(callback, null, false); - } else if (registrationType === 'admin-approval') { + const registrationApprovalType = meta.config.registrationApprovalType; + if (registrationApprovalType === 'admin-approval') { setImmediate(callback, null, true); - } else if (registrationType === 'admin-approval-ip') { + } else if (registrationApprovalType === 'admin-approval-ip') { db.sortedSetCard('ip:' + ip + ':uid', function (err, count) { callback(err, !!count); }); + } else { + setImmediate(callback, null, false); } }; diff --git a/src/views/admin/settings/user.tpl b/src/views/admin/settings/user.tpl index 874e55eb60..45edc8f5a5 100644 --- a/src/views/admin/settings/user.tpl +++ b/src/views/admin/settings/user.tpl @@ -167,8 +167,6 @@ + + + + +

+ [[admin/settings/user:registration-approval-type.help, {config.relative_path}]] +

+
diff --git a/test/authentication.js b/test/authentication.js index 23b9f97e72..604608b242 100644 --- a/test/authentication.js +++ b/test/authentication.js @@ -396,9 +396,9 @@ describe('authentication', function () { }); it('should queue user if ip is used before', function (done) { - meta.config.registrationType = 'admin-approval-ip'; + meta.config.registrationApprovalType = 'admin-approval-ip'; registerUser('another@user.com', 'anotheruser', 'anotherpwd', function (err, response, body) { - meta.config.registrationType = 'normal'; + meta.config.registrationApprovalType = 'normal'; assert.ifError(err); assert.equal(response.statusCode, 200); assert.equal(body.message, '[[register:registration-added-to-queue]]'); diff --git a/test/user.js b/test/user.js index 77fd9428a2..e44c1c7291 100644 --- a/test/user.js +++ b/test/user.js @@ -1588,13 +1588,11 @@ describe('User', function () { }); describe('approval queue', function () { - var socketAdmin = require('../src/socket.io/admin'); - - var oldRegistrationType; + var oldRegistrationApprovalType; var adminUid; before(function (done) { - oldRegistrationType = meta.config.registrationType; - meta.config.registrationType = 'admin-approval'; + oldRegistrationApprovalType = meta.config.registrationApprovalType; + meta.config.registrationApprovalType = 'admin-approval'; User.create({ username: 'admin', password: '123456' }, function (err, uid) { assert.ifError(err); adminUid = uid; @@ -1603,7 +1601,7 @@ describe('User', function () { }); after(function (done) { - meta.config.registrationType = oldRegistrationType; + meta.config.registrationApprovalType = oldRegistrationApprovalType; done(); });