]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/lib/activitypub/send/send-undo.ts
Fix announce activities
[github/Chocobozzz/PeerTube.git] / server / lib / activitypub / send / send-undo.ts
CommitLineData
54141398 1import { Transaction } from 'sequelize'
94a5ff8a 2import { ActivityAudience, ActivityCreate, ActivityFollow, ActivityLike, ActivityUndo } from '../../../../shared/models/activitypub'
50d6de9c
C
3import { ActorModel } from '../../../models/activitypub/actor'
4import { ActorFollowModel } from '../../../models/activitypub/actor-follow'
3fd3ab2d 5import { VideoModel } from '../../../models/video/video'
50d6de9c 6import { getActorFollowActivityPubUrl, getUndoActivityPubUrl, getVideoDislikeActivityPubUrl, getVideoLikeActivityPubUrl } from '../url'
5e3bb76c 7import {
e12a0092 8 audiencify,
5e3bb76c 9 broadcastToFollowers,
50d6de9c 10 getActorsInvolvedInVideo,
5e3bb76c
C
11 getAudience,
12 getObjectFollowersAudience,
13 getOriginVideoAudience,
14 unicastTo
15} from './misc'
d8553faa 16import { createActivityData, createDislikeActivityData } from './send-create'
54141398 17import { followActivityData } from './send-follow'
0032ebe9 18import { likeActivityData } from './send-like'
54141398 19
50d6de9c
C
20async function sendUndoFollow (actorFollow: ActorFollowModel, t: Transaction) {
21 const me = actorFollow.ActorFollower
22 const following = actorFollow.ActorFollowing
54141398 23
50d6de9c 24 const followUrl = getActorFollowActivityPubUrl(actorFollow)
54141398
C
25 const undoUrl = getUndoActivityPubUrl(followUrl)
26
25ed141c
C
27 const object = followActivityData(followUrl, me, following)
28 const data = await undoActivityData(undoUrl, me, object, t)
54141398 29
94a5ff8a 30 return unicastTo(data, me, following.inboxUrl)
54141398
C
31}
32
50d6de9c
C
33async function sendUndoLikeToOrigin (byActor: ActorModel, video: VideoModel, t: Transaction) {
34 const likeUrl = getVideoLikeActivityPubUrl(byActor, video)
0032ebe9
C
35 const undoUrl = getUndoActivityPubUrl(likeUrl)
36
50d6de9c
C
37 const actorsInvolvedInVideo = await getActorsInvolvedInVideo(video, t)
38 const audience = getOriginVideoAudience(video, actorsInvolvedInVideo)
39 const object = await likeActivityData(likeUrl, byActor, video, t)
40 const data = await undoActivityData(undoUrl, byActor, object, t, audience)
0032ebe9 41
94a5ff8a 42 return unicastTo(data, byActor, video.VideoChannel.Account.Actor.sharedInboxUrl)
0032ebe9
C
43}
44
50d6de9c
C
45async function sendUndoLikeToVideoFollowers (byActor: ActorModel, video: VideoModel, t: Transaction) {
46 const likeUrl = getVideoLikeActivityPubUrl(byActor, video)
0032ebe9
C
47 const undoUrl = getUndoActivityPubUrl(likeUrl)
48
50d6de9c
C
49 const toActorsFollowers = await getActorsInvolvedInVideo(video, t)
50 const audience = getObjectFollowersAudience(toActorsFollowers)
51 const object = await likeActivityData(likeUrl, byActor, video, t)
52 const data = await undoActivityData(undoUrl, byActor, object, t, audience)
0032ebe9 53
50d6de9c
C
54 const followersException = [ byActor ]
55 return broadcastToFollowers(data, byActor, toActorsFollowers, t, followersException)
0032ebe9
C
56}
57
50d6de9c
C
58async function sendUndoDislikeToOrigin (byActor: ActorModel, video: VideoModel, t: Transaction) {
59 const dislikeUrl = getVideoDislikeActivityPubUrl(byActor, video)
0032ebe9
C
60 const undoUrl = getUndoActivityPubUrl(dislikeUrl)
61
50d6de9c
C
62 const actorsInvolvedInVideo = await getActorsInvolvedInVideo(video, t)
63 const audience = getOriginVideoAudience(video, actorsInvolvedInVideo)
64 const dislikeActivity = createDislikeActivityData(byActor, video)
65 const object = await createActivityData(undoUrl, byActor, dislikeActivity, t)
0032ebe9 66
50d6de9c 67 const data = await undoActivityData(undoUrl, byActor, object, t, audience)
0032ebe9 68
94a5ff8a 69 return unicastTo(data, byActor, video.VideoChannel.Account.Actor.sharedInboxUrl)
0032ebe9
C
70}
71
50d6de9c
C
72async function sendUndoDislikeToVideoFollowers (byActor: ActorModel, video: VideoModel, t: Transaction) {
73 const dislikeUrl = getVideoDislikeActivityPubUrl(byActor, video)
0032ebe9
C
74 const undoUrl = getUndoActivityPubUrl(dislikeUrl)
75
50d6de9c
C
76 const dislikeActivity = createDislikeActivityData(byActor, video)
77 const object = await createActivityData(undoUrl, byActor, dislikeActivity, t)
0032ebe9 78
50d6de9c 79 const data = await undoActivityData(undoUrl, byActor, object, t)
0032ebe9 80
50d6de9c 81 const toActorsFollowers = await getActorsInvolvedInVideo(video, t)
0032ebe9 82
50d6de9c
C
83 const followersException = [ byActor ]
84 return broadcastToFollowers(data, byActor, toActorsFollowers, t, followersException)
0032ebe9
C
85}
86
54141398
C
87// ---------------------------------------------------------------------------
88
89export {
0032ebe9
C
90 sendUndoFollow,
91 sendUndoLikeToOrigin,
92 sendUndoLikeToVideoFollowers,
93 sendUndoDislikeToOrigin,
94 sendUndoDislikeToVideoFollowers
54141398
C
95}
96
97// ---------------------------------------------------------------------------
98
63c93323
C
99async function undoActivityData (
100 url: string,
50d6de9c 101 byActor: ActorModel,
63c93323 102 object: ActivityFollow | ActivityLike | ActivityCreate,
25ed141c 103 t: Transaction,
63c93323 104 audience?: ActivityAudience
3fd3ab2d 105): Promise<ActivityUndo> {
63c93323 106 if (!audience) {
50d6de9c 107 audience = await getAudience(byActor, t)
63c93323
C
108 }
109
e12a0092 110 return audiencify({
54141398
C
111 type: 'Undo',
112 id: url,
50d6de9c 113 actor: byActor.url,
54141398 114 object
e12a0092 115 }, audience)
54141398 116}