aboutsummaryrefslogtreecommitdiffstats
path: root/apps/comments/src/services/NewComment.js
blob: 663b4d72e02690c8718b53fcb0bfd6ee81f5f6b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/**
 * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
 * SPDX-License-Identifier: AGPL-3.0-or-later
 */

import { getCurrentUser } from '@nextcloud/auth'
import { getRootPath } from '../utils/davUtils.js'
import { decodeHtmlEntities } from '../utils/decodeHtmlEntities.js'
import axios from '@nextcloud/axios'
import client from './DavClient.js'

/**
 * Retrieve the comments list
 *
 * @param {string} resourceType the resource type
 * @param {number} resourceId the resource ID
 * @param {string} message the message
 * @return {object} the new comment
 */
export default async function(resourceType, resourceId, message) {
	const resourcePath = ['', resourceType, resourceId].join('/')

	const response = await axios.post(getRootPath() + resourcePath, {
		actorDisplayName: getCurrentUser().displayName,
		actorId: getCurrentUser().uid,
		actorType: 'users',
		creationDateTime: (new Date()).toUTCString(),
		message,
		objectType: resourceType,
		verb: 'comment',
	})

	// Retrieve comment id from resource location
	const commentId = parseInt(response.headers['content-location'].split('/').pop())
	const commentPath = resourcePath + '/' + commentId

	// Fetch newly created comment data
	const comment = await client.stat(commentPath, {
		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
}