mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-21 09:52:06 +03:00
de3a45a805
no issue Prevents errors from being uploaded to Sentry when a 404 happens in Ghost Admin. At the moment, 404s in Ghost Admin create an ENOENT error in express' static library. Our generic 404 handler at the end will only intercept requests that don't have any errors in the context, so a simple middleware can strip out 404 errors just before we add in our own. The Ghost-specific error that we attach to requests does not get uploaded to Sentry :)
64 lines
2.3 KiB
JavaScript
64 lines
2.3 KiB
JavaScript
const debug = require('@tryghost/debug')('web:admin:app');
|
|
const express = require('../../../shared/express');
|
|
const serveStatic = express.static;
|
|
const config = require('../../../shared/config');
|
|
const constants = require('@tryghost/constants');
|
|
const urlUtils = require('../../../shared/url-utils');
|
|
const shared = require('../shared');
|
|
const errorHandler = require('@tryghost/mw-error-handler');
|
|
const sentry = require('../../../shared/sentry');
|
|
const redirectAdminUrls = require('./middleware/redirect-admin-urls');
|
|
|
|
module.exports = function setupAdminApp() {
|
|
debug('Admin setup start');
|
|
const adminApp = express('admin');
|
|
|
|
// Admin assets
|
|
// @TODO ensure this gets a local 404 error handler
|
|
const configMaxAge = config.get('caching:admin:maxAge');
|
|
adminApp.use('/assets', serveStatic(
|
|
config.get('paths').clientAssets,
|
|
{maxAge: (configMaxAge || configMaxAge === 0) ? configMaxAge : constants.ONE_YEAR_MS, fallthrough: false}
|
|
));
|
|
|
|
// Ember CLI's live-reload script
|
|
if (config.get('env') === 'development') {
|
|
adminApp.get('/ember-cli-live-reload.js', function emberLiveReload(req, res) {
|
|
res.redirect(`http://localhost:4200${urlUtils.getSubdir()}/ghost/ember-cli-live-reload.js`);
|
|
});
|
|
}
|
|
|
|
// Force SSL if required
|
|
// must happen AFTER asset loading and BEFORE routing
|
|
adminApp.use(shared.middleware.urlRedirects.adminSSLAndHostRedirect);
|
|
|
|
// Add in all trailing slashes & remove uppercase
|
|
// must happen AFTER asset loading and BEFORE routing
|
|
adminApp.use(shared.middleware.prettyUrls);
|
|
|
|
// Cache headers go last before serving the request
|
|
// Admin is currently set to not be cached at all
|
|
adminApp.use(shared.middleware.cacheControl('private'));
|
|
|
|
// Special redirects for the admin (these should have their own cache-control headers)
|
|
adminApp.use(redirectAdminUrls);
|
|
|
|
// Finally, routing
|
|
adminApp.get('*', require('./controller'));
|
|
|
|
adminApp.use((err, req, res, next) => {
|
|
if (err.statusCode && err.statusCode === 404) {
|
|
// Remove 404 errors for next middleware to inject
|
|
next();
|
|
} else {
|
|
next(err);
|
|
}
|
|
});
|
|
adminApp.use(errorHandler.pageNotFound);
|
|
adminApp.use(errorHandler.handleHTMLResponse(sentry));
|
|
|
|
debug('Admin setup end');
|
|
|
|
return adminApp;
|
|
};
|