mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-01-06 22:40:14 -05:00
a68592a6b9
* 🔥 kill apiUrl helper, use urlFor helper instead More consistency of creating urls. Creates an easier ability to add config changes. Attention: urlFor function is getting a little nesty, BUT that is for now wanted to make easier and centralised changes to the configs. The url util need's refactoring anyway. * 🔥 urlSSL Remove all urlSSL usages. Add TODO's for the next commit to re-add logic for deleted logic. e.g. - cors helper generated an array of url's to allow requests from the defined config url's -> will be replaced by the admin url if available - theme handler prefered the urlSSL in case it was defined -> will be replaced by using the urlFor helper to get the blog url (based on the request secure flag) The changes in this commit doesn't have to be right, but it helped going step by step. The next commit is the more interesting one. * 🔥 ✨ remove forceAdminSSL, add new admin url and adapt logic I wanted to remove the forceAdminSSL as separate commit, but was hard to realise. That's why both changes are in one commit: 1. remove forceAdminSSL 2. add admin.url option - fix TODO's from last commits - rewrite the ssl middleware! - create some private helper functions in the url helper to realise the changes - rename some wordings and functions e.g. base === blog (we have so much different wordings) - i would like to do more, but this would end in a non readable PR - this commit contains the most important changes to offer admin.url option * 🤖 adapt tests IMPORTANT - all changes in the routing tests were needed, because each routing test did not start the ghost server - they just required the ghost application, which resulted in a random server port - having a random server port results in a redirect, caused by the ssl/redirect middleware * 😎 rename check-ssl middleware * 🎨 fix theme-handler because of master rebase
100 lines
3.4 KiB
JavaScript
100 lines
3.4 KiB
JavaScript
var debug = require('debug')('ghost:blog'),
|
|
path = require('path'),
|
|
|
|
// App requires
|
|
config = require('../config'),
|
|
storage = require('../storage'),
|
|
utils = require('../utils'),
|
|
|
|
// This should probably be an internal app
|
|
sitemapHandler = require('../data/xml/sitemap/handler'),
|
|
|
|
// routes
|
|
routes = require('./routes'),
|
|
|
|
// local middleware
|
|
cacheControl = require('../middleware/cache-control'),
|
|
urlRedirects = require('../middleware/url-redirects'),
|
|
errorHandler = require('../middleware/error-handler'),
|
|
maintenance = require('../middleware/maintenance'),
|
|
prettyURLs = require('../middleware/pretty-urls'),
|
|
serveSharedFile = require('../middleware/serve-shared-file'),
|
|
staticTheme = require('../middleware/static-theme'),
|
|
themeHandler = require('../middleware/theme-handler'),
|
|
serveFavicon = require('../middleware/serve-favicon');
|
|
|
|
module.exports = function setupBlogApp() {
|
|
debug('Blog setup start');
|
|
|
|
var blogApp = require('express')();
|
|
|
|
// ## App - specific code
|
|
// set the view engine
|
|
blogApp.set('view engine', 'hbs');
|
|
|
|
// Theme middleware
|
|
// rightly or wrongly currently comes before theme static assets
|
|
// @TODO revisit where and when these are needed
|
|
blogApp.use(themeHandler.updateActiveTheme);
|
|
blogApp.use(themeHandler.configHbsForContext);
|
|
debug('Themes done');
|
|
|
|
// Static content/assets
|
|
// @TODO make sure all of these have a local 404 error handler
|
|
// Favicon
|
|
blogApp.use(serveFavicon());
|
|
// Ghost-Url
|
|
blogApp.use(serveSharedFile('shared/ghost-url.js', 'application/javascript', utils.ONE_HOUR_S));
|
|
blogApp.use(serveSharedFile('shared/ghost-url.min.js', 'application/javascript', utils.ONE_HOUR_S));
|
|
// Serve sitemap.xsl file
|
|
blogApp.use(serveSharedFile('sitemap.xsl', 'text/xsl', utils.ONE_DAY_S));
|
|
// Serve robots.txt if not found in theme
|
|
blogApp.use(serveSharedFile('robots.txt', 'text/plain', utils.ONE_HOUR_S));
|
|
// Serve blog images using the storage adapter
|
|
blogApp.use('/' + utils.url.STATIC_IMAGE_URL_PREFIX, storage.getStorage().serve());
|
|
|
|
// Theme static assets/files
|
|
blogApp.use(staticTheme());
|
|
debug('Static content done');
|
|
|
|
// setup middleware for internal apps
|
|
// @TODO: refactor this to be a proper app middleware hook for internal & external apps
|
|
config.get('internalApps').forEach(function (appName) {
|
|
var app = require(path.join(config.get('paths').internalAppPath, appName));
|
|
if (app.hasOwnProperty('setupMiddleware')) {
|
|
app.setupMiddleware(blogApp);
|
|
}
|
|
});
|
|
|
|
// site map - this should probably be refactored to be an internal app
|
|
sitemapHandler(blogApp);
|
|
debug('Internal apps done');
|
|
|
|
// send 503 error page in case of maintenance
|
|
blogApp.use(maintenance);
|
|
|
|
// Force SSL if required
|
|
// must happen AFTER asset loading and BEFORE routing
|
|
blogApp.use(urlRedirects);
|
|
|
|
// Add in all trailing slashes & remove uppercase
|
|
// must happen AFTER asset loading and BEFORE routing
|
|
blogApp.use(prettyURLs);
|
|
|
|
// ### Caching
|
|
// Blog frontend is cacheable
|
|
blogApp.use(cacheControl('public'));
|
|
|
|
debug('General middleware done');
|
|
|
|
// Set up Frontend routes (including private blogging routes)
|
|
blogApp.use(routes());
|
|
|
|
// ### Error handlers
|
|
blogApp.use(errorHandler.pageNotFound);
|
|
blogApp.use(errorHandler.handleHTMLResponse);
|
|
|
|
debug('Blog setup end');
|
|
|
|
return blogApp;
|
|
};
|