Add videos list filters
[oweals/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.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 }