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