0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-03-11 02:12:21 -05:00

Moved members API out of backend

This commit is contained in:
Hannah Wolfe 2020-04-30 17:29:51 +01:00
parent d7c60d1bd8
commit fa4dfa1b21
6 changed files with 33 additions and 18 deletions

View file

@ -64,13 +64,11 @@
"all": ["v2", "v3", "canary"],
"canary": {
"admin": "canary/admin",
"content": "canary/content",
"members": "canary/members"
"content": "canary/content"
},
"v3": {
"admin": "v3/admin",
"content": "v3/content",
"members": "v3/members"
"content": "v3/content"
},
"v2": {
"admin": "v2/admin",

View file

@ -23,7 +23,7 @@ Array.prototype.forEach.call(document.querySelectorAll('form[data-members-form]'
}
form.classList.add('loading');
fetch('{{admin-url}}/api/canary/members/send-magic-link/', {
fetch('{{blog-url}}/members/api/send-magic-link/', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
@ -81,7 +81,7 @@ Array.prototype.forEach.call(document.querySelectorAll('[data-members-plan]'), f
}
return res.text();
}).then(function (identity) {
return fetch('{{admin-url}}/api/canary/members/create-stripe-checkout-session/', {
return fetch('{{blog-url}}/members/api/create-stripe-checkout-session/', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
@ -151,7 +151,7 @@ Array.prototype.forEach.call(document.querySelectorAll('[data-members-edit-billi
}
return res.text();
}).then(function (identity) {
return fetch('{{admin-url}}/api/canary/members/create-stripe-setup-session/', {
return fetch('{{blog-url}}/members/api/create-stripe-setup-session/', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
@ -233,7 +233,7 @@ Array.prototype.forEach.call(document.querySelectorAll('[data-members-cancel-sub
return res.text();
}).then(function (identity) {
return fetch('{{admin-url}}/api/canary/members/subscriptions/' + subscriptionId + '/', {
return fetch('{{blog-url}}/members/api/subscriptions/' + subscriptionId + '/', {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
@ -283,7 +283,7 @@ Array.prototype.forEach.call(document.querySelectorAll('[data-members-continue-s
return res.text();
}).then(function (identity) {
return fetch('{{admin-url}}/api/canary/members/subscriptions/' + subscriptionId + '/', {
return fetch('{{blog-url}}/members/api/subscriptions/' + subscriptionId + '/', {
method: 'PUT',
headers: {
'Content-Type': 'application/json'

File diff suppressed because one or more lines are too long

View file

@ -13,11 +13,9 @@ module.exports = function setupApiApp() {
apiApp.use(urlUtils.getVersionPath({version: 'v3', type: 'content'}), require('./canary/content/app')());
apiApp.use(urlUtils.getVersionPath({version: 'v3', type: 'admin'}), require('./canary/admin/app')());
apiApp.use(urlUtils.getVersionPath({version: 'v3', type: 'members'}), require('./canary/members/app')());
apiApp.use(urlUtils.getVersionPath({version: 'canary', type: 'content'}), require('./canary/content/app')());
apiApp.use(urlUtils.getVersionPath({version: 'canary', type: 'admin'}), require('./canary/admin/app')());
apiApp.use(urlUtils.getVersionPath({version: 'canary', type: 'members'}), require('./canary/members/app')());
// Error handling for requests to non-existent API versions
apiApp.use(errorHandler.resourceNotFound);

View file

@ -1,14 +1,23 @@
const debug = require('ghost-ignition').debug('web:members:app');
const {URL} = require('url');
const cors = require('cors');
const express = require('../../../shared/express');
const {middleware} = require('../../services/members');
const urlUtils = require('../../lib/url-utils');
const membersService = require('../../services/members');
const middleware = membersService.middleware;
const shared = require('../shared');
module.exports = function setupMembersApp() {
debug('Members setup start');
debug('Members App setup start');
const membersApp = express();
// Entire app is behind labs flag
membersApp.use(shared.middlewares.labs.members);
// Support CORS for requests from the frontend
const siteUrl = new URL(urlUtils.getSiteUrl());
membersApp.use(cors(siteUrl.origin));
// Currently global handling for signing in with ?token= magiclinks
membersApp.use(middleware.createSessionFromMagicLink);
@ -19,5 +28,17 @@ module.exports = function setupMembersApp() {
membersApp.delete('/ssr', shared.middlewares.labs.members, middleware.deleteSession);
membersApp.post('/webhooks/stripe', shared.middlewares.labs.members, middleware.stripeWebhooks);
// NOTE: this is wrapped in a function to ensure we always go via the getter
membersApp.post('/api/send-magic-link', (req, res, next) => membersService.api.middleware.sendMagicLink(req, res, next));
membersApp.post('/api/create-stripe-checkout-session', (req, res, next) => membersService.api.middleware.createCheckoutSession(req, res, next));
membersApp.post('/api/create-stripe-setup-session', (req, res, next) => membersService.api.middleware.createCheckoutSetupSession(req, res, next));
membersApp.put('/api/subscriptions/:id', (req, res, next) => membersService.api.middleware.updateSubscription(req, res, next));
// API error handling
membersApp.use(shared.middlewares.errorHandler.resourceNotFound);
membersApp.use(shared.middlewares.errorHandler.handleJSONResponseV2);
debug('Members App setup end');
return membersApp;
};

View file

@ -11,7 +11,6 @@ function createPublicFileMiddleware(file, type, maxAge) {
const publicFilePath = config.get('paths').publicFilePath;
const filePath = file.match(/^public/) ? path.join(publicFilePath, file.replace(/^public/, '')) : path.join(publicFilePath, file);
const blogRegex = /(\{\{blog-url\}\})/g;
const adminRegex = /(\{\{admin-url\}\})/g;
return function servePublicFile(req, res, next) {
if (content) {
@ -47,7 +46,6 @@ function createPublicFileMiddleware(file, type, maxAge) {
if (type === 'text/xsl' || type === 'text/plain' || type === 'application/javascript') {
str = str.replace(blogRegex, urlUtils.urlFor('home', true).replace(/\/$/, ''));
str = str.replace(adminRegex, urlUtils.urlFor('admin', true).replace(/\/$/, ''));
}
content = {