X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fhelpers%2Fcustom-validators%2Factivitypub%2Factivity.ts;h=632f1422317c19ccc6c0aecb758e0a29cb037755;hb=e8cb44090e654fda339506dccfcec7fea8722723;hp=dd671c4cff6fcde1aefe767be4d42ee8b14cd41b;hpb=0d0e8dd0904b380b70e19ebcb4763d65601c4632;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/helpers/custom-validators/activitypub/activity.ts b/server/helpers/custom-validators/activitypub/activity.ts index dd671c4cf..632f14223 100644 --- a/server/helpers/custom-validators/activitypub/activity.ts +++ b/server/helpers/custom-validators/activitypub/activity.ts @@ -1,10 +1,21 @@ import * as validator from 'validator' +import { Activity, ActivityType } from '../../../../shared/models/activitypub' import { - isVideoChannelCreateActivityValid, - isVideoTorrentAddActivityValid, - isVideoTorrentUpdateActivityValid, - isVideoChannelUpdateActivityValid + isActorAcceptActivityValid, isActorDeleteActivityValid, isActorFollowActivityValid, isActorRejectActivityValid, + isActorUpdateActivityValid +} from './actor' +import { isAnnounceActivityValid } from './announce' +import { isActivityPubUrlValid } from './misc' +import { isDislikeActivityValid, isLikeActivityValid } from './rate' +import { isUndoActivityValid } from './undo' +import { isVideoCommentCreateActivityValid, isVideoCommentDeleteActivityValid } from './video-comments' +import { + isVideoFlagValid, + isVideoTorrentCreateActivityValid, + isVideoTorrentDeleteActivityValid, + isVideoTorrentUpdateActivityValid } from './videos' +import { isViewActivityValid } from './view' function isRootActivityValid (activity: any) { return Array.isArray(activity['@context']) && @@ -14,16 +25,29 @@ function isRootActivityValid (activity: any) { Array.isArray(activity.items) ) || ( - validator.isURL(activity.id) && - validator.isURL(activity.actor) + isActivityPubUrlValid(activity.id) && + isActivityPubUrlValid(activity.actor) ) } +const activityCheckers: { [ P in ActivityType ]: (activity: Activity) => boolean } = { + Create: checkCreateActivity, + Update: checkUpdateActivity, + Delete: checkDeleteActivity, + Follow: checkFollowActivity, + Accept: checkAcceptActivity, + Reject: checkRejectActivity, + Announce: checkAnnounceActivity, + Undo: checkUndoActivity, + Like: checkLikeActivity +} + function isActivityValid (activity: any) { - return isVideoTorrentAddActivityValid(activity) || - isVideoChannelCreateActivityValid(activity) || - isVideoTorrentUpdateActivityValid(activity) || - isVideoChannelUpdateActivityValid(activity) + const checker = activityCheckers[activity.type] + // Unknown activity type + if (!checker) return false + + return checker(activity) } // --------------------------------------------------------------------------- @@ -32,3 +56,48 @@ export { isRootActivityValid, isActivityValid } + +// --------------------------------------------------------------------------- + +function checkCreateActivity (activity: any) { + return isViewActivityValid(activity) || + isDislikeActivityValid(activity) || + isVideoTorrentCreateActivityValid(activity) || + isVideoFlagValid(activity) || + isVideoCommentCreateActivityValid(activity) +} + +function checkUpdateActivity (activity: any) { + return isVideoTorrentUpdateActivityValid(activity) || + isActorUpdateActivityValid(activity) +} + +function checkDeleteActivity (activity: any) { + return isVideoTorrentDeleteActivityValid(activity) || + isActorDeleteActivityValid(activity) || + isVideoCommentDeleteActivityValid(activity) +} + +function checkFollowActivity (activity: any) { + return isActorFollowActivityValid(activity) +} + +function checkAcceptActivity (activity: any) { + return isActorAcceptActivityValid(activity) +} + +function checkRejectActivity (activity: any) { + return isActorRejectActivityValid(activity) +} + +function checkAnnounceActivity (activity: any) { + return isAnnounceActivityValid(activity) +} + +function checkUndoActivity (activity: any) { + return isUndoActivityValid(activity) +} + +function checkLikeActivity (activity: any) { + return isLikeActivityValid(activity) +}