From 54141398354e6e7b94aa3065a705a1251390111c Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 20 Nov 2017 09:43:39 +0100 Subject: Refractor activity pub lib/helpers --- .../custom-validators/activitypub/activity.ts | 73 +++++++++++++++++----- .../custom-validators/activitypub/announce.ts | 15 +++++ .../helpers/custom-validators/activitypub/index.ts | 4 +- .../helpers/custom-validators/activitypub/undo.ts | 13 ++++ .../activitypub/video-channels.ts | 36 +++++++++++ .../custom-validators/activitypub/videos.ts | 54 +++------------- 6 files changed, 133 insertions(+), 62 deletions(-) create mode 100644 server/helpers/custom-validators/activitypub/announce.ts create mode 100644 server/helpers/custom-validators/activitypub/undo.ts create mode 100644 server/helpers/custom-validators/activitypub/video-channels.ts (limited to 'server/helpers/custom-validators') diff --git a/server/helpers/custom-validators/activitypub/activity.ts b/server/helpers/custom-validators/activitypub/activity.ts index 8084cf7b0..9305e092c 100644 --- a/server/helpers/custom-validators/activitypub/activity.ts +++ b/server/helpers/custom-validators/activitypub/activity.ts @@ -1,11 +1,11 @@ import * as validator from 'validator' +import { Activity, ActivityType } from '../../../../shared/models/activitypub/activity' import { isAccountAcceptActivityValid, isAccountDeleteActivityValid, isAccountFollowActivityValid } from './account' +import { isAnnounceValid } from './announce' import { isActivityPubUrlValid } from './misc' +import { isUndoValid } from './undo' +import { isVideoChannelCreateActivityValid, isVideoChannelDeleteActivityValid, isVideoChannelUpdateActivityValid } from './video-channels' import { - isAnnounceValid, - isVideoChannelCreateActivityValid, - isVideoChannelDeleteActivityValid, - isVideoChannelUpdateActivityValid, isVideoFlagValid, isVideoTorrentAddActivityValid, isVideoTorrentDeleteActivityValid, @@ -25,18 +25,23 @@ function isRootActivityValid (activity: any) { ) } +const activityCheckers: { [ P in ActivityType ]: (activity: Activity) => boolean } = { + Create: checkCreateActivity, + Add: checkAddActivity, + Update: checkUpdateActivity, + Delete: checkDeleteActivity, + Follow: checkFollowActivity, + Accept: checkAcceptActivity, + Announce: checkAnnounceActivity, + Undo: checkUndoActivity +} + function isActivityValid (activity: any) { - return isVideoTorrentAddActivityValid(activity) || - isVideoChannelCreateActivityValid(activity) || - isVideoTorrentUpdateActivityValid(activity) || - isVideoChannelUpdateActivityValid(activity) || - isVideoTorrentDeleteActivityValid(activity) || - isVideoChannelDeleteActivityValid(activity) || - isAccountDeleteActivityValid(activity) || - isAccountFollowActivityValid(activity) || - isAccountAcceptActivityValid(activity) || - isVideoFlagValid(activity) || - isAnnounceValid(activity) + const checker = activityCheckers[activity.type] + // Unknown activity type + if (!checker) return false + + return checker(activity) } // --------------------------------------------------------------------------- @@ -45,3 +50,41 @@ export { isRootActivityValid, isActivityValid } + +// --------------------------------------------------------------------------- + +function checkCreateActivity (activity: any) { + return isVideoChannelCreateActivityValid(activity) || + isVideoFlagValid(activity) +} + +function checkAddActivity (activity: any) { + return isVideoTorrentAddActivityValid(activity) +} + +function checkUpdateActivity (activity: any) { + return isVideoTorrentUpdateActivityValid(activity) || + isVideoChannelUpdateActivityValid(activity) +} + +function checkDeleteActivity (activity: any) { + return isVideoTorrentDeleteActivityValid(activity) || + isVideoChannelDeleteActivityValid(activity) || + isAccountDeleteActivityValid(activity) +} + +function checkFollowActivity (activity: any) { + return isAccountFollowActivityValid(activity) +} + +function checkAcceptActivity (activity: any) { + return isAccountAcceptActivityValid(activity) +} + +function checkAnnounceActivity (activity: any) { + return isAnnounceValid(activity) +} + +function checkUndoActivity (activity: any) { + return isUndoValid(activity) +} diff --git a/server/helpers/custom-validators/activitypub/announce.ts b/server/helpers/custom-validators/activitypub/announce.ts new file mode 100644 index 000000000..4ba99d1ea --- /dev/null +++ b/server/helpers/custom-validators/activitypub/announce.ts @@ -0,0 +1,15 @@ +import { isBaseActivityValid } from './misc' +import { isVideoTorrentAddActivityValid } from './videos' +import { isVideoChannelCreateActivityValid } from './video-channels' + +function isAnnounceValid (activity: any) { + return isBaseActivityValid(activity, 'Announce') && + ( + isVideoChannelCreateActivityValid(activity.object) || + isVideoTorrentAddActivityValid(activity.object) + ) +} + +export { + isAnnounceValid +} diff --git a/server/helpers/custom-validators/activitypub/index.ts b/server/helpers/custom-validators/activitypub/index.ts index 0eba06a7b..6685b269f 100644 --- a/server/helpers/custom-validators/activitypub/index.ts +++ b/server/helpers/custom-validators/activitypub/index.ts @@ -1,5 +1,7 @@ export * from './account' export * from './activity' -export * from './signature' export * from './misc' +export * from './signature' +export * from './undo' +export * from './video-channels' export * from './videos' diff --git a/server/helpers/custom-validators/activitypub/undo.ts b/server/helpers/custom-validators/activitypub/undo.ts new file mode 100644 index 000000000..a9a2a3a41 --- /dev/null +++ b/server/helpers/custom-validators/activitypub/undo.ts @@ -0,0 +1,13 @@ +import { isAccountFollowActivityValid } from './account' +import { isBaseActivityValid } from './misc' + +function isUndoValid (activity: any) { + return isBaseActivityValid(activity, 'Undo') && + ( + isAccountFollowActivityValid(activity.object) + ) +} + +export { + isUndoValid +} diff --git a/server/helpers/custom-validators/activitypub/video-channels.ts b/server/helpers/custom-validators/activitypub/video-channels.ts new file mode 100644 index 000000000..9fd3bb149 --- /dev/null +++ b/server/helpers/custom-validators/activitypub/video-channels.ts @@ -0,0 +1,36 @@ +import { isDateValid, isUUIDValid } from '../misc' +import { isVideoChannelDescriptionValid, isVideoChannelNameValid } from '../video-channels' +import { isActivityPubUrlValid, isBaseActivityValid } from './misc' + +function isVideoChannelCreateActivityValid (activity: any) { + return isBaseActivityValid(activity, 'Create') && + isVideoChannelObjectValid(activity.object) +} + +function isVideoChannelUpdateActivityValid (activity: any) { + return isBaseActivityValid(activity, 'Update') && + isVideoChannelObjectValid(activity.object) +} + +function isVideoChannelDeleteActivityValid (activity: any) { + return isBaseActivityValid(activity, 'Delete') +} + +function isVideoChannelObjectValid (videoChannel: any) { + return videoChannel.type === 'VideoChannel' && + isActivityPubUrlValid(videoChannel.id) && + isVideoChannelNameValid(videoChannel.name) && + isVideoChannelDescriptionValid(videoChannel.content) && + isDateValid(videoChannel.published) && + isDateValid(videoChannel.updated) && + isUUIDValid(videoChannel.uuid) +} + +// --------------------------------------------------------------------------- + +export { + isVideoChannelCreateActivityValid, + isVideoChannelUpdateActivityValid, + isVideoChannelDeleteActivityValid, + isVideoChannelObjectValid +} diff --git a/server/helpers/custom-validators/activitypub/videos.ts b/server/helpers/custom-validators/activitypub/videos.ts index 728511e3d..faeedd3df 100644 --- a/server/helpers/custom-validators/activitypub/videos.ts +++ b/server/helpers/custom-validators/activitypub/videos.ts @@ -1,7 +1,6 @@ import * as validator from 'validator' import { ACTIVITY_PUB } from '../../../initializers' import { exists, isDateValid, isUUIDValid } from '../misc' -import { isVideoChannelDescriptionValid, isVideoChannelNameValid } from '../video-channels' import { isVideoAbuseReasonValid, isVideoDurationValid, @@ -28,6 +27,13 @@ function isVideoTorrentDeleteActivityValid (activity: any) { return isBaseActivityValid(activity, 'Delete') } +function isVideoFlagValid (activity: any) { + return isBaseActivityValid(activity, 'Create') && + activity.object.type === 'Flag' && + isVideoAbuseReasonValid(activity.object.content) && + isActivityPubUrlValid(activity.object.object) +} + function isActivityPubVideoDurationValid (value: string) { // https://www.w3.org/TR/activitystreams-vocabulary/#dfn-duration return exists(value) && @@ -57,57 +63,13 @@ function isVideoTorrentObjectValid (video: any) { video.url.length !== 0 } -function isVideoFlagValid (activity: any) { - return isBaseActivityValid(activity, 'Create') && - activity.object.type === 'Flag' && - isVideoAbuseReasonValid(activity.object.content) && - isActivityPubUrlValid(activity.object.object) -} - -function isAnnounceValid (activity: any) { - return isBaseActivityValid(activity, 'Announce') && - ( - isVideoChannelCreateActivityValid(activity.object) || - isVideoTorrentAddActivityValid(activity.object) - ) -} - -function isVideoChannelCreateActivityValid (activity: any) { - return isBaseActivityValid(activity, 'Create') && - isVideoChannelObjectValid(activity.object) -} - -function isVideoChannelUpdateActivityValid (activity: any) { - return isBaseActivityValid(activity, 'Update') && - isVideoChannelObjectValid(activity.object) -} - -function isVideoChannelDeleteActivityValid (activity: any) { - return isBaseActivityValid(activity, 'Delete') -} - -function isVideoChannelObjectValid (videoChannel: any) { - return videoChannel.type === 'VideoChannel' && - isActivityPubUrlValid(videoChannel.id) && - isVideoChannelNameValid(videoChannel.name) && - isVideoChannelDescriptionValid(videoChannel.content) && - isDateValid(videoChannel.published) && - isDateValid(videoChannel.updated) && - isUUIDValid(videoChannel.uuid) -} - // --------------------------------------------------------------------------- export { isVideoTorrentAddActivityValid, - isVideoChannelCreateActivityValid, isVideoTorrentUpdateActivityValid, - isVideoChannelUpdateActivityValid, - isVideoChannelDeleteActivityValid, isVideoTorrentDeleteActivityValid, - isVideoFlagValid, - isAnnounceValid, - isVideoChannelObjectValid + isVideoFlagValid } // --------------------------------------------------------------------------- -- cgit v1.2.3