mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 02:55:58 +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