]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/helpers/custom-validators/activitypub/video-comments.ts
Check the comment is defined when validating body
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / activitypub / video-comments.ts
1 import * as validator from 'validator'
2 import { ACTIVITY_PUB, CONSTRAINTS_FIELDS } from '../../../initializers'
3 import { exists, isArray, isDateValid } from '../misc'
4 import { isActivityPubUrlValid, isBaseActivityValid } from './misc'
5
6 function isVideoCommentCreateActivityValid (activity: any) {
7 return isBaseActivityValid(activity, 'Create') &&
8 sanitizeAndCheckVideoCommentObject(activity.object)
9 }
10
11 function sanitizeAndCheckVideoCommentObject (comment: any) {
12 if (!comment || comment.type !== 'Note') return false
13
14 normalizeComment(comment)
15
16 return isActivityPubUrlValid(comment.id) &&
17 isCommentContentValid(comment.content) &&
18 isActivityPubUrlValid(comment.inReplyTo) &&
19 isDateValid(comment.published) &&
20 isActivityPubUrlValid(comment.url) &&
21 isArray(comment.to) &&
22 (
23 comment.to.indexOf(ACTIVITY_PUB.PUBLIC) !== -1 ||
24 comment.cc.indexOf(ACTIVITY_PUB.PUBLIC) !== -1
25 ) // Only accept public comments
26 }
27
28 function isVideoCommentDeleteActivityValid (activity: any) {
29 return isBaseActivityValid(activity, 'Delete')
30 }
31
32 // ---------------------------------------------------------------------------
33
34 export {
35 isVideoCommentCreateActivityValid,
36 isVideoCommentDeleteActivityValid,
37 sanitizeAndCheckVideoCommentObject
38 }
39
40 // ---------------------------------------------------------------------------
41
42 function isCommentContentValid (content: any) {
43 return exists(content) && validator.isLength('' + content, { min: 1 })
44 }
45
46 function normalizeComment (comment: any) {
47 if (!comment) return
48
49 if (typeof comment.url !== 'string') {
50 comment.url = comment.url.href || comment.url.url
51 }
52
53 return
54 }