diff --git a/core/server/api/canary/members.js b/core/server/api/canary/members.js index 23c0428cba..09a0360c20 100644 --- a/core/server/api/canary/members.js +++ b/core/server/api/canary/members.js @@ -123,6 +123,19 @@ const createLabels = async (labels, options) => { const members = { docName: 'members', + + hasActiveStripeSubscriptions: { + permissions: { + method: 'browse' + }, + async query() { + const hasActiveStripeSubscriptions = await membersService.api.hasActiveStripeSubscriptions(); + return { + hasActiveStripeSubscriptions + }; + } + }, + browse: { options: [ 'limit', diff --git a/core/server/api/canary/settings.js b/core/server/api/canary/settings.js index 4a6ff8bc18..b8f3a0f0d0 100644 --- a/core/server/api/canary/settings.js +++ b/core/server/api/canary/settings.js @@ -150,6 +150,25 @@ module.exports = { } }, + disconnectStripeConnectIntegration: { + permissions: { + method: 'edit' + }, + async query(frame) { + const hasActiveStripeSubscriptions = await membersService.api.hasActiveStripeSubscriptions(); + if (hasActiveStripeSubscriptions) { + throw new BadRequestError({ + message: 'Cannot disconnect Stripe whilst you have active subscriptions.' + }); + } + + return models.Settings.edit({ + key: 'stripe_connect_integration', + value: '{}' + }, frame.options); + } + }, + edit: { headers: { cacheInvalidate: true diff --git a/core/server/api/canary/utils/serializers/output/members.js b/core/server/api/canary/utils/serializers/output/members.js index e4f44cf98e..f727f5c3bc 100644 --- a/core/server/api/canary/utils/serializers/output/members.js +++ b/core/server/api/canary/utils/serializers/output/members.js @@ -6,6 +6,9 @@ const mapper = require('./utils/mapper'); const papaparse = require('papaparse'); module.exports = { + hasActiveStripeSubscriptions(data, apiConfig, frame) { + frame.response = data; + }, browse(data, apiConfig, frame) { debug('browse'); diff --git a/core/server/web/api/canary/admin/routes.js b/core/server/web/api/canary/admin/routes.js index 1ff96036bb..67f134cf63 100644 --- a/core/server/web/api/canary/admin/routes.js +++ b/core/server/web/api/canary/admin/routes.js @@ -63,6 +63,7 @@ module.exports = function apiRoutes() { router.put('/settings', mw.authAdminApi, http(apiCanary.settings.edit)); router.get('/settings/members/email', http(apiCanary.settings.validateMembersFromEmail)); router.post('/settings/members/email', mw.authAdminApi, http(apiCanary.settings.updateMembersFromEmail)); + router.del('/settings/stripe/connect', mw.authAdminApi, http(apiCanary.settings.disconnectStripeConnectIntegration)); // ## Users router.get('/users', mw.authAdminApi, http(apiCanary.users.browse)); @@ -100,6 +101,8 @@ module.exports = function apiRoutes() { http(apiCanary.members.importCSV) ); + router.get('/members/hasActiveStripeSubscriptions', shared.middlewares.labs.members, mw.authAdminApi, http(apiCanary.members.hasActiveStripeSubscriptions)); + router.get('/members/stripe_connect', shared.middlewares.labs.members, mw.authAdminApi, http(apiCanary.membersStripeConnect.auth)); router.get('/members/:id', shared.middlewares.labs.members, mw.authAdminApi, http(apiCanary.members.read)); diff --git a/package.json b/package.json index d2a4898434..8c8c68bd4e 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "@tryghost/kg-markdown-html-renderer": "2.0.1", "@tryghost/kg-mobiledoc-html-renderer": "3.0.1", "@tryghost/magic-link": "^0.4.8", - "@tryghost/members-api": "0.22.0", + "@tryghost/members-api": "0.23.0", "@tryghost/members-ssr": "0.8.1", "@tryghost/mw-session-from-token": "0.1.4", "@tryghost/session-service": "0.1.4", diff --git a/yarn.lock b/yarn.lock index 71001fbaa7..b543059c8b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -496,10 +496,10 @@ jsonwebtoken "^8.5.1" lodash "^4.17.15" -"@tryghost/members-api@0.22.0": - version "0.22.0" - resolved "https://registry.yarnpkg.com/@tryghost/members-api/-/members-api-0.22.0.tgz#70f6c06731b82b12aa117912ca9277b987ed2886" - integrity sha512-ABHSXOv/DdxlVaAwySqZeATByBdylyST/Tq19GAcGiK3ejDSPv7YW3+yL6a7ebM5RgbTchAULRNHyJKPAy63eg== +"@tryghost/members-api@^0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@tryghost/members-api/-/members-api-0.23.0.tgz#227a957b4d80fee928c4d91577b871c6b7d26b50" + integrity sha512-ttDS9ZV6Z0iT7Zlig87pXUVI7PvCkVIiEZOQKUW7wA9isGNL800SJuXwTcBTW/KWfmY/AmqtKBXVMl8Ko4+Abw== dependencies: "@tryghost/magic-link" "^0.4.9" bluebird "^3.5.4"