From 0032ebe94aa83fab761c7de3ceb6210ac4532824 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 23 Nov 2017 14:19:55 +0100 Subject: Federate likes/dislikes --- .../custom-validators/activitypub/activity.ts | 23 ++++++++++++++-------- .../custom-validators/activitypub/announce.ts | 4 ++-- .../helpers/custom-validators/activitypub/rate.ts | 20 +++++++++++++++++++ .../helpers/custom-validators/activitypub/undo.ts | 9 ++++++--- 4 files changed, 43 insertions(+), 13 deletions(-) create mode 100644 server/helpers/custom-validators/activitypub/rate.ts (limited to 'server/helpers') diff --git a/server/helpers/custom-validators/activitypub/activity.ts b/server/helpers/custom-validators/activitypub/activity.ts index 66e557d39..3a0e8197c 100644 --- a/server/helpers/custom-validators/activitypub/activity.ts +++ b/server/helpers/custom-validators/activitypub/activity.ts @@ -1,9 +1,9 @@ import * as validator from 'validator' import { Activity, ActivityType } from '../../../../shared/models/activitypub/activity' import { isAccountAcceptActivityValid, isAccountDeleteActivityValid, isAccountFollowActivityValid } from './account' -import { isAnnounceValid } from './announce' +import { isAnnounceActivityValid } from './announce' import { isActivityPubUrlValid } from './misc' -import { isUndoValid } from './undo' +import { isUndoActivityValid } from './undo' import { isVideoChannelCreateActivityValid, isVideoChannelDeleteActivityValid, isVideoChannelUpdateActivityValid } from './video-channels' import { isVideoFlagValid, @@ -12,6 +12,7 @@ import { isVideoTorrentUpdateActivityValid } from './videos' import { isViewActivityValid } from './view' +import { isDislikeActivityValid, isLikeActivityValid } from './rate' function isRootActivityValid (activity: any) { return Array.isArray(activity['@context']) && @@ -34,7 +35,8 @@ const activityCheckers: { [ P in ActivityType ]: (activity: Activity) => boolean Follow: checkFollowActivity, Accept: checkAcceptActivity, Announce: checkAnnounceActivity, - Undo: checkUndoActivity + Undo: checkUndoActivity, + Like: checkLikeActivity } function isActivityValid (activity: any) { @@ -55,9 +57,10 @@ export { // --------------------------------------------------------------------------- function checkCreateActivity (activity: any) { - return isVideoChannelCreateActivityValid(activity) || - isVideoFlagValid(activity) || - isViewActivityValid(activity) + return isViewActivityValid(activity) || + isDislikeActivityValid(activity) || + isVideoChannelCreateActivityValid(activity) || + isVideoFlagValid(activity) } function checkAddActivity (activity: any) { @@ -84,9 +87,13 @@ function checkAcceptActivity (activity: any) { } function checkAnnounceActivity (activity: any) { - return isAnnounceValid(activity) + return isAnnounceActivityValid(activity) } function checkUndoActivity (activity: any) { - return isUndoValid(activity) + return isUndoActivityValid(activity) +} + +function checkLikeActivity (activity: any) { + return isLikeActivityValid(activity) } diff --git a/server/helpers/custom-validators/activitypub/announce.ts b/server/helpers/custom-validators/activitypub/announce.ts index 4ba99d1ea..45f6b05a0 100644 --- a/server/helpers/custom-validators/activitypub/announce.ts +++ b/server/helpers/custom-validators/activitypub/announce.ts @@ -2,7 +2,7 @@ import { isBaseActivityValid } from './misc' import { isVideoTorrentAddActivityValid } from './videos' import { isVideoChannelCreateActivityValid } from './video-channels' -function isAnnounceValid (activity: any) { +function isAnnounceActivityValid (activity: any) { return isBaseActivityValid(activity, 'Announce') && ( isVideoChannelCreateActivityValid(activity.object) || @@ -11,5 +11,5 @@ function isAnnounceValid (activity: any) { } export { - isAnnounceValid + isAnnounceActivityValid } diff --git a/server/helpers/custom-validators/activitypub/rate.ts b/server/helpers/custom-validators/activitypub/rate.ts new file mode 100644 index 000000000..e70bd94b8 --- /dev/null +++ b/server/helpers/custom-validators/activitypub/rate.ts @@ -0,0 +1,20 @@ +import { isActivityPubUrlValid, isBaseActivityValid } from './misc' + +function isLikeActivityValid (activity: any) { + return isBaseActivityValid(activity, 'Like') && + isActivityPubUrlValid(activity.object) +} + +function isDislikeActivityValid (activity: any) { + return isBaseActivityValid(activity, 'Create') && + activity.object.type === 'Dislike' && + isActivityPubUrlValid(activity.object.actor) && + isActivityPubUrlValid(activity.object.object) +} + +// --------------------------------------------------------------------------- + +export { + isLikeActivityValid, + isDislikeActivityValid +} diff --git a/server/helpers/custom-validators/activitypub/undo.ts b/server/helpers/custom-validators/activitypub/undo.ts index a9a2a3a41..58043f8a1 100644 --- a/server/helpers/custom-validators/activitypub/undo.ts +++ b/server/helpers/custom-validators/activitypub/undo.ts @@ -1,13 +1,16 @@ import { isAccountFollowActivityValid } from './account' import { isBaseActivityValid } from './misc' +import { isDislikeActivityValid, isLikeActivityValid } from './rate' -function isUndoValid (activity: any) { +function isUndoActivityValid (activity: any) { return isBaseActivityValid(activity, 'Undo') && ( - isAccountFollowActivityValid(activity.object) + isAccountFollowActivityValid(activity.object) || + isLikeActivityValid(activity.object) || + isDislikeActivityValid(activity.object) ) } export { - isUndoValid + isUndoActivityValid } -- cgit v1.2.3