mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-01-01 15:29:19 +03:00
🐛 Fixed crashing on boot with revoked Stripe keys
no-issue The refactor of Stripe boot logic missed catching any errors from the migrations running or the webhooks initialising. This adds try/catches to the services so that we can log the errors.
This commit is contained in:
parent
bb10fedacd
commit
91df910dbb
@ -148,7 +148,11 @@ module.exports = {
|
||||
}
|
||||
})();
|
||||
|
||||
await stripeService.migrations.execute();
|
||||
try {
|
||||
await stripeService.migrations.execute();
|
||||
} catch (err) {
|
||||
logging.error(err);
|
||||
}
|
||||
},
|
||||
contentGating: require('./content-gating'),
|
||||
|
||||
|
@ -1,53 +1 @@
|
||||
const _ = require('lodash');
|
||||
const StripeService = require('@tryghost/members-stripe-service');
|
||||
const membersService = require('../members');
|
||||
const config = require('../../../shared/config');
|
||||
const settings = require('../../../shared/settings-cache');
|
||||
const urlUtils = require('../../../shared/url-utils');
|
||||
const events = require('../../lib/common/events');
|
||||
const models = require('../../models');
|
||||
const {getConfig} = require('./config');
|
||||
|
||||
function configureApi() {
|
||||
const cfg = getConfig(settings, config, urlUtils);
|
||||
if (cfg) {
|
||||
module.exports.configure(cfg);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const debouncedConfigureApi = _.debounce(() => {
|
||||
configureApi();
|
||||
}, 600);
|
||||
|
||||
module.exports = new StripeService({
|
||||
membersService,
|
||||
models: _.pick(models, ['Product', 'StripePrice', 'StripeCustomerSubscription', 'StripeProduct', 'MemberStripeCustomer', 'Offer', 'Settings']),
|
||||
StripeWebhook: {
|
||||
async get() {
|
||||
return {
|
||||
webhook_id: settings.get('members_stripe_webhook_id'),
|
||||
secret: settings.get('members_stripe_webhook_secret')
|
||||
};
|
||||
},
|
||||
async save(data) {
|
||||
await models.Settings.edit([{
|
||||
key: 'members_stripe_webhook_id',
|
||||
value: data.webhook_id
|
||||
}, {
|
||||
key: 'members_stripe_webhook_secret',
|
||||
value: data.secret
|
||||
}]);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
module.exports.init = async function init() {
|
||||
configureApi();
|
||||
events.on('settings.edited', function (model) {
|
||||
if (['stripe_publishable_key', 'stripe_secret_key', 'stripe_connect_publishable_key', 'stripe_connect_secret_key'].includes(model.get('key'))) {
|
||||
debouncedConfigureApi();
|
||||
}
|
||||
});
|
||||
};
|
||||
module.exports = require('./service');
|
||||
|
58
core/server/services/stripe/service.js
Normal file
58
core/server/services/stripe/service.js
Normal file
@ -0,0 +1,58 @@
|
||||
const _ = require('lodash');
|
||||
const StripeService = require('@tryghost/members-stripe-service');
|
||||
const logging = require('@tryghost/logging');
|
||||
const membersService = require('../members');
|
||||
const config = require('../../../shared/config');
|
||||
const settings = require('../../../shared/settings-cache');
|
||||
const urlUtils = require('../../../shared/url-utils');
|
||||
const events = require('../../lib/common/events');
|
||||
const models = require('../../models');
|
||||
const {getConfig} = require('./config');
|
||||
|
||||
async function configureApi() {
|
||||
const cfg = getConfig(settings, config, urlUtils);
|
||||
if (cfg) {
|
||||
await module.exports.configure(cfg);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const debouncedConfigureApi = _.debounce(() => {
|
||||
configureApi();
|
||||
}, 600);
|
||||
|
||||
module.exports = new StripeService({
|
||||
membersService,
|
||||
models: _.pick(models, ['Product', 'StripePrice', 'StripeCustomerSubscription', 'StripeProduct', 'MemberStripeCustomer', 'Offer', 'Settings']),
|
||||
StripeWebhook: {
|
||||
async get() {
|
||||
return {
|
||||
webhook_id: settings.get('members_stripe_webhook_id'),
|
||||
secret: settings.get('members_stripe_webhook_secret')
|
||||
};
|
||||
},
|
||||
async save(data) {
|
||||
await models.Settings.edit([{
|
||||
key: 'members_stripe_webhook_id',
|
||||
value: data.webhook_id
|
||||
}, {
|
||||
key: 'members_stripe_webhook_secret',
|
||||
value: data.secret
|
||||
}]);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
module.exports.init = async function init() {
|
||||
try {
|
||||
await configureApi();
|
||||
} catch (err) {
|
||||
logging.error(err);
|
||||
}
|
||||
events.on('settings.edited', function (model) {
|
||||
if (['stripe_publishable_key', 'stripe_secret_key', 'stripe_connect_publishable_key', 'stripe_connect_secret_key'].includes(model.get('key'))) {
|
||||
debouncedConfigureApi();
|
||||
}
|
||||
});
|
||||
};
|
Loading…
Reference in New Issue
Block a user