ghost 4.22.3 → 4.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/.c8rc.json +24 -0
  2. package/.eslintrc.js +39 -0
  3. package/Gruntfile.js +0 -1
  4. package/content/public/README.md +3 -0
  5. package/content/themes/casper/assets/built/casper.js +1 -1
  6. package/content/themes/casper/assets/built/casper.js.map +1 -1
  7. package/content/themes/casper/assets/built/global.css +1 -1
  8. package/content/themes/casper/assets/built/global.css.map +1 -1
  9. package/content/themes/casper/assets/built/screen.css +1 -1
  10. package/content/themes/casper/assets/built/screen.css.map +1 -1
  11. package/content/themes/casper/assets/css/global.css +6 -1
  12. package/content/themes/casper/assets/css/screen.css +32 -216
  13. package/content/themes/casper/default.hbs +2 -2
  14. package/content/themes/casper/package.json +3 -2
  15. package/content/themes/casper/post.hbs +1 -1
  16. package/content/themes/casper/yarn.lock +173 -123
  17. package/core/app.js +12 -1
  18. package/core/boot.js +47 -28
  19. package/core/bridge.js +10 -10
  20. package/core/built/assets/{chunk.3.324fd0cc598c73650219.js → chunk.3.8f95b516d88ff4eec64c.js} +18 -18
  21. package/core/built/assets/ghost-dark-d690e732e17ffc794e2e59c1467ca282.css +1 -0
  22. package/core/built/assets/ghost.min-043bb7480a0810109b130f13b2a4235e.css +1 -0
  23. package/core/built/assets/{ghost.min-7da921f6c6cac3fe10da1ba104575440.js → ghost.min-bc72f685c1c9adc9885925c1412435a5.js} +563 -605
  24. package/core/built/assets/icons/audio-upload.svg +8 -0
  25. package/core/built/assets/icons/powered-by-tenor.svg +35 -0
  26. package/core/built/assets/icons/tenor.svg +7 -0
  27. package/core/built/assets/{vendor.min-413f887176a041e6dbf88214ca9a7481.js → vendor.min-d1234c632a54502777c34e50752fa3fc.js} +4622 -3631
  28. package/core/frontend/apps/amp/lib/helpers/amp_content.js +2 -2
  29. package/core/frontend/apps/amp/lib/views/amp.hbs +112 -0
  30. package/core/frontend/apps/private-blogging/index.js +1 -1
  31. package/core/frontend/apps/private-blogging/lib/router.js +1 -1
  32. package/core/frontend/services/apps/index.js +1 -1
  33. package/core/frontend/services/apps/loader.js +3 -3
  34. package/core/frontend/services/card-assets/index.js +0 -12
  35. package/core/frontend/services/card-assets/service.js +29 -28
  36. package/core/frontend/services/helpers/handlebars.js +1 -1
  37. package/core/frontend/services/routing/CollectionRouter.js +4 -5
  38. package/core/frontend/services/routing/EmailRouter.js +1 -1
  39. package/core/frontend/services/routing/ParentRouter.js +0 -8
  40. package/core/frontend/services/routing/PreviewRouter.js +1 -1
  41. package/core/frontend/services/routing/StaticPagesRouter.js +1 -1
  42. package/core/frontend/services/routing/StaticRoutesRouter.js +4 -4
  43. package/core/frontend/services/routing/TaxonomyRouter.js +3 -3
  44. package/core/frontend/services/routing/{middlewares → middleware}/index.js +0 -0
  45. package/core/frontend/services/routing/{middlewares → middleware}/page-param.js +0 -0
  46. package/core/frontend/services/routing/router-manager.js +7 -2
  47. package/core/frontend/services/rss/generate-feed.js +2 -1
  48. package/core/frontend/services/theme-engine/middleware/ensure-active-theme.js +34 -0
  49. package/core/frontend/services/theme-engine/middleware/index.js +6 -0
  50. package/core/frontend/services/theme-engine/middleware/update-global-template-options.js +116 -0
  51. package/core/frontend/services/theme-engine/middleware/update-local-template-data.js +9 -0
  52. package/core/frontend/services/theme-engine/middleware/update-local-template-options.js +57 -0
  53. package/core/frontend/src/cards/css/bookmark.css +72 -47
  54. package/core/frontend/src/cards/css/button.css +4 -0
  55. package/core/frontend/src/cards/css/callout.css +40 -3
  56. package/core/frontend/src/cards/css/gallery.css +15 -10
  57. package/core/frontend/src/cards/css/nft.css +20 -11
  58. package/core/frontend/src/cards/css/toggle.css +58 -0
  59. package/core/frontend/src/cards/js/toggle.js +16 -0
  60. package/core/frontend/web/middleware/error-handler.js +93 -0
  61. package/core/frontend/web/middleware/handle-image-sizes.js +3 -6
  62. package/core/frontend/web/middleware/index.js +1 -0
  63. package/core/frontend/web/middleware/serve-public-file.js +39 -16
  64. package/core/frontend/web/site.js +11 -14
  65. package/core/server/adapters/scheduling/SchedulingDefault.js +2 -2
  66. package/core/server/adapters/storage/LocalStorageBase.js +2 -2
  67. package/core/server/api/canary/authentication.js +1 -1
  68. package/core/server/api/canary/db.js +2 -2
  69. package/core/server/api/canary/media.js +3 -2
  70. package/core/server/api/canary/oembed.js +16 -1
  71. package/core/server/api/canary/session.js +1 -1
  72. package/core/server/api/canary/slugs.js +1 -1
  73. package/core/server/api/canary/utils/permissions.js +2 -2
  74. package/core/server/api/canary/utils/serializers/output/config.js +2 -6
  75. package/core/server/api/v2/authentication.js +1 -1
  76. package/core/server/api/v2/db.js +2 -2
  77. package/core/server/api/v2/session.js +1 -1
  78. package/core/server/api/v2/slugs.js +1 -1
  79. package/core/server/api/v2/utils/permissions.js +2 -2
  80. package/core/server/api/v3/authentication.js +1 -1
  81. package/core/server/api/v3/db.js +2 -2
  82. package/core/server/api/v3/session.js +1 -1
  83. package/core/server/api/v3/slugs.js +1 -1
  84. package/core/server/api/v3/utils/permissions.js +2 -2
  85. package/core/server/data/db/connection.js +7 -0
  86. package/core/server/data/db/state-manager.js +4 -4
  87. package/core/server/data/exporter/export-filename.js +1 -1
  88. package/core/server/data/importer/handlers/json.js +1 -1
  89. package/core/server/data/importer/import-manager.js +1 -1
  90. package/core/server/data/importer/importers/data/base.js +1 -1
  91. package/core/server/data/importer/importers/data/data-importer.js +3 -3
  92. package/core/server/data/migrations/init/2-create-fixtures.js +3 -20
  93. package/core/server/data/migrations/utils.js +2 -2
  94. package/core/server/data/migrations/versions/1.21/1-add-contributor-role.js +5 -5
  95. package/core/server/data/migrations/versions/1.25/1-update-koenig-beta-html.js +1 -0
  96. package/core/server/data/migrations/versions/2.15/2-insert-zapier-integration.js +3 -3
  97. package/core/server/data/migrations/versions/2.2/3-insert-admin-integration-role.js +5 -5
  98. package/core/server/data/migrations/versions/2.27/1-insert-ghost-db-backup-role.js +5 -6
  99. package/core/server/data/migrations/versions/2.27/2-insert-db-backup-integration.js +3 -4
  100. package/core/server/data/migrations/versions/2.28/3-insert-ghost-scheduler-role.js +7 -7
  101. package/core/server/data/migrations/versions/2.28/4-insert-scheduler-integration.js +3 -3
  102. package/core/server/data/migrations/versions/3.1/08-add-uuid-values-to-members.js +1 -0
  103. package/core/server/data/migrations/versions/3.22/02-settings-key-renames.js +2 -0
  104. package/core/server/data/migrations/versions/3.22/05-migrate-members-subscription-settings.js +3 -0
  105. package/core/server/data/migrations/versions/3.22/06-migrate-stripe-connect-settings.js +2 -0
  106. package/core/server/data/migrations/versions/3.23/01-migrate-bulk-email-settings.js +1 -0
  107. package/core/server/data/migrations/versions/3.29/01-remove-duplicate-subscriptions.js +2 -0
  108. package/core/server/data/migrations/versions/3.29/02-remove-duplicate-customers.js +2 -0
  109. package/core/server/data/migrations/versions/3.38/04-populate-recipient-filter-column.js +2 -0
  110. package/core/server/data/migrations/versions/4.0/01-update-mobiledoc.js +2 -0
  111. package/core/server/data/migrations/versions/4.0/03-populate-status-column-for-members.js +4 -0
  112. package/core/server/data/migrations/versions/4.0/06-populate-members-subscribe-events-table.js +1 -0
  113. package/core/server/data/migrations/versions/4.0/17-populate-members-status-events-table.js +1 -0
  114. package/core/server/data/migrations/versions/4.0/18-transform-urls-absolute-to-transform-ready.js +5 -0
  115. package/core/server/data/migrations/versions/4.0/22-solve-orphaned-webhooks.js +1 -0
  116. package/core/server/data/migrations/versions/4.0/23-regenerate-posts-html.js +1 -0
  117. package/core/server/data/migrations/versions/4.0/25-populate-members-paid-subscription-events-table.js +2 -1
  118. package/core/server/data/migrations/versions/4.12/02-fix-member-statuses.js +1 -0
  119. package/core/server/data/migrations/versions/4.14/01-fix-comped-member-statuses.js +3 -0
  120. package/core/server/data/migrations/versions/4.14/02-fix-free-members-status-events.js +1 -0
  121. package/core/server/data/migrations/versions/4.20/05-remove-not-null-constraint-from-portal-title.js +2 -0
  122. package/core/server/data/migrations/versions/4.23/01-truncate-offer-names.js +59 -0
  123. package/core/server/data/migrations/versions/4.3/04-attach-members-to-product.js +1 -0
  124. package/core/server/data/migrations/versions/4.4/01-restore-free-members-signup-setting-from-backup.js +1 -0
  125. package/core/server/data/migrations/versions/4.6/01-remove-comped-status.js +1 -0
  126. package/core/server/data/migrations/versions/4.8/04-migrate-show-newsletter-header-setting.js +1 -0
  127. package/core/server/data/migrations/versions/4.9/05-fix-missed-mobiledoc-url-transforms.js +1 -0
  128. package/core/server/data/migrations/versions/4.9/06-add-comped-status.js +1 -0
  129. package/core/server/data/migrations/versions/4.9/07-update-comped-members-status-events.js +1 -0
  130. package/core/server/data/schema/commands.js +2 -2
  131. package/core/server/data/schema/fixtures/fixture-manager.js +340 -0
  132. package/core/server/data/schema/fixtures/index.js +8 -2
  133. package/core/server/ghost-server.js +2 -2
  134. package/core/server/lib/image/image-size.js +2 -2
  135. package/core/server/models/base/listeners.js +2 -2
  136. package/core/server/models/member-email-change-event.js +2 -2
  137. package/core/server/models/member-login-event.js +2 -2
  138. package/core/server/models/member-paid-subscription-event.js +3 -3
  139. package/core/server/models/member-payment-event.js +3 -3
  140. package/core/server/models/member-product-event.js +6 -6
  141. package/core/server/models/member-status-event.js +5 -3
  142. package/core/server/models/member-subscribe-event.js +9 -3
  143. package/core/server/models/relations/authors.js +1 -1
  144. package/core/server/models/settings.js +1 -1
  145. package/core/server/services/auth/passwordreset.js +1 -1
  146. package/core/server/services/auth/setup.js +1 -1
  147. package/core/server/services/email-analytics/jobs/index.js +1 -1
  148. package/core/server/services/mega/mega.js +6 -4
  149. package/core/server/services/mega/post-email-serializer.js +5 -1
  150. package/core/server/services/mega/segment-parser.js +1 -2
  151. package/core/server/services/mega/template.js +52 -37
  152. package/core/server/services/members/api.js +22 -0
  153. package/core/server/services/members/config.js +1 -1
  154. package/core/server/services/members/emails/signup-paid.js +168 -0
  155. package/core/server/services/members/service.js +6 -2
  156. package/core/server/services/members/stripe-connect.js +4 -2
  157. package/core/server/services/nft-oembed.js +13 -22
  158. package/core/server/services/oembed.js +28 -24
  159. package/core/server/services/permissions/can-this.js +1 -1
  160. package/core/server/services/public-config/config.js +1 -1
  161. package/core/server/services/redirects/api.js +20 -25
  162. package/core/server/services/redirects/index.js +18 -10
  163. package/core/server/services/redirects/utils.js +14 -0
  164. package/core/server/services/redirects/validation.js +10 -0
  165. package/core/server/services/route-settings/default-settings-manager.js +1 -1
  166. package/core/server/services/route-settings/index.js +40 -17
  167. package/core/server/services/route-settings/route-settings.js +120 -115
  168. package/core/server/services/route-settings/settings-loader.js +18 -36
  169. package/core/server/services/route-settings/yaml-parser.js +1 -1
  170. package/core/server/services/slack.js +1 -1
  171. package/core/server/services/themes/activation-bridge.js +3 -3
  172. package/core/server/services/themes/storage.js +2 -2
  173. package/core/server/services/twitter-embed.js +80 -0
  174. package/core/server/services/url/LocalFileCache.js +75 -0
  175. package/core/server/services/url/Resources.js +8 -2
  176. package/core/server/services/url/UrlGenerator.js +23 -20
  177. package/core/server/services/url/UrlService.js +75 -63
  178. package/core/server/services/url/index.js +17 -3
  179. package/core/server/services/xmlrpc.js +2 -2
  180. package/core/server/web/admin/app.js +7 -10
  181. package/core/server/web/admin/controller.js +35 -12
  182. package/core/server/web/admin/middleware/redirect-admin-urls.js +15 -0
  183. package/core/server/web/admin/views/default-prod.html +4 -4
  184. package/core/server/web/admin/views/default.html +4 -4
  185. package/core/server/web/api/app.js +1 -1
  186. package/core/server/web/api/canary/admin/app.js +3 -6
  187. package/core/server/web/api/canary/admin/middleware.js +7 -7
  188. package/core/server/web/api/canary/admin/routes.js +5 -5
  189. package/core/server/web/api/canary/content/app.js +3 -6
  190. package/core/server/web/api/canary/content/middleware.js +3 -3
  191. package/core/server/web/api/v2/admin/app.js +3 -6
  192. package/core/server/web/api/v2/admin/middleware.js +7 -7
  193. package/core/server/web/api/v2/admin/routes.js +5 -5
  194. package/core/server/web/api/v2/content/app.js +3 -6
  195. package/core/server/web/api/v2/content/middleware.js +3 -3
  196. package/core/server/web/api/v3/admin/app.js +3 -6
  197. package/core/server/web/api/v3/admin/middleware.js +7 -7
  198. package/core/server/web/api/v3/admin/routes.js +5 -5
  199. package/core/server/web/api/v3/content/app.js +3 -6
  200. package/core/server/web/api/v3/content/middleware.js +3 -3
  201. package/core/server/web/members/app.js +6 -9
  202. package/core/server/web/oauth/app.js +0 -4
  203. package/core/server/web/parent/app.js +17 -9
  204. package/core/server/web/parent/frontend.js +1 -1
  205. package/core/server/web/shared/index.js +2 -2
  206. package/core/server/web/shared/{middlewares → middleware}/api/index.js +0 -0
  207. package/core/server/web/shared/{middlewares → middleware}/api/spam-prevention.js +0 -0
  208. package/core/server/web/shared/{middlewares → middleware}/brute.js +0 -0
  209. package/core/server/web/shared/{middlewares → middleware}/cache-control.js +0 -0
  210. package/core/server/web/shared/middleware/error-handler.js +224 -0
  211. package/core/server/web/shared/{middlewares → middleware}/index.js +0 -4
  212. package/core/server/web/shared/{middlewares → middleware}/pretty-urls.js +0 -0
  213. package/core/server/web/shared/{middlewares → middleware}/uncapitalise.js +0 -0
  214. package/core/server/web/shared/{middlewares → middleware}/url-redirects.js +0 -0
  215. package/core/shared/config/defaults.json +13 -1
  216. package/core/shared/config/helpers.js +42 -0
  217. package/core/shared/config/loader.js +1 -1
  218. package/core/shared/labs.js +9 -5
  219. package/core/shared/sentry.js +1 -1
  220. package/loggingrc.js +19 -20
  221. package/package.json +38 -37
  222. package/yarn.lock +1064 -892
  223. package/content/themes/casper/assets/js/gallery-card.js +0 -24
  224. package/core/built/assets/ghost-dark-39fb496d051565531062d7e047d1c0b1.css +0 -1
  225. package/core/built/assets/ghost.min-4207edfc1ae0a3f9f6505ca00d20b0c0.css +0 -1
  226. package/core/frontend/services/theme-engine/middleware.js +0 -209
  227. package/core/server/data/schema/fixtures/utils.js +0 -321
  228. package/core/server/web/parent/vhost-utils.js +0 -39
  229. package/core/server/web/shared/middlewares/error-handler.js +0 -329
  230. package/core/server/web/shared/middlewares/maintenance.js +0 -25
