diff --git a/install/package.json b/install/package.json index 7de45c258e..f475bab278 100644 --- a/install/package.json +++ b/install/package.json @@ -103,7 +103,7 @@ "nodebb-plugin-dbsearch": "6.2.5", "nodebb-plugin-emoji": "6.0.1", "nodebb-plugin-emoji-android": "4.1.1", - "nodebb-plugin-markdown": "13.0.0-pre.9", + "nodebb-plugin-markdown": "13.0.0-pre.10", "nodebb-plugin-mentions": "4.6.10", "nodebb-plugin-spam-be-gone": "2.2.2", "nodebb-plugin-web-push": "0.7.0", diff --git a/src/activitypub/mocks.js b/src/activitypub/mocks.js index 41a60f24ad..f6b237f850 100644 --- a/src/activitypub/mocks.js +++ b/src/activitypub/mocks.js @@ -177,7 +177,10 @@ Mocks.post = async (objects) => { let edited = new Date(updated); edited = Number.isNaN(edited.valueOf()) ? undefined : edited; - if (content && content.length) { + const sourceContent = source && source.mediaType === 'text/markdown' ? source.content : undefined; + if (sourceContent) { + content = null; + } else if (content && content.length) { content = sanitize(content, sanitizeConfig); content = await activitypub.helpers.remoteAnchorToLocalProfile(content); } else { @@ -190,7 +193,7 @@ Mocks.post = async (objects) => { // tid, --> purposely omitted name, content, - sourceContent: source && source.mediaType === 'text/markdown' ? source.content : undefined, + sourceContent, timestamp, toPid, diff --git a/src/activitypub/notes.js b/src/activitypub/notes.js index cb2a7800c9..ac238b4bf1 100644 --- a/src/activitypub/notes.js +++ b/src/activitypub/notes.js @@ -179,6 +179,7 @@ Notes.assert = async (uid, input, options = { skipChecks: false }) => { timestamp, tags, content: mainPost.content, + sourceContent: mainPost.sourceContent, _activitypub: mainPost._activitypub, }), Notes.updateLocalRecipients(mainPid, { to, cc }), diff --git a/src/posts/create.js b/src/posts/create.js index 8833593b32..874971d501 100644 --- a/src/posts/create.js +++ b/src/posts/create.js @@ -16,7 +16,7 @@ const isEmojiShortcode = /^:[\w]+:$/; module.exports = function (Posts) { Posts.create = async function (data) { // This is an internal method, consider using Topics.reply instead - const { uid, tid, _activitypub } = data; + const { uid, tid, _activitypub, sourceContent } = data; const content = data.content.toString(); const timestamp = data.timestamp || Date.now(); const isMain = data.isMain || false; @@ -30,7 +30,7 @@ module.exports = function (Posts) { } const pid = data.pid || await db.incrObjectField('global', 'nextPid'); - let postData = { pid, uid, tid, content, timestamp }; + let postData = { pid, uid, tid, content, sourceContent, timestamp }; if (data.toPid) { postData.toPid = data.toPid; diff --git a/src/topics/create.js b/src/topics/create.js index 40b85ee5c0..2d06d22123 100644 --- a/src/topics/create.js +++ b/src/topics/create.js @@ -100,7 +100,7 @@ module.exports = function (Topics) { await Topics.validateTags(data.tags, data.cid, uid); data.tags = await Topics.filterTags(data.tags, data.cid); if (!data.fromQueue && !isAdmin) { - Topics.checkContent(data.content); + Topics.checkContent(data.sourceContent || data.content); if (!await posts.canUserPostContentWithLinks(uid, data.content)) { throw new Error(`[[error:not-enough-reputation-to-post-links, ${meta.config['min:rep:post-links']}]]`); } @@ -186,7 +186,7 @@ module.exports = function (Topics) { if (!data.fromQueue && !isAdmin) { await user.isReadyToPost(uid, data.cid); - Topics.checkContent(data.content); + Topics.checkContent(data.sourceContent || data.content); if (!await posts.canUserPostContentWithLinks(uid, data.content)) { throw new Error(`[[error:not-enough-reputation-to-post-links, ${meta.config['min:rep:post-links']}]]`); }