diff options
Diffstat (limited to 'server/lib/activitypub/process/process-update.ts')
-rw-r--r-- | server/lib/activitypub/process/process-update.ts | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/server/lib/activitypub/process/process-update.ts b/server/lib/activitypub/process/process-update.ts index 51e3cc4e3..0dd657c2b 100644 --- a/server/lib/activitypub/process/process-update.ts +++ b/server/lib/activitypub/process/process-update.ts | |||
@@ -14,7 +14,7 @@ import { VideoFileModel } from '../../../models/video/video-file' | |||
14 | import { fetchAvatarIfExists, getOrCreateActorAndServerAndModel, updateActorAvatarInstance, updateActorInstance } from '../actor' | 14 | import { fetchAvatarIfExists, getOrCreateActorAndServerAndModel, updateActorAvatarInstance, updateActorInstance } from '../actor' |
15 | import { | 15 | import { |
16 | generateThumbnailFromUrl, | 16 | generateThumbnailFromUrl, |
17 | getOrCreateAccountAndVideoAndChannel, | 17 | getOrCreateAccountAndVideoAndChannel, getOrCreateVideoChannel, |
18 | videoActivityObjectToDBAttributes, | 18 | videoActivityObjectToDBAttributes, |
19 | videoFileActivityUrlToDBAttributes | 19 | videoFileActivityUrlToDBAttributes |
20 | } from '../videos' | 20 | } from '../videos' |
@@ -54,6 +54,10 @@ async function updateRemoteVideo (actor: ActorModel, activity: ActivityUpdate) { | |||
54 | 54 | ||
55 | const res = await getOrCreateAccountAndVideoAndChannel(videoAttributesToUpdate.id) | 55 | const res = await getOrCreateAccountAndVideoAndChannel(videoAttributesToUpdate.id) |
56 | 56 | ||
57 | // Fetch video channel outside the transaction | ||
58 | const newVideoChannelActor = await getOrCreateVideoChannel(videoAttributesToUpdate) | ||
59 | const newVideoChannel = newVideoChannelActor.VideoChannel | ||
60 | |||
57 | logger.debug('Updating remote video "%s".', videoAttributesToUpdate.uuid) | 61 | logger.debug('Updating remote video "%s".', videoAttributesToUpdate.uuid) |
58 | let videoInstance = res.video | 62 | let videoInstance = res.video |
59 | let videoFieldsSave: any | 63 | let videoFieldsSave: any |
@@ -66,12 +70,13 @@ async function updateRemoteVideo (actor: ActorModel, activity: ActivityUpdate) { | |||
66 | 70 | ||
67 | videoFieldsSave = videoInstance.toJSON() | 71 | videoFieldsSave = videoInstance.toJSON() |
68 | 72 | ||
73 | // Check actor has the right to update the video | ||
69 | const videoChannel = videoInstance.VideoChannel | 74 | const videoChannel = videoInstance.VideoChannel |
70 | if (videoChannel.Account.Actor.id !== actor.id) { | 75 | if (videoChannel.Account.Actor.id !== actor.id) { |
71 | throw new Error('Account ' + actor.url + ' does not own video channel ' + videoChannel.Actor.url) | 76 | throw new Error('Account ' + actor.url + ' does not own video channel ' + videoChannel.Actor.url) |
72 | } | 77 | } |
73 | 78 | ||
74 | const videoData = await videoActivityObjectToDBAttributes(videoChannel, videoAttributesToUpdate, activity.to) | 79 | const videoData = await videoActivityObjectToDBAttributes(newVideoChannel, videoAttributesToUpdate, activity.to) |
75 | videoInstance.set('name', videoData.name) | 80 | videoInstance.set('name', videoData.name) |
76 | videoInstance.set('uuid', videoData.uuid) | 81 | videoInstance.set('uuid', videoData.uuid) |
77 | videoInstance.set('url', videoData.url) | 82 | videoInstance.set('url', videoData.url) |
@@ -87,6 +92,7 @@ async function updateRemoteVideo (actor: ActorModel, activity: ActivityUpdate) { | |||
87 | videoInstance.set('updatedAt', videoData.updatedAt) | 92 | videoInstance.set('updatedAt', videoData.updatedAt) |
88 | videoInstance.set('views', videoData.views) | 93 | videoInstance.set('views', videoData.views) |
89 | videoInstance.set('privacy', videoData.privacy) | 94 | videoInstance.set('privacy', videoData.privacy) |
95 | videoInstance.set('channelId', videoData.channelId) | ||
90 | 96 | ||
91 | await videoInstance.save(sequelizeOptions) | 97 | await videoInstance.save(sequelizeOptions) |
92 | 98 | ||