mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-03 23:00:14 -05:00
refs https://github.com/TryGhost/Team/issues/990 - Relying on uuid instead of slug makes the posts less discoverable and partially soves discoverability through overriden robots.txt files
65 lines
2.2 KiB
JavaScript
65 lines
2.2 KiB
JavaScript
const debug = require('@tryghost/debug')('services:routing:controllers:emailpost');
|
|
const config = require('../../../../shared/config');
|
|
const urlService = require('../../url');
|
|
const urlUtils = require('../../../../shared/url-utils');
|
|
const helpers = require('../helpers');
|
|
|
|
/**
|
|
* @description Email Post Controller.
|
|
* @param {Object} req
|
|
* @param {Object} res
|
|
* @param {Function} next
|
|
* @returns {Promise}
|
|
*/
|
|
module.exports = function emailPostController(req, res, next) {
|
|
debug('emailPostController');
|
|
|
|
const api = require('../../proxy').api[res.locals.apiVersion];
|
|
|
|
const params = {
|
|
uuid: req.params.uuid,
|
|
include: 'authors,tags',
|
|
context: {
|
|
member: res.locals.member
|
|
}
|
|
};
|
|
|
|
return api[res.routerOptions.query.controller]
|
|
.read(params)
|
|
.then(function then(result) {
|
|
const post = result[res.routerOptions.query.resource][0];
|
|
|
|
if (!post) {
|
|
return next();
|
|
}
|
|
|
|
if (req.params.options && req.params.options.toLowerCase() === 'edit') {
|
|
// CASE: last param of the url is /edit but admin redirects are disabled
|
|
if (!config.get('admin:redirects')) {
|
|
return next();
|
|
}
|
|
|
|
// CASE: last param of the url is /edit, redirect to admin
|
|
// NOTE: only 'post' resources support email-only mode
|
|
return urlUtils.redirectToAdmin(302, res, `/#/editor/post/${post.id}`);
|
|
} else if (req.params.options) {
|
|
// CASE: unknown options param detected, ignore
|
|
return next();
|
|
}
|
|
|
|
if (post.status === 'published') {
|
|
return urlUtils.redirect301(res, urlService.getUrlByResourceId(post.id, {withSubdirectory: true}));
|
|
}
|
|
|
|
if (res.locals.apiVersion !== 'v0.1' && res.locals.apiVersion !== 'v2') {
|
|
post.access = !!post.html;
|
|
}
|
|
|
|
// @TODO: See helpers/secure
|
|
helpers.secure(req, post);
|
|
|
|
const renderer = helpers.renderEntry(req, res);
|
|
return renderer(post);
|
|
})
|
|
.catch(helpers.handleError(next));
|
|
};
|