@@ -1,10 +1,20 @@
1
1
  const debug = require('@tryghost/debug')('web:admin:controller');
2
+ const errors = require('@tryghost/errors');
3
+ const tpl = require('@tryghost/tpl');
2
4
  const path = require('path');
3
5
  const fs = require('fs');
4
6
  const crypto = require('crypto');
5
7
  const config = require('../../../shared/config');
6
8
  const updateCheck = require('../../update-check');
7
9
 
10
+ const messages = {
11
+ templateError: {
12
+ message: 'Unable to find admin template file {templatePath}',
13
+ context: 'These template files are generated as part of the build process',
14
+ help: 'Please see {link}'
15
+ }
16
+ };
17
+
8
18
  /**
9
19
  * @description Admin controller to handle /ghost/ requests.
10
20
  *
@@ -23,18 +33,31 @@ module.exports = function adminController(req, res) {
23
33
  const templatePath = path.resolve(config.get('paths').adminViews, defaultTemplate);
24
34
  const headers = {};
25
35
 
26
- // Generate our own ETag header
27
- // `sendFile` by default uses filesize+lastmod date to generate an etag.
28
- // That doesn't work for admin templates because the filesize doesn't change between versions
29
- // and `npm pack` sets a fixed lastmod date for every file meaning the default etag never changes
30
- const fileBuffer = fs.readFileSync(templatePath);
31
- const hashSum = crypto.createHash('md5');
32
- hashSum.update(fileBuffer);
33
- headers.ETag = hashSum.digest('hex');
36
+ try {
37
+ // Generate our own ETag header
38
+ // `sendFile` by default uses filesize+lastmod date to generate an etag.
39
+ // That doesn't work for admin templates because the filesize doesn't change between versions
40
+ // and `npm pack` sets a fixed lastmod date for every file meaning the default etag never changes
41
+ const fileBuffer = fs.readFileSync(templatePath);
42
+ const hashSum = crypto.createHash('md5');
43
+ hashSum.update(fileBuffer);
44
+ headers.ETag = hashSum.digest('hex');
34
45
 
35
- if (config.get('adminFrameProtection')) {
36
- headers['X-Frame-Options'] = 'sameorigin';
37
- }
46
+ if (config.get('adminFrameProtection')) {
47
+ headers['X-Frame-Options'] = 'sameorigin';
48
+ }
38
49
 
39
- res.sendFile(templatePath, {headers});
50
+ res.sendFile(templatePath, {headers});
51
+ } catch (error) {
52
+ if (error.code === 'ENOENT') {
53
+ throw new errors.IncorrectUsageError({
54
+ message: tpl(messages.templateError.message, {templatePath}),
55
+ context: tpl(messages.templateError.context),
56
+ help: tpl(messages.templateError.help, {link: 'https://ghost.org/docs/install/source/'}),
57
+ error: error
58
+ });
59
+ } else {
60
+ throw error;
61
+ }
62
+ }
40
63
  };
@@ -0,0 +1,15 @@
1
+ const urlUtils = require('../../../../shared/url-utils');
2
+
3
+ function redirectAdminUrls(req, res, next) {
4
+ const subdir = urlUtils.getSubdir();
5
+ const ghostPathRegex = new RegExp(`^${subdir}/ghost/(.+)`);
6
+ const ghostPathMatch = req.originalUrl.match(ghostPathRegex);
7
+
8
+ if (ghostPathMatch) {
9
+ return res.redirect(urlUtils.urlJoin(urlUtils.urlFor('admin'), '#', ghostPathMatch[1]));
10
+ }
11
+
12
+ next();
13
+ }
14
+
15
+ module.exports = redirectAdminUrls;
@@ -8,7 +8,7 @@
8
8
  <title>Ghost Admin</title>
9
9
 
10
10
 
11
- <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%2F%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%224.22%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22moment%22%3A%7B%22includeTimezone%22%3A%22all%22%7D%2C%22emberKeyboard%22%3A%7B%22disableInputsInitializer%22%3Atrue%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%7D" />
11
+ <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%2F%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%224.25%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22moment%22%3A%7B%22includeTimezone%22%3A%22all%22%7D%2C%22emberKeyboard%22%3A%7B%22disableInputsInitializer%22%3Atrue%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%7D" />
12
12
 
13
13
  <meta name="HandheldFriendly" content="True" />
14
14
  <meta name="MobileOptimized" content="320" />
@@ -41,7 +41,7 @@
41
41
 
42
42
 
43
43
  <link rel="stylesheet" href="assets/vendor.min-987af30228885bce50f05c4723fe6f53.css">
44
- <link rel="stylesheet" href="assets/ghost.min-4207edfc1ae0a3f9f6505ca00d20b0c0.css" title="light">
44
+ <link rel="stylesheet" href="assets/ghost.min-043bb7480a0810109b130f13b2a4235e.css" title="light">
45
45
 
46
46
 
47
47
 
@@ -59,8 +59,8 @@
59
59
  <div id="ember-basic-dropdown-wormhole"></div>
60
60
 
61
61
 
62
- <script src="assets/vendor.min-413f887176a041e6dbf88214ca9a7481.js"></script>
63
- <script src="assets/ghost.min-7da921f6c6cac3fe10da1ba104575440.js"></script>
62
+ <script src="assets/vendor.min-d1234c632a54502777c34e50752fa3fc.js"></script>
63
+ <script src="assets/ghost.min-bc72f685c1c9adc9885925c1412435a5.js"></script>
64
64
 
65
65
  </body>
66
66
  </html>
@@ -8,7 +8,7 @@
8
8
  <title>Ghost Admin</title>
9
9
 
10
10
 
11
- <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%2F%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%224.22%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22moment%22%3A%7B%22includeTimezone%22%3A%22all%22%7D%2C%22emberKeyboard%22%3A%7B%22disableInputsInitializer%22%3Atrue%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%7D" />
11
+ <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%2F%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%224.25%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22moment%22%3A%7B%22includeTimezone%22%3A%22all%22%7D%2C%22emberKeyboard%22%3A%7B%22disableInputsInitializer%22%3Atrue%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%7D" />
12
12
 
13
13
  <meta name="HandheldFriendly" content="True" />
14
14
  <meta name="MobileOptimized" content="320" />
@@ -41,7 +41,7 @@
41
41
 
42
42
 
43
43
  <link rel="stylesheet" href="assets/vendor.min-987af30228885bce50f05c4723fe6f53.css">
44
- <link rel="stylesheet" href="assets/ghost.min-4207edfc1ae0a3f9f6505ca00d20b0c0.css" title="light">
44
+ <link rel="stylesheet" href="assets/ghost.min-043bb7480a0810109b130f13b2a4235e.css" title="light">
45
45
 
46
46
 
47
47
 
@@ -59,8 +59,8 @@
59
59
  <div id="ember-basic-dropdown-wormhole"></div>
60
60
 
61
61
 
62
- <script src="assets/vendor.min-413f887176a041e6dbf88214ca9a7481.js"></script>
63
- <script src="assets/ghost.min-7da921f6c6cac3fe10da1ba104575440.js"></script>
62
+ <script src="assets/vendor.min-d1234c632a54502777c34e50752fa3fc.js"></script>
63
+ <script src="assets/ghost.min-bc72f685c1c9adc9885925c1412435a5.js"></script>
64
64
 
65
65
  </body>
66
66
  </html>
@@ -2,7 +2,7 @@ const debug = require('@tryghost/debug')('web:api:default:app');
2
2
  const config = require('../../../shared/config');
3
3
  const express = require('../../../shared/express');
4
4
  const urlUtils = require('../../../shared/url-utils');
5
- const errorHandler = require('../shared/middlewares/error-handler');
5
+ const errorHandler = require('../shared/middleware/error-handler');
6
6
 
7
7
  module.exports = function setupApiApp() {
8
8
  debug('Parent API setup start');
@@ -19,22 +19,19 @@ module.exports = function setupApiApp() {
19
19
  // Query parsing
20
20
  apiApp.use(boolParser());
21
21
 
22
- // send 503 json response in case of maintenance
23
- apiApp.use(shared.middlewares.maintenance);
24
-
25
22
  // Check version matches for API requests, depends on res.locals.safeVersion being set
26
23
  // Therefore must come after themeHandler.ghostLocals, for now
27
24
  apiApp.use(apiMw.versionMatch);
28
25
 
29
26
  // Admin API shouldn't be cached
30
- apiApp.use(shared.middlewares.cacheControl('private'));
27
+ apiApp.use(shared.middleware.cacheControl('private'));
31
28
 
32
29
  // Routing
33
30
  apiApp.use(routes());
34
31
 
35
32
  // API error handling
36
- apiApp.use(shared.middlewares.errorHandler.resourceNotFound);
37
- apiApp.use(shared.middlewares.errorHandler.handleJSONResponseV2);
33
+ apiApp.use(shared.middleware.errorHandler.resourceNotFound);
34
+ apiApp.use(shared.middleware.errorHandler.handleJSONResponseV2);
38
35
 
39
36
  debug('Admin API canary setup end');
40
37
 
@@ -44,7 +44,7 @@ const notImplemented = function (req, res, next) {
44
44
  }
45
45
  }
46
46
 
47
- next(new errors.GhostError({
47
+ next(new errors.InternalServerError({
48
48
  errorType: 'NotImplementedError',
49
49
  message: tpl(messages.notImplemented),
50
50
  statusCode: '501'
@@ -59,8 +59,8 @@ module.exports.authAdminApi = [
59
59
  auth.authorize.authorizeAdminApi,
60
60
  apiMw.updateUserLastSeen,
61
61
  apiMw.cors,
62
- shared.middlewares.urlRedirects.adminSSLAndHostRedirect,
63
- shared.middlewares.prettyUrls,
62
+ shared.middleware.urlRedirects.adminSSLAndHostRedirect,
63
+ shared.middleware.prettyUrls,
64
64
  notImplemented
65
65
  ];
66
66
 
@@ -73,8 +73,8 @@ module.exports.authAdminApiWithUrl = [
73
73
  auth.authorize.authorizeAdminApi,
74
74
  apiMw.updateUserLastSeen,
75
75
  apiMw.cors,
76
- shared.middlewares.urlRedirects.adminSSLAndHostRedirect,
77
- shared.middlewares.prettyUrls,
76
+ shared.middleware.urlRedirects.adminSSLAndHostRedirect,
77
+ shared.middleware.prettyUrls,
78
78
  notImplemented
79
79
  ];
80
80
 
@@ -83,7 +83,7 @@ module.exports.authAdminApiWithUrl = [
83
83
  */
