mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-29 18:16:17 +01:00
feat: #12101, dont return rssFeedUrl if feeds are disabled
This commit is contained in:
@@ -124,10 +124,15 @@ categoryController.get = async function (req, res, next) {
|
|||||||
categoryData.topicIndex = topicIndex;
|
categoryData.topicIndex = topicIndex;
|
||||||
categoryData.selectedTag = tagData.selectedTag;
|
categoryData.selectedTag = tagData.selectedTag;
|
||||||
categoryData.selectedTags = tagData.selectedTags;
|
categoryData.selectedTags = tagData.selectedTags;
|
||||||
categoryData.rssFeedUrl = `${url}/category/${categoryData.cid}.rss`;
|
if (req.loggedIn) {
|
||||||
if (parseInt(req.uid, 10)) {
|
|
||||||
categories.markAsRead([cid], req.uid);
|
categories.markAsRead([cid], req.uid);
|
||||||
categoryData.rssFeedUrl += `?uid=${req.uid}&token=${rssToken}`;
|
}
|
||||||
|
|
||||||
|
if (!meta.config['feeds:disableRSS']) {
|
||||||
|
categoryData.rssFeedUrl = `${url}/category/${categoryData.cid}.rss`;
|
||||||
|
if (req.loggedIn) {
|
||||||
|
categoryData.rssFeedUrl += `?uid=${req.uid}&token=${rssToken}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
addTags(categoryData, res, currentPage);
|
addTags(categoryData, res, currentPage);
|
||||||
|
|||||||
@@ -21,10 +21,12 @@ popularController.get = async function (req, res, next) {
|
|||||||
data.breadcrumbs = helpers.buildBreadcrumbs(breadcrumbs);
|
data.breadcrumbs = helpers.buildBreadcrumbs(breadcrumbs);
|
||||||
}
|
}
|
||||||
|
|
||||||
const feedQs = data.rssFeedUrl.split('?')[1];
|
if (!data['feeds:disableRSS'] && data.rssFeedUrl) {
|
||||||
data.rssFeedUrl = `${nconf.get('relative_path')}/popular/${validator.escape(String(req.query.term || 'alltime'))}.rss`;
|
const feedQs = data.rssFeedUrl.split('?')[1];
|
||||||
if (req.loggedIn) {
|
data.rssFeedUrl = `${nconf.get('relative_path')}/popular/${validator.escape(String(req.query.term || 'alltime'))}.rss`;
|
||||||
data.rssFeedUrl += `?${feedQs}`;
|
if (req.loggedIn) {
|
||||||
|
data.rssFeedUrl += `?${feedQs}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
res.render('popular', data);
|
res.render('popular', data);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -79,9 +79,11 @@ recentController.getData = async function (req, url, sort) {
|
|||||||
data.selectedTag = tagData.selectedTag;
|
data.selectedTag = tagData.selectedTag;
|
||||||
data.selectedTags = tagData.selectedTags;
|
data.selectedTags = tagData.selectedTags;
|
||||||
data['feeds:disableRSS'] = meta.config['feeds:disableRSS'] || 0;
|
data['feeds:disableRSS'] = meta.config['feeds:disableRSS'] || 0;
|
||||||
data.rssFeedUrl = `${relative_path}/${url}.rss`;
|
if (!meta.config['feeds:disableRSS']) {
|
||||||
if (req.loggedIn) {
|
data.rssFeedUrl = `${relative_path}/${url}.rss`;
|
||||||
data.rssFeedUrl += `?uid=${req.uid}&token=${rssToken}`;
|
if (req.loggedIn) {
|
||||||
|
data.rssFeedUrl += `?uid=${req.uid}&token=${rssToken}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data.filters = helpers.buildFilters(baseUrl, filter, query);
|
data.filters = helpers.buildFilters(baseUrl, filter, query);
|
||||||
|
|||||||
@@ -25,12 +25,13 @@ tagsController.getTag = async function (req, res) {
|
|||||||
breadcrumbs: helpers.buildBreadcrumbs([{ text: '[[tags:tags]]', url: '/tags' }, { text: tag }]),
|
breadcrumbs: helpers.buildBreadcrumbs([{ text: '[[tags:tags]]', url: '/tags' }, { text: tag }]),
|
||||||
title: `[[pages:tag, ${tag}]]`,
|
title: `[[pages:tag, ${tag}]]`,
|
||||||
};
|
};
|
||||||
const [settings, cids, categoryData, canPost, isPrivileged, isFollowing] = await Promise.all([
|
const [settings, cids, categoryData, canPost, isPrivileged, rssToken, isFollowing] = await Promise.all([
|
||||||
user.getSettings(req.uid),
|
user.getSettings(req.uid),
|
||||||
cid || categories.getCidsByPrivilege('categories:cid', req.uid, 'topics:read'),
|
cid || categories.getCidsByPrivilege('categories:cid', req.uid, 'topics:read'),
|
||||||
helpers.getSelectedCategory(cid),
|
helpers.getSelectedCategory(cid),
|
||||||
privileges.categories.canPostTopic(req.uid),
|
privileges.categories.canPostTopic(req.uid),
|
||||||
user.isPrivileged(req.uid),
|
user.isPrivileged(req.uid),
|
||||||
|
user.auth.getFeedToken(req.uid),
|
||||||
topics.isFollowingTag(req.params.tag, req.uid),
|
topics.isFollowingTag(req.params.tag, req.uid),
|
||||||
]);
|
]);
|
||||||
const start = Math.max(0, (page - 1) * settings.topicsPerPage);
|
const start = Math.max(0, (page - 1) * settings.topicsPerPage);
|
||||||
@@ -71,7 +72,13 @@ tagsController.getTag = async function (req, res) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
templateData['feeds:disableRSS'] = meta.config['feeds:disableRSS'];
|
templateData['feeds:disableRSS'] = meta.config['feeds:disableRSS'];
|
||||||
templateData.rssFeedUrl = `${nconf.get('relative_path')}/tags/${tag}.rss`;
|
if (!meta.config['feeds:disableRSS']) {
|
||||||
|
templateData.rssFeedUrl = `${nconf.get('relative_path')}/tags/${tag}.rss`;
|
||||||
|
if (req.loggedIn) {
|
||||||
|
templateData.rssFeedUrl += `?uid=${req.uid}&token=${rssToken}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
res.render('tag', templateData);
|
res.render('tag', templateData);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -19,10 +19,12 @@ topController.get = async function (req, res, next) {
|
|||||||
data.title = `[[pages:top-${term}]]`;
|
data.title = `[[pages:top-${term}]]`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const feedQs = data.rssFeedUrl.split('?')[1];
|
if (!data['feeds:disableRSS'] && data.rssFeedUrl) {
|
||||||
data.rssFeedUrl = `${nconf.get('relative_path')}/top/${validator.escape(String(req.query.term || 'alltime'))}.rss`;
|
const feedQs = data.rssFeedUrl.split('?')[1];
|
||||||
if (req.loggedIn) {
|
data.rssFeedUrl = `${nconf.get('relative_path')}/top/${validator.escape(String(req.query.term || 'alltime'))}.rss`;
|
||||||
data.rssFeedUrl += `?${feedQs}`;
|
if (req.loggedIn) {
|
||||||
|
data.rssFeedUrl += `?${feedQs}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
res.render('top', data);
|
res.render('top', data);
|
||||||
|
|||||||
@@ -105,9 +105,11 @@ topicsController.get = async function getTopic(req, res, next) {
|
|||||||
topicData.allowMultipleBadges = meta.config.allowMultipleBadges === 1;
|
topicData.allowMultipleBadges = meta.config.allowMultipleBadges === 1;
|
||||||
topicData.privateUploads = meta.config.privateUploads === 1;
|
topicData.privateUploads = meta.config.privateUploads === 1;
|
||||||
topicData.showPostPreviewsOnHover = meta.config.showPostPreviewsOnHover === 1;
|
topicData.showPostPreviewsOnHover = meta.config.showPostPreviewsOnHover === 1;
|
||||||
topicData.rssFeedUrl = `${relative_path}/topic/${topicData.tid}.rss`;
|
if (!meta.config['feeds:disableRSS']) {
|
||||||
if (req.loggedIn) {
|
topicData.rssFeedUrl = `${relative_path}/topic/${topicData.tid}.rss`;
|
||||||
topicData.rssFeedUrl += `?uid=${req.uid}&token=${rssToken}`;
|
if (req.loggedIn) {
|
||||||
|
topicData.rssFeedUrl += `?uid=${req.uid}&token=${rssToken}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
topicData.postIndex = postIndex;
|
topicData.postIndex = postIndex;
|
||||||
|
|||||||
@@ -156,13 +156,10 @@ async function generateForTopics(req, res, next) {
|
|||||||
if (meta.config['feeds:disableRSS']) {
|
if (meta.config['feeds:disableRSS']) {
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
let token = null;
|
const uid = await getUidFromToken(req);
|
||||||
if (req.query.token && req.query.uid) {
|
|
||||||
token = await db.getObjectField(`user:${req.query.uid}`, 'rss_token');
|
|
||||||
}
|
|
||||||
|
|
||||||
await sendTopicsFeed({
|
await sendTopicsFeed({
|
||||||
uid: token && token === req.query.token ? req.query.uid : req.uid,
|
uid: uid,
|
||||||
title: 'Most recently created topics',
|
title: 'Most recently created topics',
|
||||||
description: 'A list of topics that have been created recently',
|
description: 'A list of topics that have been created recently',
|
||||||
feed_url: '/topics.rss',
|
feed_url: '/topics.rss',
|
||||||
@@ -212,13 +209,7 @@ async function generateSorted(options, req, res, next) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const term = terms[req.params.term] || options.term;
|
const term = terms[req.params.term] || options.term;
|
||||||
|
const uid = await getUidFromToken(req);
|
||||||
let token = null;
|
|
||||||
if (req.query.token && req.query.uid) {
|
|
||||||
token = await db.getObjectField(`user:${req.query.uid}`, 'rss_token');
|
|
||||||
}
|
|
||||||
|
|
||||||
const uid = token && token === req.query.token ? req.query.uid : req.uid;
|
|
||||||
|
|
||||||
const params = {
|
const params = {
|
||||||
uid: uid,
|
uid: uid,
|
||||||
@@ -402,13 +393,14 @@ async function generateForTag(req, res) {
|
|||||||
if (meta.config['feeds:disableRSS']) {
|
if (meta.config['feeds:disableRSS']) {
|
||||||
return controllers404.handle404(req, res);
|
return controllers404.handle404(req, res);
|
||||||
}
|
}
|
||||||
|
const uid = await getUidFromToken(req);
|
||||||
const tag = validator.escape(String(req.params.tag));
|
const tag = validator.escape(String(req.params.tag));
|
||||||
const page = parseInt(req.query.page, 10) || 1;
|
const page = parseInt(req.query.page, 10) || 1;
|
||||||
const topicsPerPage = meta.config.topicsPerPage || 20;
|
const topicsPerPage = meta.config.topicsPerPage || 20;
|
||||||
const start = Math.max(0, (page - 1) * topicsPerPage);
|
const start = Math.max(0, (page - 1) * topicsPerPage);
|
||||||
const stop = start + topicsPerPage - 1;
|
const stop = start + topicsPerPage - 1;
|
||||||
await sendTopicsFeed({
|
await sendTopicsFeed({
|
||||||
uid: req.uid,
|
uid: uid,
|
||||||
title: `Topics tagged with ${tag}`,
|
title: `Topics tagged with ${tag}`,
|
||||||
description: `A list of topics that have been tagged with ${tag}`,
|
description: `A list of topics that have been tagged with ${tag}`,
|
||||||
feed_url: `/tags/${tag}.rss`,
|
feed_url: `/tags/${tag}.rss`,
|
||||||
@@ -418,6 +410,15 @@ async function generateForTag(req, res) {
|
|||||||
}, `tag:${tag}:topics`, res);
|
}, `tag:${tag}:topics`, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getUidFromToken(req) {
|
||||||
|
let token = null;
|
||||||
|
if (req.query.token && req.query.uid) {
|
||||||
|
token = await db.getObjectField(`user:${req.query.uid}`, 'rss_token');
|
||||||
|
}
|
||||||
|
|
||||||
|
return token && token === req.query.token ? req.query.uid : req.uid;
|
||||||
|
}
|
||||||
|
|
||||||
function sendFeed(feed, res) {
|
function sendFeed(feed, res) {
|
||||||
const xml = feed.xml();
|
const xml = feed.xml();
|
||||||
res.type('xml').set('Content-Length', Buffer.byteLength(xml)).send(xml);
|
res.type('xml').set('Content-Length', Buffer.byteLength(xml)).send(xml);
|
||||||
|
|||||||
Reference in New Issue
Block a user