diff --git a/public/src/client/topic/replies.js b/public/src/client/topic/replies.js index a70862c119..20633935ef 100644 --- a/public/src/client/topic/replies.js +++ b/public/src/client/topic/replies.js @@ -14,7 +14,7 @@ define('forum/topic/replies', ['forum/topic/posts', 'hooks', 'alerts', 'api'], f if (open.is(':not(.hidden)') && loading.is('.hidden')) { open.addClass('hidden'); loading.removeClass('hidden'); - api.get(`/posts/${pid}/replies`, {}, function (err, { replies }) { + api.get(`/posts/${encodeURIComponent(pid)}/replies`, {}, function (err, { replies }) { const postData = replies; loading.addClass('hidden'); if (err) { diff --git a/src/api/posts.js b/src/api/posts.js index 603e3bf2aa..3a1666b075 100644 --- a/src/api/posts.js +++ b/src/api/posts.js @@ -12,6 +12,7 @@ const plugins = require('../plugins'); const meta = require('../meta'); const events = require('../events'); const privileges = require('../privileges'); +const activitypub = require('../activitypub'); const apiHelpers = require('./helpers'); const websockets = require('../socket.io'); const socketHelpers = require('../socket.io/helpers'); @@ -390,7 +391,7 @@ postsAPI.deleteDiff = async (caller, { pid, timestamp }) => { }; postsAPI.getReplies = async (caller, { pid }) => { - if (!utils.isNumber(pid)) { + if (!utils.isNumber(pid) && !activitypub.helpers.isUri(pid)) { throw new Error('[[error:invalid-data]]'); } const { uid } = caller; diff --git a/src/controllers/activitypub/topics.js b/src/controllers/activitypub/topics.js index fc5cdea85a..bc2152bb2a 100644 --- a/src/controllers/activitypub/topics.js +++ b/src/controllers/activitypub/topics.js @@ -5,6 +5,7 @@ const nconf = require('nconf'); const db = require('../../database'); const user = require('../../user'); const topics = require('../../topics'); +const privileges = require('../../privileges'); const { notes } = require('../../activitypub'); // const helpers = require('../helpers'); @@ -23,11 +24,11 @@ controller.get = async function (req, res, next) { let postIndex = await db.sortedSetRank(`tidRemote:${tid}:posts`, req.query.resource); const [ - // userPrivileges, + userPrivileges, settings, // topicData, ] = await Promise.all([ - // privileges.topics.get(tid, req.uid), + privileges.topics.get(tid, req.uid), user.getSettings(req.uid), // topics.getTopicData(tid), ]); @@ -40,7 +41,7 @@ controller.get = async function (req, res, next) { const invalidPagination = (settings.usePagination && (currentPage < 1 || currentPage > pageCount)); if ( !topicData || - // userPrivileges.disabled || + userPrivileges.disabled || invalidPagination// || // (topicData.scheduled && !userPrivileges.view_scheduled) ) { @@ -62,6 +63,7 @@ controller.get = async function (req, res, next) { topicData.posts = await notes.getTopicPosts(tid, req.uid, start, stop); await topics.calculatePostIndices(topicData.posts, start - 1); topicData.posts = await topics.addPostData(topicData.posts, req.uid); + topicData.privileges = userPrivileges; await topics.increaseViewCount(req, tid); diff --git a/src/posts/category.js b/src/posts/category.js index d5f4874cc1..b87342a89f 100644 --- a/src/posts/category.js +++ b/src/posts/category.js @@ -6,10 +6,15 @@ const _ = require('lodash'); const db = require('../database'); const topics = require('../topics'); +const activitypub = require('../activitypub'); module.exports = function (Posts) { Posts.getCidByPid = async function (pid) { const tid = await Posts.getPostField(pid, 'tid'); + if (!tid && activitypub.helpers.isUri(pid)) { + return -1; // fediverse pseudo-category + } + return await topics.getTopicField(tid, 'cid'); };