84
84
  module.exports.publicAdminApi = [
85
85
  apiMw.cors,
86
- shared.middlewares.urlRedirects.adminSSLAndHostRedirect,
87
- shared.middlewares.prettyUrls,
86
+ shared.middleware.urlRedirects.adminSSLAndHostRedirect,
87
+ shared.middleware.prettyUrls,
88
88
  notImplemented
89
89
  ];
@@ -204,8 +204,8 @@ module.exports = function apiRoutes() {
204
204
  router.get('/session', mw.authAdminApi, http(api.session.read));
205
205
  // We don't need auth when creating a new session (logging in)
206
206
  router.post('/session',
207
- shared.middlewares.brute.globalBlock,
208
- shared.middlewares.brute.userLogin,
207
+ shared.middleware.brute.globalBlock,
208
+ shared.middleware.brute.userLogin,
209
209
  http(api.session.add)
210
210
  );
211
211
  router.del('/session', mw.authAdminApi, http(api.session.delete));
@@ -215,11 +215,11 @@ module.exports = function apiRoutes() {
215
215
 
216
216
  // ## Authentication
217
217
  router.post('/authentication/passwordreset',
218
- shared.middlewares.brute.globalReset,
219
- shared.middlewares.brute.userReset,
218
+ shared.middleware.brute.globalReset,
219
+ shared.middleware.brute.userReset,
220
220
  http(api.authentication.generateResetToken)
221
221
  );
222
- router.put('/authentication/passwordreset', shared.middlewares.brute.globalBlock, http(api.authentication.resetPassword));
222
+ router.put('/authentication/passwordreset', shared.middleware.brute.globalBlock, http(api.authentication.resetPassword));
223
223
  router.post('/authentication/invitation', http(api.authentication.acceptInvitation));
224
224
  router.get('/authentication/invitation', http(api.authentication.isInvitation));
225
225
  router.post('/authentication/setup', http(api.authentication.setup));
@@ -17,18 +17,15 @@ module.exports = function setupApiApp() {
17
17
  // Query parsing
18
18
  apiApp.use(boolParser());
19
19
 
20
- // send 503 json response in case of maintenance
21
- apiApp.use(shared.middlewares.maintenance);
22
-
23
20
  // API shouldn't be cached
24
- apiApp.use(shared.middlewares.cacheControl('private'));
21
+ apiApp.use(shared.middleware.cacheControl('private'));
25
22
 
26
23
  // Routing
27
24
  apiApp.use(routes());
28
25
 
29
26
  // API error handling
30
- apiApp.use(shared.middlewares.errorHandler.resourceNotFound);
31
- apiApp.use(shared.middlewares.errorHandler.handleJSONResponse);
27
+ apiApp.use(shared.middleware.errorHandler.resourceNotFound);
28
+ apiApp.use(shared.middleware.errorHandler.handleJSONResponse);
32
29
 
33
30
  debug('Content API canary setup end');
34
31
 
@@ -14,10 +14,10 @@ const shared = require('../../../shared');
14
14
  * Authentication for public endpoints
15
15
  */
16
16
  module.exports.authenticatePublic = [
17
- shared.middlewares.brute.contentApiKey,
17
+ shared.middleware.brute.contentApiKey,
18
18
  auth.authenticate.authenticateContentApi,
19
19
  auth.authorize.authorizeContentApi,
20
20
  cors(),
21
- shared.middlewares.urlRedirects.adminSSLAndHostRedirect,
22
- shared.middlewares.prettyUrls
21
+ shared.middleware.urlRedirects.adminSSLAndHostRedirect,
22
+ shared.middleware.prettyUrls
23
23
  ];
@@ -19,22 +19,19 @@ module.exports = function setupApiApp() {
19
19
  // Query parsing
20
20
  apiApp.use(boolParser());
21
21
 
22
- // send 503 json response in case of maintenance
23
- apiApp.use(shared.middlewares.maintenance);
24
-
25
22
  // Check version matches for API requests, depends on res.locals.safeVersion being set
26
23
  // Therefore must come after themeHandler.ghostLocals, for now
27
24
  apiApp.use(apiMw.versionMatch);
28
25
 
29
26
  // Admin API shouldn't be cached
30
- apiApp.use(shared.middlewares.cacheControl('private'));
27
+ apiApp.use(shared.middleware.cacheControl('private'));
31
28
 
32
29
  // Routing
33
30
  apiApp.use(routes());
34
31
 
35
32
  // API error handling
36
- apiApp.use(shared.middlewares.errorHandler.resourceNotFound);
37
- apiApp.use(shared.middlewares.errorHandler.handleJSONResponseV2);
33
+ apiApp.use(shared.middleware.errorHandler.resourceNotFound);
34
+ apiApp.use(shared.middleware.errorHandler.handleJSONResponseV2);
38
35
 
39
36
  debug('Admin API v2 setup end');
40
37
 
@@ -40,7 +40,7 @@ const notImplemented = function (req, res, next) {
40
40
  }
41
41
  }
42
42
 
43
- next(new errors.GhostError({
43
+ next(new errors.InternalServerError({
44
44
  errorType: 'NotImplementedError',
45
45
  message: tpl(messages.notImplemented),
46
46
  statusCode: '501'
@@ -55,8 +55,8 @@ module.exports.authAdminApi = [
55
55
  auth.authorize.authorizeAdminApi,
56
56
  apiMw.updateUserLastSeen,
57
57
  apiMw.cors,
58
- shared.middlewares.urlRedirects.adminSSLAndHostRedirect,
59
- shared.middlewares.prettyUrls,
58
+ shared.middleware.urlRedirects.adminSSLAndHostRedirect,
59
+ shared.middleware.prettyUrls,
60
60
  notImplemented
61
61
  ];
62
62
 
@@ -69,8 +69,8 @@ module.exports.authAdminApiWithUrl = [
69
69
  auth.authorize.authorizeAdminApi,
70
70
  apiMw.updateUserLastSeen,
71
71
  apiMw.cors,
72
- shared.middlewares.urlRedirects.adminSSLAndHostRedirect,
73
- shared.middlewares.prettyUrls,
72
+ shared.middleware.urlRedirects.adminSSLAndHostRedirect,
73
+ shared.middleware.prettyUrls,
74
74
  notImplemented
75
75
  ];
76
76
 
@@ -79,7 +79,7 @@ module.exports.authAdminApiWithUrl = [
79
79
  */
80
80
  module.exports.publicAdminApi = [
81
81
  apiMw.cors,
82
- shared.middlewares.urlRedirects.adminSSLAndHostRedirect,
83
- shared.middlewares.prettyUrls,
82
+ shared.middleware.urlRedirects.adminSSLAndHostRedirect,
83
+ shared.middleware.prettyUrls,
84
84
  notImplemented
85
85
  ];
@@ -142,19 +142,19 @@ module.exports = function apiRoutes() {
142
142
  router.get('/session', mw.authAdminApi, http(api.session.read));
143
143
  // We don't need auth when creating a new session (logging in)
144
144
  router.post('/session',
145
- shared.middlewares.brute.globalBlock,
146
- shared.middlewares.brute.userLogin,
145
+ shared.middleware.brute.globalBlock,
146
+ shared.middleware.brute.userLogin,
147
147
  http(api.session.add)
148
148
  );
149
149
  router.del('/session', mw.authAdminApi, http(api.session.delete));
150
150
 
151
151
  // ## Authentication
152
152
  router.post('/authentication/passwordreset',
153
- shared.middlewares.brute.globalReset,
154
- shared.middlewares.brute.userReset,
153
+ shared.middleware.brute.globalReset,
154
+ shared.middleware.brute.userReset,
155
155
  http(api.authentication.generateResetToken)
156
156
  );
157
- router.put('/authentication/passwordreset', shared.middlewares.brute.globalBlock, http(api.authentication.resetPassword));
157
+ router.put('/authentication/passwordreset', shared.middleware.brute.globalBlock, http(api.authentication.resetPassword));
158
158
  router.post('/authentication/invitation', http(api.authentication.acceptInvitation));
159
159
  router.get('/authentication/invitation', http(api.authentication.isInvitation));
160
160
  router.post('/authentication/setup', http(api.authentication.setup));
@@ -17,18 +17,15 @@ module.exports = function setupApiApp() {
17
17
  // Query parsing
18
18
  apiApp.use(boolParser());
19
19
 
20
- // send 503 json response in case of maintenance
21
- apiApp.use(shared.middlewares.maintenance);
22
-
23
20
  // API shouldn't be cached
24
- apiApp.use(shared.middlewares.cacheControl('private'));
21
+ apiApp.use(shared.middleware.cacheControl('private'));
25
22
 
26
23
  // Routing
27
24
  apiApp.use(routes());
28
25
 
29
26
  // API error handling
30
- apiApp.use(shared.middlewares.errorHandler.resourceNotFound);
31
- apiApp.use(shared.middlewares.errorHandler.handleJSONResponse);
27
+ apiApp.use(shared.middleware.errorHandler.resourceNotFound);
28
+ apiApp.use(shared.middleware.errorHandler.handleJSONResponse);
32
29
 
33
30
  debug('Content API v2 setup end');
34
31
 
@@ -14,10 +14,10 @@ const shared = require('../../../shared');
14
14
  * Authentication for public endpoints
15
15
  */
16
16
  module.exports.authenticatePublic = [
17
- shared.middlewares.brute.contentApiKey,
17
+ shared.middleware.brute.contentApiKey,
18
18
  auth.authenticate.authenticateContentApi,
19
19
  auth.authorize.authorizeContentApi,
20
20
  cors(),
21
- shared.middlewares.urlRedirects.adminSSLAndHostRedirect,
22
- shared.middlewares.prettyUrls
21
+ shared.middleware.urlRedirects.adminSSLAndHostRedirect,
22
+ shared.middleware.prettyUrls
23
23
  ];
@@ -19,22 +19,19 @@ module.exports = function setupApiApp() {
19
19
  // Query parsing
20
20
  apiApp.use(boolParser());
21
21
 
22
- // send 503 json response in case of maintenance
23
- apiApp.use(shared.middlewares.maintenance);
24
-
25
22
  // Check version matches for API requests, depends on res.locals.safeVersion being set
26
23
  // Therefore must come after themeHandler.ghostLocals, for now
27
24
  apiApp.use(apiMw.versionMatch);
28
25
 
29
26
  // Admin API shouldn't be cached
30
- apiApp.use(shared.middlewares.cacheControl('private'));
27
+ apiApp.use(shared.middleware.cacheControl('private'));
31
28
 
32
29
  // Routing
33
30
  apiApp.use(routes());
34
31
 
35
32
  // API error handling
36
- apiApp.use(shared.middlewares.errorHandler.resourceNotFound);
37
- apiApp.use(shared.middlewares.errorHandler.handleJSONResponseV2);
33
+ apiApp.use(shared.middleware.errorHandler.resourceNotFound);
34
+ apiApp.use(shared.middleware.errorHandler.handleJSONResponseV2);
38
35
 
39
36
  debug('Admin API v3 setup end');
40
37
 
@@ -44,7 +44,7 @@ const notImplemented = function (req, res, next) {
44
44
  }
45
45
  }
46
46
 
47
- next(new errors.GhostError({
47
+ next(new errors.InternalServerError({
48
48
  errorType: 'NotImplementedError',
49
49
  message: tpl(messages.notImplemented),
50
50
  statusCode: '501'
@@ -59,8 +59,8 @@ module.exports.authAdminApi = [
59
59
  auth.authorize.authorizeAdminApi,
60
60
  apiMw.updateUserLastSeen,
61
61
  apiMw.cors,
62
- shared.middlewares.urlRedirects.adminSSLAndHostRedirect,
63
- shared.middlewares.prettyUrls,
62
+ shared.middleware.urlRedirects.adminSSLAndHostRedirect,
63
+ shared.middleware.prettyUrls,
64
64
  notImplemented
65
65
  ];
66
66
 
@@ -73,8 +73,8 @@ module.exports.authAdminApiWithUrl = [
73
73
  auth.authorize.authorizeAdminApi,
74
74
  apiMw.updateUserLastSeen,
75
75
  apiMw.cors,
76
- shared.middlewares.urlRedirects.adminSSLAndHostRedirect,
77
- shared.middlewares.prettyUrls,
76
+ shared.middleware.urlRedirects.adminSSLAndHostRedirect,
77
+ shared.middleware.prettyUrls,
78
78
  notImplemented
79
79
  ];
80
80
 
@@ -83,7 +83,7 @@ module.exports.authAdminApiWithUrl = [
83
83
  */
84
84
  module.exports.publicAdminApi = [
85
85
  apiMw.cors,
86
- shared.middlewares.urlRedirects.adminSSLAndHostRedirect,
87
- shared.middlewares.prettyUrls,
86
+ shared.middleware.urlRedirects.adminSSLAndHostRedirect,
87
+ shared.middleware.prettyUrls,
88
88
  notImplemented
89
89
  ];
@@ -182,8 +182,8 @@ module.exports = function apiRoutes() {
182
182
  router.get('/session', mw.authAdminApi, http(api.session.read));
183
183
  // We don't need auth when creating a new session (logging in)
184
184
  router.post('/session',
185
- shared.middlewares.brute.globalBlock,
186
- shared.middlewares.brute.userLogin,
185
+ shared.middleware.brute.globalBlock,
186
+ shared.middleware.brute.userLogin,
187
187
  http(api.session.add)
188
188
  );
189
189
  router.del('/session', mw.authAdminApi, http(api.session.delete));
@@ -193,11 +193,11 @@ module.exports = function apiRoutes() {
193
193
 
194
194
  // ## Authentication
195
195
  router.post('/authentication/passwordreset',
196
- shared.middlewares.brute.globalReset,
197
- shared.middlewares.brute.userReset,
196
+ shared.middleware.brute.globalReset,
197
+ shared.middleware.brute.userReset,
198
198
  http(api.authentication.generateResetToken)
199
199
  );
200
- router.put('/authentication/passwordreset', shared.middlewares.brute.globalBlock, http(api.authentication.resetPassword));
200
+ router.put('/authentication/passwordreset', shared.middleware.brute.globalBlock, http(api.authentication.resetPassword));
201
201
  router.post('/authentication/invitation', http(api.authentication.acceptInvitation));
202
202
  router.get('/authentication/invitation', http(api.authentication.isInvitation));
203
203
  router.post('/authentication/setup', http(api.authentication.setup));
@@ -17,18 +17,15 @@ module.exports = function setupApiApp() {
17
17
  // Query parsing
18
18
  apiApp.use(boolParser());
19
19
 
20
- // send 503 json response in case of maintenance
21
- apiApp.use(shared.middlewares.maintenance);
22
-
23
20
  // API shouldn't be cached
24
- apiApp.use(shared.middlewares.cacheControl('private'));
21
+ apiApp.use(shared.middleware.cacheControl('private'));
25
22
 
26
23
  // Routing
27
24
  apiApp.use(routes());
28
25
 
29
26
  // API error handling
30
- apiApp.use(shared.middlewares.errorHandler.resourceNotFound);
31
- apiApp.use(shared.middlewares.errorHandler.handleJSONResponse);
27
+ apiApp.use(shared.middleware.errorHandler.resourceNotFound);
28
+ apiApp.use(shared.middleware.errorHandler.handleJSONResponse);
32
29
 
33
30
  debug('Content API v3 setup end');
34
31
 
@@ -14,10 +14,10 @@ const shared = require('../../../shared');
14
14
  * Authentication for public endpoints
15
15
  */
16
16
  module.exports.authenticatePublic = [
17
- shared.middlewares.brute.contentApiKey,
17
+ shared.middleware.brute.contentApiKey,
18
18
  auth.authenticate.authenticateContentApi,
19
19
  auth.authorize.authorizeContentApi,
20
20
  cors(),
21
- shared.middlewares.urlRedirects.adminSSLAndHostRedirect,
22
- shared.middlewares.prettyUrls
21
+ shared.middleware.urlRedirects.adminSSLAndHostRedirect,
22
+ shared.middleware.prettyUrls
23
23
  ];
@@ -13,11 +13,8 @@ module.exports = function setupMembersApp() {
13
13
  debug('Members App setup start');
14
14
  const membersApp = express('members');
15
15
 
16
- // send 503 json response in case of maintenance
17
- membersApp.use(shared.middlewares.maintenance);
18
-
19
16
  // Members API shouldn't be cached
20
- membersApp.use(shared.middlewares.cacheControl('private'));
17
+ membersApp.use(shared.middleware.cacheControl('private'));
21
18
 
22
19
  // Support CORS for requests from the frontend
23
20
  const siteUrl = new URL(urlUtils.getSiteUrl());
@@ -42,19 +39,19 @@ module.exports = function setupMembersApp() {
42
39
  membersApp.get('/api/site', middleware.getMemberSiteData);
43
40
 
44
41
  // NOTE: this is wrapped in a function to ensure we always go via the getter
45
- membersApp.post('/api/send-magic-link', bodyParser.json(), shared.middlewares.brute.membersAuth, (req, res, next) => membersService.api.middleware.sendMagicLink(req, res, next));
42
+ membersApp.post('/api/send-magic-link', bodyParser.json(), shared.middleware.brute.membersAuth, (req, res, next) => membersService.api.middleware.sendMagicLink(req, res, next));
46
43
  membersApp.post('/api/create-stripe-checkout-session', (req, res, next) => membersService.api.middleware.createCheckoutSession(req, res, next));
47
44
  membersApp.post('/api/create-stripe-update-session', (req, res, next) => membersService.api.middleware.createCheckoutSetupSession(req, res, next));
48
45
  membersApp.put('/api/subscriptions/:id', (req, res, next) => membersService.api.middleware.updateSubscription(req, res, next));
49
46
  membersApp.post('/api/events', labs.enabledMiddleware('membersActivity'), middleware.loadMemberSession, (req, res, next) => membersService.api.middleware.createEvents(req, res, next));
50
47
 
51
48
  // API error handling
52
- membersApp.use('/api', shared.middlewares.errorHandler.resourceNotFound);
53
- membersApp.use('/api', shared.middlewares.errorHandler.handleJSONResponseV2);
49
+ membersApp.use('/api', shared.middleware.errorHandler.resourceNotFound);
50
+ membersApp.use('/api', shared.middleware.errorHandler.handleJSONResponseV2);
54
51
 
55
52
  // Webhook error handling
56
- membersApp.use('/webhooks', shared.middlewares.errorHandler.resourceNotFound);
57
- membersApp.use('/webhooks', shared.middlewares.errorHandler.handleJSONResponseV2);
53
+ membersApp.use('/webhooks', shared.middleware.errorHandler.resourceNotFound);
54
+ membersApp.use('/webhooks', shared.middleware.errorHandler.handleJSONResponseV2);
58
55
 
59
56
  debug('Members App setup end');
60
57
 
@@ -2,7 +2,6 @@ const debug = require('@tryghost/debug')('web:oauth:app');
2
2
  const {URL} = require('url');
3
3
  const express = require('../../../shared/express');
4
4
  const urlUtils = require('../../../shared/url-utils');
5
- const shared = require('../shared');
6
5
  const settingsCache = require('../../../shared/settings-cache');
7
6
  const models = require('../../models');
8
7
  const auth = require('../../services/auth');
@@ -24,9 +23,6 @@ module.exports = function setupOAuthApp() {
24
23
  }
25
24
  oauthApp.use(labsMiddleware);
26
25
 
27
- // send 503 json response in case of maintenance
28
- oauthApp.use(shared.middlewares.maintenance);
29
-
30
26
  /**
31
27
  * Configure the passport.authenticate middleware
32
28
  * We need to configure it on each request because clientId and secret