aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/lib/activitypub/send/send-undo.ts
diff options
context:
space:
mode:
authorChocobozzz <florian.bigard@gmail.com>2017-11-24 13:41:10 +0100
committerChocobozzz <florian.bigard@gmail.com>2017-11-27 19:40:53 +0100
commit63c93323ecdeaa4b6183d75dd3f13469e1ef3ebd (patch)
tree3ee4b351025d4b19f6e880754df44fa7605b683d /server/lib/activitypub/send/send-undo.ts
parentd4f1e94c89336255537b0b82913591f00e716201 (diff)
downloadPeerTube-63c93323ecdeaa4b6183d75dd3f13469e1ef3ebd.tar.gz
PeerTube-63c93323ecdeaa4b6183d75dd3f13469e1ef3ebd.tar.zst
PeerTube-63c93323ecdeaa4b6183d75dd3f13469e1ef3ebd.zip
Correctly forward like/dislikes and undo
Diffstat (limited to 'server/lib/activitypub/send/send-undo.ts')
-rw-r--r--server/lib/activitypub/send/send-undo.ts38
1 files changed, 26 insertions, 12 deletions
diff --git a/server/lib/activitypub/send/send-undo.ts b/server/lib/activitypub/send/send-undo.ts
index 8f46a051e..79fc113f0 100644
--- a/server/lib/activitypub/send/send-undo.ts
+++ b/server/lib/activitypub/send/send-undo.ts
@@ -1,11 +1,16 @@
1import { Transaction } from 'sequelize' 1import { Transaction } from 'sequelize'
2import { ActivityCreate, ActivityFollow, ActivityLike, ActivityUndo } from '../../../../shared/models/activitypub/activity' 2import {
3import { getServerAccount } from '../../../helpers/utils' 3 ActivityAudience,
4 ActivityCreate,
5 ActivityFollow,
6 ActivityLike,
7 ActivityUndo
8} from '../../../../shared/models/activitypub/activity'
4import { AccountInstance } from '../../../models' 9import { AccountInstance } from '../../../models'
5import { AccountFollowInstance } from '../../../models/account/account-follow-interface' 10import { AccountFollowInstance } from '../../../models/account/account-follow-interface'
6import { VideoInstance } from '../../../models/video/video-interface' 11import { VideoInstance } from '../../../models/video/video-interface'
7import { getAccountFollowActivityPubUrl, getUndoActivityPubUrl, getVideoDislikeActivityPubUrl, getVideoLikeActivityPubUrl } from '../url' 12import { getAccountFollowActivityPubUrl, getUndoActivityPubUrl, getVideoDislikeActivityPubUrl, getVideoLikeActivityPubUrl } from '../url'
8import { broadcastToFollowers, getAccountsToForwardVideoAction, unicastTo } from './misc' 13import { broadcastToFollowers, getAccountsInvolvedInVideo, getAudience, getVideoFollowersAudience, unicastTo } from './misc'
9import { createActivityData, createDislikeActivityData } from './send-create' 14import { createActivityData, createDislikeActivityData } from './send-create'
10import { followActivityData } from './send-follow' 15import { followActivityData } from './send-follow'
11import { likeActivityData } from './send-like' 16import { likeActivityData } from './send-like'
@@ -37,14 +42,13 @@ async function sendUndoLikeToVideoFollowers (byAccount: AccountInstance, video:
37 const likeUrl = getVideoLikeActivityPubUrl(byAccount, video) 42 const likeUrl = getVideoLikeActivityPubUrl(byAccount, video)
38 const undoUrl = getUndoActivityPubUrl(likeUrl) 43 const undoUrl = getUndoActivityPubUrl(likeUrl)
39 44
45 const toAccountsFollowers = await getAccountsInvolvedInVideo(video)
46 const audience = getVideoFollowersAudience(toAccountsFollowers)
40 const object = await likeActivityData(likeUrl, byAccount, video) 47 const object = await likeActivityData(likeUrl, byAccount, video)
41 const data = await undoActivityData(undoUrl, byAccount, object) 48 const data = await undoActivityData(undoUrl, byAccount, object, audience)
42
43 const accountsToForwardView = await getAccountsToForwardVideoAction(byAccount, video)
44 const serverAccount = await getServerAccount()
45 49
46 const followersException = [ byAccount ] 50 const followersException = [ byAccount ]
47 return broadcastToFollowers(data, serverAccount, accountsToForwardView, t, followersException) 51 return broadcastToFollowers(data, byAccount, toAccountsFollowers, t, followersException)
48} 52}
49 53
50async function sendUndoDislikeToOrigin (byAccount: AccountInstance, video: VideoInstance, t: Transaction) { 54async function sendUndoDislikeToOrigin (byAccount: AccountInstance, video: VideoInstance, t: Transaction) {
@@ -68,11 +72,10 @@ async function sendUndoDislikeToVideoFollowers (byAccount: AccountInstance, vide
68 72
69 const data = await undoActivityData(undoUrl, byAccount, object) 73 const data = await undoActivityData(undoUrl, byAccount, object)
70 74
71 const accountsToForwardView = await getAccountsToForwardVideoAction(byAccount, video) 75 const toAccountsFollowers = await getAccountsInvolvedInVideo(video)
72 const serverAccount = await getServerAccount()
73 76
74 const followersException = [ byAccount ] 77 const followersException = [ byAccount ]
75 return broadcastToFollowers(data, serverAccount, accountsToForwardView, t, followersException) 78 return broadcastToFollowers(data, byAccount, toAccountsFollowers, t, followersException)
76} 79}
77 80
78// --------------------------------------------------------------------------- 81// ---------------------------------------------------------------------------
@@ -87,11 +90,22 @@ export {
87 90
88// --------------------------------------------------------------------------- 91// ---------------------------------------------------------------------------
89 92
90async function undoActivityData (url: string, byAccount: AccountInstance, object: ActivityFollow | ActivityLike | ActivityCreate) { 93async function undoActivityData (
94 url: string,
95 byAccount: AccountInstance,
96 object: ActivityFollow | ActivityLike | ActivityCreate,
97 audience?: ActivityAudience
98) {
99 if (!audience) {
100 audience = await getAudience(byAccount)
101 }
102
91 const activity: ActivityUndo = { 103 const activity: ActivityUndo = {
92 type: 'Undo', 104 type: 'Undo',
93 id: url, 105 id: url,
94 actor: byAccount.url, 106 actor: byAccount.url,
107 to: audience.to,
108 cc: audience.cc,
95 object 109 object
96 } 110 }
97 111