Refactor a little bit AP validators
This commit is contained in:
parent
452b3bea08
commit
67f87b66fe
|
@ -1,16 +1,13 @@
|
||||||
import validator from 'validator'
|
import validator from 'validator'
|
||||||
import { Activity, ActivityType } from '../../../../shared/models/activitypub'
|
import { Activity, ActivityType } from '../../../../shared/models/activitypub'
|
||||||
|
import { isAbuseReasonValid } from '../abuses'
|
||||||
import { exists } from '../misc'
|
import { exists } from '../misc'
|
||||||
import { sanitizeAndCheckActorObject } from './actor'
|
import { sanitizeAndCheckActorObject } from './actor'
|
||||||
import { isCacheFileObjectValid } from './cache-file'
|
import { isCacheFileObjectValid } from './cache-file'
|
||||||
import { isFlagActivityValid } from './flag'
|
|
||||||
import { isActivityPubUrlValid, isBaseActivityValid, isObjectValid } from './misc'
|
import { isActivityPubUrlValid, isBaseActivityValid, isObjectValid } from './misc'
|
||||||
import { isPlaylistObjectValid } from './playlist'
|
import { isPlaylistObjectValid } from './playlist'
|
||||||
import { isDislikeActivityValid, isLikeActivityValid } from './rate'
|
|
||||||
import { isShareActivityValid } from './share'
|
|
||||||
import { sanitizeAndCheckVideoCommentObject } from './video-comments'
|
import { sanitizeAndCheckVideoCommentObject } from './video-comments'
|
||||||
import { sanitizeAndCheckVideoTorrentObject } from './videos'
|
import { sanitizeAndCheckVideoTorrentObject } from './videos'
|
||||||
import { isViewActivityValid } from './view'
|
|
||||||
|
|
||||||
function isRootActivityValid (activity: any) {
|
function isRootActivityValid (activity: any) {
|
||||||
return isCollection(activity) || isActivity(activity)
|
return isCollection(activity) || isActivity(activity)
|
||||||
|
@ -29,56 +26,56 @@ function isActivity (activity: any) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const activityCheckers: { [ P in ActivityType ]: (activity: Activity) => boolean } = {
|
const activityCheckers: { [ P in ActivityType ]: (activity: Activity) => boolean } = {
|
||||||
Create: checkCreateActivity,
|
Create: isCreateActivityValid,
|
||||||
Update: checkUpdateActivity,
|
Update: isUpdateActivityValid,
|
||||||
Delete: checkDeleteActivity,
|
Delete: isDeleteActivityValid,
|
||||||
Follow: checkFollowActivity,
|
Follow: isFollowActivityValid,
|
||||||
Accept: checkAcceptActivity,
|
Accept: isAcceptActivityValid,
|
||||||
Reject: checkRejectActivity,
|
Reject: isRejectActivityValid,
|
||||||
Announce: checkAnnounceActivity,
|
Announce: isAnnounceActivityValid,
|
||||||
Undo: checkUndoActivity,
|
Undo: isUndoActivityValid,
|
||||||
Like: checkLikeActivity,
|
Like: isLikeActivityValid,
|
||||||
View: checkViewActivity,
|
View: isViewActivityValid,
|
||||||
Flag: checkFlagActivity,
|
Flag: isFlagActivityValid,
|
||||||
Dislike: checkDislikeActivity
|
Dislike: isDislikeActivityValid
|
||||||
}
|
}
|
||||||
|
|
||||||
function isActivityValid (activity: any) {
|
function isActivityValid (activity: any) {
|
||||||
const checker = activityCheckers[activity.type]
|
const checker = activityCheckers[activity.tswype]
|
||||||
// Unknown activity type
|
// Unknown activity type
|
||||||
if (!checker) return false
|
if (!checker) return false
|
||||||
|
|
||||||
return checker(activity)
|
return checker(activity)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
function isFlagActivityValid (activity: any) {
|
||||||
|
return isBaseActivityValid(activity.type, 'Flag') &&
|
||||||
export {
|
isAbuseReasonValid(activity.content) &&
|
||||||
isRootActivityValid,
|
isActivityPubUrlValid(activity.object)
|
||||||
isActivityValid
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
function isLikeActivityValid (activity: any) {
|
||||||
|
return isBaseActivityValid(activity, 'Like') &&
|
||||||
|
isObjectValid(activity.object)
|
||||||
|
}
|
||||||
|
|
||||||
function checkViewActivity (activity: any) {
|
function isDislikeActivityValid (activity: any) {
|
||||||
|
return isBaseActivityValid(activity, 'Dislike') &&
|
||||||
|
isObjectValid(activity.object)
|
||||||
|
}
|
||||||
|
|
||||||
|
function isAnnounceActivityValid (activity: any) {
|
||||||
|
return isBaseActivityValid(activity, 'Announce') &&
|
||||||
|
isObjectValid(activity.object)
|
||||||
|
}
|
||||||
|
|
||||||
|
function isViewActivityValid (activity: any) {
|
||||||
return isBaseActivityValid(activity, 'View') &&
|
return isBaseActivityValid(activity, 'View') &&
|
||||||
isViewActivityValid(activity)
|
isActivityPubUrlValid(activity.actor) &&
|
||||||
|
isActivityPubUrlValid(activity.object)
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkFlagActivity (activity: any) {
|
function isCreateActivityValid (activity: any) {
|
||||||
return isBaseActivityValid(activity, 'Flag') &&
|
|
||||||
isFlagActivityValid(activity)
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkDislikeActivity (activity: any) {
|
|
||||||
return isDislikeActivityValid(activity)
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkLikeActivity (activity: any) {
|
|
||||||
return isLikeActivityValid(activity)
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkCreateActivity (activity: any) {
|
|
||||||
return isBaseActivityValid(activity, 'Create') &&
|
return isBaseActivityValid(activity, 'Create') &&
|
||||||
(
|
(
|
||||||
isViewActivityValid(activity.object) ||
|
isViewActivityValid(activity.object) ||
|
||||||
|
@ -92,7 +89,7 @@ function checkCreateActivity (activity: any) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkUpdateActivity (activity: any) {
|
function isUpdateActivityValid (activity: any) {
|
||||||
return isBaseActivityValid(activity, 'Update') &&
|
return isBaseActivityValid(activity, 'Update') &&
|
||||||
(
|
(
|
||||||
isCacheFileObjectValid(activity.object) ||
|
isCacheFileObjectValid(activity.object) ||
|
||||||
|
@ -102,36 +99,51 @@ function checkUpdateActivity (activity: any) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkDeleteActivity (activity: any) {
|
function isDeleteActivityValid (activity: any) {
|
||||||
// We don't really check objects
|
// We don't really check objects
|
||||||
return isBaseActivityValid(activity, 'Delete') &&
|
return isBaseActivityValid(activity, 'Delete') &&
|
||||||
isObjectValid(activity.object)
|
isObjectValid(activity.object)
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkFollowActivity (activity: any) {
|
function isFollowActivityValid (activity: any) {
|
||||||
return isBaseActivityValid(activity, 'Follow') &&
|
return isBaseActivityValid(activity, 'Follow') &&
|
||||||
isObjectValid(activity.object)
|
isObjectValid(activity.object)
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkAcceptActivity (activity: any) {
|
function isAcceptActivityValid (activity: any) {
|
||||||
return isBaseActivityValid(activity, 'Accept')
|
return isBaseActivityValid(activity, 'Accept')
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkRejectActivity (activity: any) {
|
function isRejectActivityValid (activity: any) {
|
||||||
return isBaseActivityValid(activity, 'Reject')
|
return isBaseActivityValid(activity, 'Reject')
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkAnnounceActivity (activity: any) {
|
function isUndoActivityValid (activity: any) {
|
||||||
return isShareActivityValid(activity)
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkUndoActivity (activity: any) {
|
|
||||||
return isBaseActivityValid(activity, 'Undo') &&
|
return isBaseActivityValid(activity, 'Undo') &&
|
||||||
(
|
(
|
||||||
checkFollowActivity(activity.object) ||
|
isFollowActivityValid(activity.object) ||
|
||||||
checkLikeActivity(activity.object) ||
|
isLikeActivityValid(activity.object) ||
|
||||||
checkDislikeActivity(activity.object) ||
|
isDislikeActivityValid(activity.object) ||
|
||||||
checkAnnounceActivity(activity.object) ||
|
isAnnounceActivityValid(activity.object) ||
|
||||||
checkCreateActivity(activity.object)
|
isCreateActivityValid(activity.object)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
export {
|
||||||
|
isRootActivityValid,
|
||||||
|
isActivityValid,
|
||||||
|
isFlagActivityValid,
|
||||||
|
isLikeActivityValid,
|
||||||
|
isDislikeActivityValid,
|
||||||
|
isAnnounceActivityValid,
|
||||||
|
isViewActivityValid,
|
||||||
|
isCreateActivityValid,
|
||||||
|
isUpdateActivityValid,
|
||||||
|
isDeleteActivityValid,
|
||||||
|
isFollowActivityValid,
|
||||||
|
isAcceptActivityValid,
|
||||||
|
isRejectActivityValid,
|
||||||
|
isUndoActivityValid
|
||||||
|
}
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
import { isActivityPubUrlValid } from './misc'
|
|
||||||
import { isAbuseReasonValid } from '../abuses'
|
|
||||||
|
|
||||||
function isFlagActivityValid (activity: any) {
|
|
||||||
return activity.type === 'Flag' &&
|
|
||||||
isAbuseReasonValid(activity.content) &&
|
|
||||||
isActivityPubUrlValid(activity.object)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
export {
|
|
||||||
isFlagActivityValid
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
import { isBaseActivityValid, isObjectValid } from './misc'
|
|
||||||
|
|
||||||
function isLikeActivityValid (activity: any) {
|
|
||||||
return isBaseActivityValid(activity, 'Like') &&
|
|
||||||
isObjectValid(activity.object)
|
|
||||||
}
|
|
||||||
|
|
||||||
function isDislikeActivityValid (activity: any) {
|
|
||||||
return isBaseActivityValid(activity, 'Dislike') &&
|
|
||||||
isObjectValid(activity.object)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
export {
|
|
||||||
isDislikeActivityValid,
|
|
||||||
isLikeActivityValid
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
import { isBaseActivityValid, isObjectValid } from './misc'
|
|
||||||
|
|
||||||
function isShareActivityValid (activity: any) {
|
|
||||||
return isBaseActivityValid(activity, 'Announce') &&
|
|
||||||
isObjectValid(activity.object)
|
|
||||||
}
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
export {
|
|
||||||
isShareActivityValid
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
import { isActivityPubUrlValid } from './misc'
|
|
||||||
|
|
||||||
function isViewActivityValid (activity: any) {
|
|
||||||
return activity.type === 'View' &&
|
|
||||||
isActivityPubUrlValid(activity.actor) &&
|
|
||||||
isActivityPubUrlValid(activity.object)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
export {
|
|
||||||
isViewActivityValid
|
|
||||||
}
|
|
|
@ -1,8 +1,11 @@
|
||||||
import * as Bluebird from 'bluebird'
|
import * as Bluebird from 'bluebird'
|
||||||
import * as Bull from 'bull'
|
import * as Bull from 'bull'
|
||||||
import { checkUrlsSameHost } from '@server/helpers/activitypub'
|
import { checkUrlsSameHost } from '@server/helpers/activitypub'
|
||||||
import { isDislikeActivityValid, isLikeActivityValid } from '@server/helpers/custom-validators/activitypub/rate'
|
import {
|
||||||
import { isShareActivityValid } from '@server/helpers/custom-validators/activitypub/share'
|
isAnnounceActivityValid,
|
||||||
|
isDislikeActivityValid,
|
||||||
|
isLikeActivityValid
|
||||||
|
} from '@server/helpers/custom-validators/activitypub/activity'
|
||||||
import { sanitizeAndCheckVideoCommentObject } from '@server/helpers/custom-validators/activitypub/video-comments'
|
import { sanitizeAndCheckVideoCommentObject } from '@server/helpers/custom-validators/activitypub/video-comments'
|
||||||
import { doRequest } from '@server/helpers/requests'
|
import { doRequest } from '@server/helpers/requests'
|
||||||
import { AP_CLEANER_CONCURRENCY } from '@server/initializers/constants'
|
import { AP_CLEANER_CONCURRENCY } from '@server/initializers/constants'
|
||||||
|
@ -149,7 +152,7 @@ function rateOptionsFactory () {
|
||||||
|
|
||||||
function shareOptionsFactory () {
|
function shareOptionsFactory () {
|
||||||
return {
|
return {
|
||||||
bodyValidator: (body: any) => isShareActivityValid(body),
|
bodyValidator: (body: any) => isAnnounceActivityValid(body),
|
||||||
|
|
||||||
updater: async (url: string, newUrl: string) => {
|
updater: async (url: string, newUrl: string) => {
|
||||||
const share = await VideoShareModel.loadByUrl(url, undefined)
|
const share = await VideoShareModel.loadByUrl(url, undefined)
|
||||||
|
|
Loading…
Reference in New Issue