]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/lib/activitypub/send/send-flag.ts
Refactor AP context builder
[github/Chocobozzz/PeerTube.git] / server / lib / activitypub / send / send-flag.ts
CommitLineData
d95d1559 1import { Transaction } from 'sequelize'
57e4e1c1 2import { ActivityAudience, ActivityFlag } from '@shared/models'
d95d1559
C
3import { logger } from '../../../helpers/logger'
4import { MAbuseAP, MAccountLight, MActor } from '../../../types/models'
1e7eb25f 5import { audiencify, getAudience } from '../audience'
de94ac86 6import { getLocalAbuseActivityPubUrl } from '../url'
57e4e1c1 7import { unicastTo } from './shared/send-utils'
1e7eb25f 8
d95d1559
C
9function sendAbuse (byActor: MActor, abuse: MAbuseAP, flaggedAccount: MAccountLight, t: Transaction) {
10 if (!flaggedAccount.Actor.serverId) return // Local user
1e7eb25f 11
de94ac86 12 const url = getLocalAbuseActivityPubUrl(abuse)
1e7eb25f 13
d95d1559 14 logger.info('Creating job to send abuse %s.', url)
1e7eb25f
C
15
16 // Custom audience, we only send the abuse to the origin instance
d95d1559
C
17 const audience = { to: [ flaggedAccount.Actor.url ], cc: [] }
18 const flagActivity = buildFlagActivity(url, byActor, abuse, audience)
1e7eb25f 19
a219c910
C
20 return t.afterCommit(() => {
21 return unicastTo({
22 data: flagActivity,
23 byActor,
24 toActorUrl: flaggedAccount.Actor.getSharedInbox(),
25 contextType: 'Flag'
26 })
27 })
1e7eb25f
C
28}
29
d95d1559 30function buildFlagActivity (url: string, byActor: MActor, abuse: MAbuseAP, audience: ActivityAudience): ActivityFlag {
1e7eb25f
C
31 if (!audience) audience = getAudience(byActor)
32
a219c910 33 const activity = { id: url, actor: byActor.url, ...abuse.toActivityPubObject() }
1e7eb25f
C
34
35 return audiencify(activity, audience)
36}
37
38// ---------------------------------------------------------------------------
39
40export {
d95d1559 41 sendAbuse
1e7eb25f 42}