Added email disabling flag to settings records

refs https://github.com/TryGhost/Team/issues/912

- We need a place to persist the email freeze state between instance restarts - settings table record is the best place for it
This commit is contained in:
Naz 2021-07-27 11:13:16 +04:00 committed by naz
parent 9d60936c56
commit 2fbc1af165
7 changed files with 64 additions and 4 deletions

View File

@ -63,7 +63,8 @@ const SETTING_KEYS_BLOCKLIST = [
'members_stripe_webhook_id', 'members_stripe_webhook_id',
'members_stripe_webhook_secret', 'members_stripe_webhook_secret',
'oauth_client_id', 'oauth_client_id',
'oauth_client_secret' 'oauth_client_secret',
'email_verification_required'
]; ];
module.exports = { module.exports = {

View File

@ -0,0 +1,43 @@
const ObjectID = require('bson-objectid');
const logging = require('@tryghost/logging');
const {createTransactionalMigration} = require('../../utils.js');
const MIGRATION_USER = 1;
module.exports = createTransactionalMigration(
async function up(knex) {
const settingExists = await knex('settings')
.where('key', '=', 'email_verification_required')
.first();
if (!settingExists) {
logging.info('Adding "email_verification_required" record to "settings" table');
const now = knex.raw('CURRENT_TIMESTAMP');
await knex('settings')
.insert({
id: ObjectID().toHexString(),
key: 'email_verification_required',
value: 'false',
group: 'email',
type: 'boolean',
flags: 'RO',
created_at: now,
created_by: MIGRATION_USER,
updated_at: now,
updated_by: MIGRATION_USER
});
} else {
logging.warn('Skipped adding "email_verification_required" record to "settings" table. Record already exists!');
}
},
async function down(knex) {
logging.info('Removing "email_verification_required" record from "settings" table');
await knex('settings')
.where('key', '=', 'email_verification_required')
.del();
}
);

View File

@ -384,6 +384,15 @@
"isIn": [["true", "false"]] "isIn": [["true", "false"]]
}, },
"type": "boolean" "type": "boolean"
},
"email_verification_required": {
"defaultValue": "false",
"validations": {
"isEmpty": false,
"isIn": [["true", "false"]]
},
"type": "boolean",
"flags": "RO"
} }
}, },
"amp": { "amp": {

View File

@ -295,6 +295,11 @@ const defaultSettingsKeyTypes = [
type: 'boolean', type: 'boolean',
group: 'email' group: 'email'
}, },
{
key: 'email_verification_required',
type: 'boolean',
group: 'email'
},
{ {
key: 'amp', key: 'amp',
type: 'boolean', type: 'boolean',

View File

@ -86,7 +86,8 @@ const defaultSettingsKeyTypes = [
{key: 'oauth_client_secret', type: 'oauth'}, {key: 'oauth_client_secret', type: 'oauth'},
{key: 'editor_default_email_recipients', type: 'editor'}, {key: 'editor_default_email_recipients', type: 'editor'},
{key: 'editor_default_email_recipients_filter', type: 'editor'}, {key: 'editor_default_email_recipients_filter', type: 'editor'},
{key: 'labs', type: 'blog'} {key: 'labs', type: 'blog'},
{key: 'email_verification_required', type: 'bulk_email'}
]; ];
describe('Settings API (v2)', function () { describe('Settings API (v2)', function () {

View File

@ -90,7 +90,8 @@ const defaultSettingsKeyTypes = [
{key: 'oauth_client_secret', type: 'oauth'}, {key: 'oauth_client_secret', type: 'oauth'},
{key: 'editor_default_email_recipients', type: 'editor'}, {key: 'editor_default_email_recipients', type: 'editor'},
{key: 'editor_default_email_recipients_filter', type: 'editor'}, {key: 'editor_default_email_recipients_filter', type: 'editor'},
{key: 'labs', type: 'blog'} {key: 'labs', type: 'blog'},
{key: 'email_verification_required', type: 'bulk_email'}
]; ];
describe('Settings API (v3)', function () { describe('Settings API (v3)', function () {

View File

@ -34,7 +34,7 @@ describe('DB version integrity', function () {
// Only these variables should need updating // Only these variables should need updating
const currentSchemaHash = 'a2248eaa72a9d08c3753b90a9436dbe3'; const currentSchemaHash = 'a2248eaa72a9d08c3753b90a9436dbe3';
const currentFixturesHash = '97283c575b1f6c84c27db6e1b1be21d4'; const currentFixturesHash = '97283c575b1f6c84c27db6e1b1be21d4';
const currentSettingsHash = 'dd0a0a08e66b252e7704bb7e346a8c20'; const currentSettingsHash = 'aa3fcbc8ab119b630aeda7366ead5493';
const currentRoutesHash = '3d180d52c663d173a6be791ef411ed01'; const currentRoutesHash = '3d180d52c663d173a6be791ef411ed01';
// If this test is failing, then it is likely a change has been made that requires a DB version bump, // If this test is failing, then it is likely a change has been made that requires a DB version bump,