diff options
Diffstat (limited to 'server/lib/activitypub')
-rw-r--r-- | server/lib/activitypub/playlist.ts | 4 | ||||
-rw-r--r-- | server/lib/activitypub/process/process-delete.ts | 24 | ||||
-rw-r--r-- | server/lib/activitypub/send/send-create.ts | 2 | ||||
-rw-r--r-- | server/lib/activitypub/send/send-delete.ts | 7 | ||||
-rw-r--r-- | server/lib/activitypub/send/send-update.ts | 4 |
5 files changed, 36 insertions, 5 deletions
diff --git a/server/lib/activitypub/playlist.ts b/server/lib/activitypub/playlist.ts index c9b428c92..70389044e 100644 --- a/server/lib/activitypub/playlist.ts +++ b/server/lib/activitypub/playlist.ts | |||
@@ -28,7 +28,9 @@ function playlistObjectToDBAttributes (playlistObject: PlaylistObject, byAccount | |||
28 | url: playlistObject.id, | 28 | url: playlistObject.id, |
29 | uuid: playlistObject.uuid, | 29 | uuid: playlistObject.uuid, |
30 | ownerAccountId: byAccount.id, | 30 | ownerAccountId: byAccount.id, |
31 | videoChannelId: null | 31 | videoChannelId: null, |
32 | createdAt: new Date(playlistObject.published), | ||
33 | updatedAt: new Date(playlistObject.updated) | ||
32 | } | 34 | } |
33 | } | 35 | } |
34 | 36 | ||
diff --git a/server/lib/activitypub/process/process-delete.ts b/server/lib/activitypub/process/process-delete.ts index 155d2ffcc..76f07fd8a 100644 --- a/server/lib/activitypub/process/process-delete.ts +++ b/server/lib/activitypub/process/process-delete.ts | |||
@@ -8,6 +8,7 @@ import { VideoModel } from '../../../models/video/video' | |||
8 | import { VideoChannelModel } from '../../../models/video/video-channel' | 8 | import { VideoChannelModel } from '../../../models/video/video-channel' |
9 | import { VideoCommentModel } from '../../../models/video/video-comment' | 9 | import { VideoCommentModel } from '../../../models/video/video-comment' |
10 | import { forwardVideoRelatedActivity } from '../send/utils' | 10 | import { forwardVideoRelatedActivity } from '../send/utils' |
11 | import { VideoPlaylistModel } from '../../../models/video/video-playlist' | ||
11 | 12 | ||
12 | async function processDeleteActivity (activity: ActivityDelete, byActor: ActorModel) { | 13 | async function processDeleteActivity (activity: ActivityDelete, byActor: ActorModel) { |
13 | const objectUrl = typeof activity.object === 'string' ? activity.object : activity.object.id | 14 | const objectUrl = typeof activity.object === 'string' ? activity.object : activity.object.id |
@@ -45,6 +46,15 @@ async function processDeleteActivity (activity: ActivityDelete, byActor: ActorMo | |||
45 | } | 46 | } |
46 | } | 47 | } |
47 | 48 | ||
49 | { | ||
50 | const videoPlaylist = await VideoPlaylistModel.loadByUrlAndPopulateAccount(objectUrl) | ||
51 | if (videoPlaylist) { | ||
52 | if (videoPlaylist.isOwned()) throw new Error(`Remote instance cannot delete owned playlist ${videoPlaylist.url}.`) | ||
53 | |||
54 | return retryTransactionWrapper(processDeleteVideoPlaylist, byActor, videoPlaylist) | ||
55 | } | ||
56 | } | ||
57 | |||
48 | return undefined | 58 | return undefined |
49 | } | 59 | } |
50 | 60 | ||
@@ -70,6 +80,20 @@ async function processDeleteVideo (actor: ActorModel, videoToDelete: VideoModel) | |||
70 | logger.info('Remote video with uuid %s removed.', videoToDelete.uuid) | 80 | logger.info('Remote video with uuid %s removed.', videoToDelete.uuid) |
71 | } | 81 | } |
72 | 82 | ||
83 | async function processDeleteVideoPlaylist (actor: ActorModel, playlistToDelete: VideoPlaylistModel) { | ||
84 | logger.debug('Removing remote video playlist "%s".', playlistToDelete.uuid) | ||
85 | |||
86 | await sequelizeTypescript.transaction(async t => { | ||
87 | if (playlistToDelete.OwnerAccount.Actor.id !== actor.id) { | ||
88 | throw new Error('Account ' + actor.url + ' does not own video playlist ' + playlistToDelete.url) | ||
89 | } | ||
90 | |||
91 | await playlistToDelete.destroy({ transaction: t }) | ||
92 | }) | ||
93 | |||
94 | logger.info('Remote video playlist with uuid %s removed.', playlistToDelete.uuid) | ||
95 | } | ||
96 | |||
73 | async function processDeleteAccount (accountToRemove: AccountModel) { | 97 | async function processDeleteAccount (accountToRemove: AccountModel) { |
74 | logger.debug('Removing remote account "%s".', accountToRemove.Actor.uuid) | 98 | logger.debug('Removing remote account "%s".', accountToRemove.Actor.uuid) |
75 | 99 | ||
diff --git a/server/lib/activitypub/send/send-create.ts b/server/lib/activitypub/send/send-create.ts index bacdb97e3..28f18595b 100644 --- a/server/lib/activitypub/send/send-create.ts +++ b/server/lib/activitypub/send/send-create.ts | |||
@@ -45,7 +45,7 @@ async function sendCreateVideoPlaylist (playlist: VideoPlaylistModel, t: Transac | |||
45 | const byActor = playlist.OwnerAccount.Actor | 45 | const byActor = playlist.OwnerAccount.Actor |
46 | const audience = getAudience(byActor, playlist.privacy === VideoPlaylistPrivacy.PUBLIC) | 46 | const audience = getAudience(byActor, playlist.privacy === VideoPlaylistPrivacy.PUBLIC) |
47 | 47 | ||
48 | const object = await playlist.toActivityPubObject() | 48 | const object = await playlist.toActivityPubObject(null, t) |
49 | const createActivity = buildCreateActivity(playlist.url, byActor, object, audience) | 49 | const createActivity = buildCreateActivity(playlist.url, byActor, object, audience) |
50 | 50 | ||
51 | const serverActor = await getServerActor() | 51 | const serverActor = await getServerActor() |
diff --git a/server/lib/activitypub/send/send-delete.ts b/server/lib/activitypub/send/send-delete.ts index 016811e60..7bf5ca520 100644 --- a/server/lib/activitypub/send/send-delete.ts +++ b/server/lib/activitypub/send/send-delete.ts | |||
@@ -31,7 +31,12 @@ async function sendDeleteActor (byActor: ActorModel, t: Transaction) { | |||
31 | const url = getDeleteActivityPubUrl(byActor.url) | 31 | const url = getDeleteActivityPubUrl(byActor.url) |
32 | const activity = buildDeleteActivity(url, byActor.url, byActor) | 32 | const activity = buildDeleteActivity(url, byActor.url, byActor) |
33 | 33 | ||
34 | const actorsInvolved = await VideoShareModel.loadActorsByVideoOwner(byActor.id, t) | 34 | const actorsInvolved = await VideoShareModel.loadActorsWhoSharedVideosOf(byActor.id, t) |
35 | |||
36 | // In case the actor did not have any videos | ||
37 | const serverActor = await getServerActor() | ||
38 | actorsInvolved.push(serverActor) | ||
39 | |||
35 | actorsInvolved.push(byActor) | 40 | actorsInvolved.push(byActor) |
36 | 41 | ||
37 | return broadcastToFollowers(activity, byActor, actorsInvolved, t) | 42 | return broadcastToFollowers(activity, byActor, actorsInvolved, t) |
diff --git a/server/lib/activitypub/send/send-update.ts b/server/lib/activitypub/send/send-update.ts index 3eb2704fd..7411c08d5 100644 --- a/server/lib/activitypub/send/send-update.ts +++ b/server/lib/activitypub/send/send-update.ts | |||
@@ -52,7 +52,7 @@ async function sendUpdateActor (accountOrChannel: AccountModel | VideoChannelMod | |||
52 | let actorsInvolved: ActorModel[] | 52 | let actorsInvolved: ActorModel[] |
53 | if (accountOrChannel instanceof AccountModel) { | 53 | if (accountOrChannel instanceof AccountModel) { |
54 | // Actors that shared my videos are involved too | 54 | // Actors that shared my videos are involved too |
55 | actorsInvolved = await VideoShareModel.loadActorsByVideoOwner(byActor.id, t) | 55 | actorsInvolved = await VideoShareModel.loadActorsWhoSharedVideosOf(byActor.id, t) |
56 | } else { | 56 | } else { |
57 | // Actors that shared videos of my channel are involved too | 57 | // Actors that shared videos of my channel are involved too |
58 | actorsInvolved = await VideoShareModel.loadActorsByVideoChannel(accountOrChannel.id, t) | 58 | actorsInvolved = await VideoShareModel.loadActorsByVideoChannel(accountOrChannel.id, t) |
@@ -87,7 +87,7 @@ async function sendUpdateVideoPlaylist (videoPlaylist: VideoPlaylistModel, t: Tr | |||
87 | 87 | ||
88 | const url = getUpdateActivityPubUrl(videoPlaylist.url, videoPlaylist.updatedAt.toISOString()) | 88 | const url = getUpdateActivityPubUrl(videoPlaylist.url, videoPlaylist.updatedAt.toISOString()) |
89 | 89 | ||
90 | const object = await videoPlaylist.toActivityPubObject() | 90 | const object = await videoPlaylist.toActivityPubObject(null, t) |
91 | const audience = getAudience(byActor, videoPlaylist.privacy === VideoPlaylistPrivacy.PUBLIC) | 91 | const audience = getAudience(byActor, videoPlaylist.privacy === VideoPlaylistPrivacy.PUBLIC) |
92 | 92 | ||
93 | const updateActivity = buildUpdateActivity(url, byActor, object, audience) | 93 | const updateActivity = buildUpdateActivity(url, byActor, object, audience) |