Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorPytal <24800714+Pytal@users.noreply.github.com>2022-11-10 20:10:11 +0300
committerGitHub <noreply@github.com>2022-11-10 20:10:11 +0300
commit66c33fd9b8e21dee5332ea8df8b9b4b718709711 (patch)
tree089cacde22922a0a5f5a2fc30a2f9dcb0e629f6a /apps
parent1c28c64ea73e1a99ffde37086211a57e2ec4021d (diff)
parent99b1d0047f643603158778a46bb4cae5620729d7 (diff)
Merge pull request #35054 from nextcloud/fix-html-entities-not-decoded-in-comment-just-added
Diffstat (limited to 'apps')
-rw-r--r--apps/comments/src/services/GetComments.js14
-rw-r--r--apps/comments/src/services/NewComment.js8
-rw-r--r--apps/comments/src/utils/decodeHtmlEntities.js34
3 files changed, 43 insertions, 13 deletions
diff --git a/apps/comments/src/services/GetComments.js b/apps/comments/src/services/GetComments.js
index 7dffa969a69..bf3dd31b5f1 100644
--- a/apps/comments/src/services/GetComments.js
+++ b/apps/comments/src/services/GetComments.js
@@ -22,6 +22,7 @@
import { parseXML, prepareFileFromProps } from 'webdav/dist/node/tools/dav'
import { processResponsePayload } from 'webdav/dist/node/response'
+import { decodeHtmlEntities } from '../utils/decodeHtmlEntities'
import client from './DavClient'
export const DEFAULT_LIMIT = 20
@@ -89,16 +90,3 @@ function processMultistatus(result, isDetailed = false) {
return prepareFileFromProps(decodedProps, decodedProps.id.toString(), isDetailed)
})
}
-
-/**
- * @param {any} value -
- * @param {any} passes -
- */
-function decodeHtmlEntities(value, passes = 1) {
- const parser = new DOMParser()
- let decoded = value
- for (let i = 0; i < passes; i++) {
- decoded = parser.parseFromString(decoded, 'text/html').documentElement.textContent
- }
- return decoded
-}
diff --git a/apps/comments/src/services/NewComment.js b/apps/comments/src/services/NewComment.js
index eaf08cc10b9..27d227ed656 100644
--- a/apps/comments/src/services/NewComment.js
+++ b/apps/comments/src/services/NewComment.js
@@ -22,6 +22,7 @@
import { getCurrentUser } from '@nextcloud/auth'
import { getRootPath } from '../utils/davUtils'
+import { decodeHtmlEntities } from '../utils/decodeHtmlEntities'
import axios from '@nextcloud/axios'
import client from './DavClient'
@@ -55,5 +56,12 @@ export default async function(commentsType, ressourceId, message) {
details: true,
})
+ const props = comment.data.props
+ // Decode twice to handle potentially double-encoded entities
+ // FIXME Remove this once https://github.com/nextcloud/server/issues/29306
+ // is resolved
+ props.actorDisplayName = decodeHtmlEntities(props.actorDisplayName, 2)
+ props.message = decodeHtmlEntities(props.message, 2)
+
return comment.data
}
diff --git a/apps/comments/src/utils/decodeHtmlEntities.js b/apps/comments/src/utils/decodeHtmlEntities.js
new file mode 100644
index 00000000000..60c08163faa
--- /dev/null
+++ b/apps/comments/src/utils/decodeHtmlEntities.js
@@ -0,0 +1,34 @@
+/**
+ * @copyright Copyright (c) 2021 Christopher Ng <chrng8@gmail.com>
+ *
+ * @author Christopher Ng <chrng8@gmail.com>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/**
+ * @param {any} value -
+ * @param {any} passes -
+ */
+export function decodeHtmlEntities(value, passes = 1) {
+ const parser = new DOMParser()
+ let decoded = value
+ for (let i = 0; i < passes; i++) {
+ decoded = parser.parseFromString(decoded, 'text/html').documentElement.textContent
+ }
+ return decoded
+}