From 9df217b04e8b6b9ea02313d8faba2121e8f5503c Mon Sep 17 00:00:00 2001 From: Fabien 'egg' O'Carroll Date: Fri, 3 Jul 2020 11:00:20 +0200 Subject: [PATCH] Added mailgun_{domain,api_key,base_url} settings (#11992) refs #10318 - Adds new default settings - Adds migration for populating settings with bulk_email_settings data - Fixes regression tests --- .../3.23/01-migrate-bulk-email-settings.js | 64 +++++++++++++++++++ core/server/data/schema/default-settings.json | 12 ++++ .../api/canary/admin/settings_spec.js | 5 +- test/regression/api/v2/admin/settings_spec.js | 3 + test/regression/api/v3/admin/settings_spec.js | 3 + 5 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 core/server/data/migrations/versions/3.23/01-migrate-bulk-email-settings.js diff --git a/core/server/data/migrations/versions/3.23/01-migrate-bulk-email-settings.js b/core/server/data/migrations/versions/3.23/01-migrate-bulk-email-settings.js new file mode 100644 index 0000000000..88848a8977 --- /dev/null +++ b/core/server/data/migrations/versions/3.23/01-migrate-bulk-email-settings.js @@ -0,0 +1,64 @@ +const logging = require('../../../../../shared/logging'); + +module.exports = { + config: { + transaction: true + }, + + async up({transacting: knex}) { + const defaultValue = { + provider: 'mailgun', + apiKey: null, + domain: null, + baseUrl: null + }; + const bulkEmailSettingsJSON = await knex('settings').where({ + key: 'bulk_email_settings' + }).select().first(); + + let bulkEmailSettings; + try { + bulkEmailSettings = JSON.parse(bulkEmailSettingsJSON.value) || defaultValue; + } catch (err) { + logging.warn(`Error parsing bulk_email_settings JSON. Using defaults`); + bulkEmailSettings = defaultValue; + } + + const operations = [{ + key: 'mailgun_api_key', + value: bulkEmailSettings.apiKey + }, { + key: 'mailgun_domain', + value: bulkEmailSettings.domain + }, { + key: 'mailgun_base_url', + value: bulkEmailSettings.baseUrl + }]; + + for (const operation of operations) { + logging.info(`Updating ${operation.key} setting's value, group, type & flags.`); + await knex('settings') + .where({ + key: operation.key + }) + .update({ + group: 'email', + type: 'string', + flags: null, + value: operation.value + }); + } + }, + + async down({transacting: knex}) { + const settingsToDelete = [ + 'mailgun_api_key', + 'mailgun_domain', + 'mailgun_base_url' + ]; + + logging.info(`Deleting settings: ${settingsToDelete.join(', ')}`); + + await knex('settings').whereIn('key', settingsToDelete).del(); + } +}; diff --git a/core/server/data/schema/default-settings.json b/core/server/data/schema/default-settings.json index 09ce2b232a..62e00f01cc 100644 --- a/core/server/data/schema/default-settings.json +++ b/core/server/data/schema/default-settings.json @@ -296,6 +296,18 @@ "bulk_email_settings": { "defaultValue": "{\"provider\":\"mailgun\", \"apiKey\": \"\", \"domain\": \"\", \"baseUrl\": \"\"}", "type": "object" + }, + "mailgun_domain": { + "defaultValue": null, + "type": "string" + }, + "mailgun_api_key": { + "defaultValue": null, + "type": "string" + }, + "mailgun_base_url": { + "defaultValue": null, + "type": "string" } }, "amp": { diff --git a/test/regression/api/canary/admin/settings_spec.js b/test/regression/api/canary/admin/settings_spec.js index abe844c98d..348201fefb 100644 --- a/test/regression/api/canary/admin/settings_spec.js +++ b/test/regression/api/canary/admin/settings_spec.js @@ -50,6 +50,9 @@ const defaultSettingsKeyTypes = [ {key: 'portal_button', type: 'portal'}, {key: 'portal_plans', type: 'portal'}, {key: 'bulk_email_settings', type: 'bulk_email'}, + {key: 'mailgun_api_key', type: 'bulk_email'}, + {key: 'mailgun_domain', type: 'bulk_email'}, + {key: 'mailgun_base_url', type: 'bulk_email'}, {key: 'amp', type: 'blog'}, {key: 'labs', type: 'blog'}, {key: 'slack', type: 'blog'}, @@ -95,7 +98,7 @@ describe('Settings API (canary)', function () { for (const defaultSetting of defaultSettingsKeyTypes) { should.exist(settings.find((setting) => { return setting.key === defaultSetting.key && setting.type === defaultSetting.type; - })); + }), `Expected to find a setting with key ${defaultSetting.key} and type ${defaultSetting.type}`); } localUtils.API.checkResponse(jsonResponse, 'settings'); diff --git a/test/regression/api/v2/admin/settings_spec.js b/test/regression/api/v2/admin/settings_spec.js index 608387df1c..dbb115617a 100644 --- a/test/regression/api/v2/admin/settings_spec.js +++ b/test/regression/api/v2/admin/settings_spec.js @@ -47,6 +47,9 @@ const defaultSettingsKeyTypes = [ {key: 'portal_button', type: 'portal'}, {key: 'portal_plans', type: 'portal'}, {key: 'bulk_email_settings', type: 'bulk_email'}, + {key: 'mailgun_api_key', type: 'bulk_email'}, + {key: 'mailgun_domain', type: 'bulk_email'}, + {key: 'mailgun_base_url', type: 'bulk_email'}, {key: 'amp', type: 'blog'}, {key: 'labs', type: 'blog'}, {key: 'slack', type: 'blog'}, diff --git a/test/regression/api/v3/admin/settings_spec.js b/test/regression/api/v3/admin/settings_spec.js index 5510504105..6c99e40247 100644 --- a/test/regression/api/v3/admin/settings_spec.js +++ b/test/regression/api/v3/admin/settings_spec.js @@ -50,6 +50,9 @@ const defaultSettingsKeys = [ 'portal_button', 'portal_plans', 'bulk_email_settings', + 'mailgun_api_key', + 'mailgun_domain', + 'mailgun_base_url', 'amp', 'labs', 'slack',