feat: #12101, dont return rssFeedUrl if feeds are disabled

This commit is contained in:
Barış Soner Uşaklı
2023-10-19 09:35:59 -04:00
parent 7517069324
commit 2955fdb5a0
7 changed files with 53 additions and 32 deletions

View File

@@ -124,11 +124,16 @@ 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);
}
if (!meta.config['feeds:disableRSS']) {
categoryData.rssFeedUrl = `${url}/category/${categoryData.cid}.rss`;
if (req.loggedIn) {
categoryData.rssFeedUrl += `?uid=${req.uid}&token=${rssToken}`; categoryData.rssFeedUrl += `?uid=${req.uid}&token=${rssToken}`;
} }
}
addTags(categoryData, res, currentPage); addTags(categoryData, res, currentPage);

View File

@@ -21,10 +21,12 @@ popularController.get = async function (req, res, next) {
data.breadcrumbs = helpers.buildBreadcrumbs(breadcrumbs); data.breadcrumbs = helpers.buildBreadcrumbs(breadcrumbs);
} }
if (!data['feeds:disableRSS'] && data.rssFeedUrl) {
const feedQs = data.rssFeedUrl.split('?')[1]; const feedQs = data.rssFeedUrl.split('?')[1];
data.rssFeedUrl = `${nconf.get('relative_path')}/popular/${validator.escape(String(req.query.term || 'alltime'))}.rss`; data.rssFeedUrl = `${nconf.get('relative_path')}/popular/${validator.escape(String(req.query.term || 'alltime'))}.rss`;
if (req.loggedIn) { if (req.loggedIn) {
data.rssFeedUrl += `?${feedQs}`; data.rssFeedUrl += `?${feedQs}`;
} }
}
res.render('popular', data); res.render('popular', data);
}; };

View File

@@ -79,10 +79,12 @@ 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;
if (!meta.config['feeds:disableRSS']) {
data.rssFeedUrl = `${relative_path}/${url}.rss`; data.rssFeedUrl = `${relative_path}/${url}.rss`;
if (req.loggedIn) { if (req.loggedIn) {
data.rssFeedUrl += `?uid=${req.uid}&token=${rssToken}`; data.rssFeedUrl += `?uid=${req.uid}&token=${rssToken}`;
} }
}
data.filters = helpers.buildFilters(baseUrl, filter, query); data.filters = helpers.buildFilters(baseUrl, filter, query);
data.selectedFilter = data.filters.find(filter => filter && filter.selected); data.selectedFilter = data.filters.find(filter => filter && filter.selected);

View File

@@ -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'];
if (!meta.config['feeds:disableRSS']) {
templateData.rssFeedUrl = `${nconf.get('relative_path')}/tags/${tag}.rss`; 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);
}; };

View File

@@ -19,11 +19,13 @@ topController.get = async function (req, res, next) {
data.title = `[[pages:top-${term}]]`; data.title = `[[pages:top-${term}]]`;
} }
if (!data['feeds:disableRSS'] && data.rssFeedUrl) {
const feedQs = data.rssFeedUrl.split('?')[1]; const feedQs = data.rssFeedUrl.split('?')[1];
data.rssFeedUrl = `${nconf.get('relative_path')}/top/${validator.escape(String(req.query.term || 'alltime'))}.rss`; data.rssFeedUrl = `${nconf.get('relative_path')}/top/${validator.escape(String(req.query.term || 'alltime'))}.rss`;
if (req.loggedIn) { if (req.loggedIn) {
data.rssFeedUrl += `?${feedQs}`; data.rssFeedUrl += `?${feedQs}`;
} }
}
res.render('top', data); res.render('top', data);
}; };

View File

@@ -105,10 +105,12 @@ 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;
if (!meta.config['feeds:disableRSS']) {
topicData.rssFeedUrl = `${relative_path}/topic/${topicData.tid}.rss`; topicData.rssFeedUrl = `${relative_path}/topic/${topicData.tid}.rss`;
if (req.loggedIn) { if (req.loggedIn) {
topicData.rssFeedUrl += `?uid=${req.uid}&token=${rssToken}`; topicData.rssFeedUrl += `?uid=${req.uid}&token=${rssToken}`;
} }
}
topicData.postIndex = postIndex; topicData.postIndex = postIndex;

View File

@@ -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);