aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/lib/activitypub/process
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2018-03-22 18:40:33 +0100
committerChocobozzz <me@florianbigard.com>2018-03-22 18:40:56 +0100
commit6be84cbcea99518e8eca58c76259effd0dd992fd (patch)
treec2b4b22c8b60528025b172013d72c12f8ba06192 /server/lib/activitypub/process
parent9e841674da612b68bf84a427a8710a44347083f5 (diff)
downloadPeerTube-6be84cbcea99518e8eca58c76259effd0dd992fd.tar.gz
PeerTube-6be84cbcea99518e8eca58c76259effd0dd992fd.tar.zst
PeerTube-6be84cbcea99518e8eca58c76259effd0dd992fd.zip
Improve activity pub actors implementation
Diffstat (limited to 'server/lib/activitypub/process')
-rw-r--r--server/lib/activitypub/process/process-accept.ts4
-rw-r--r--server/lib/activitypub/process/process-reject.ts4
-rw-r--r--server/lib/activitypub/process/process-undo.ts9
-rw-r--r--server/lib/activitypub/process/process.ts7
4 files changed, 17 insertions, 7 deletions
diff --git a/server/lib/activitypub/process/process-accept.ts b/server/lib/activitypub/process/process-accept.ts
index 7db2f8ff0..c55b57820 100644
--- a/server/lib/activitypub/process/process-accept.ts
+++ b/server/lib/activitypub/process/process-accept.ts
@@ -1,4 +1,5 @@
1import { ActivityAccept } from '../../../../shared/models/activitypub' 1import { ActivityAccept } from '../../../../shared/models/activitypub'
2import { getActorUrl } from '../../../helpers/activitypub'
2import { ActorModel } from '../../../models/activitypub/actor' 3import { ActorModel } from '../../../models/activitypub/actor'
3import { ActorFollowModel } from '../../../models/activitypub/actor-follow' 4import { ActorFollowModel } from '../../../models/activitypub/actor-follow'
4import { addFetchOutboxJob } from '../fetch' 5import { addFetchOutboxJob } from '../fetch'
@@ -6,7 +7,8 @@ import { addFetchOutboxJob } from '../fetch'
6async function processAcceptActivity (activity: ActivityAccept, inboxActor?: ActorModel) { 7async function processAcceptActivity (activity: ActivityAccept, inboxActor?: ActorModel) {
7 if (inboxActor === undefined) throw new Error('Need to accept on explicit inbox.') 8 if (inboxActor === undefined) throw new Error('Need to accept on explicit inbox.')
8 9
9 const targetActor = await ActorModel.loadByUrl(activity.actor) 10 const actorUrl = getActorUrl(activity.actor)
11 const targetActor = await ActorModel.loadByUrl(actorUrl)
10 12
11 return processAccept(inboxActor, targetActor) 13 return processAccept(inboxActor, targetActor)
12} 14}
diff --git a/server/lib/activitypub/process/process-reject.ts b/server/lib/activitypub/process/process-reject.ts
index b2de28d79..f06b03772 100644
--- a/server/lib/activitypub/process/process-reject.ts
+++ b/server/lib/activitypub/process/process-reject.ts
@@ -1,4 +1,5 @@
1import { ActivityReject } from '../../../../shared/models/activitypub/activity' 1import { ActivityReject } from '../../../../shared/models/activitypub/activity'
2import { getActorUrl } from '../../../helpers/activitypub'
2import { sequelizeTypescript } from '../../../initializers' 3import { sequelizeTypescript } from '../../../initializers'
3import { ActorModel } from '../../../models/activitypub/actor' 4import { ActorModel } from '../../../models/activitypub/actor'
4import { ActorFollowModel } from '../../../models/activitypub/actor-follow' 5import { ActorFollowModel } from '../../../models/activitypub/actor-follow'
@@ -6,7 +7,8 @@ import { ActorFollowModel } from '../../../models/activitypub/actor-follow'
6async function processRejectActivity (activity: ActivityReject, inboxActor?: ActorModel) { 7async function processRejectActivity (activity: ActivityReject, inboxActor?: ActorModel) {
7 if (inboxActor === undefined) throw new Error('Need to reject on explicit inbox.') 8 if (inboxActor === undefined) throw new Error('Need to reject on explicit inbox.')
8 9
9 const targetActor = await ActorModel.loadByUrl(activity.actor) 10 const actorUrl = getActorUrl(activity.actor)
11 const targetActor = await ActorModel.loadByUrl(actorUrl)
10 12
11 return processReject(inboxActor, targetActor) 13 return processReject(inboxActor, targetActor)
12} 14}
diff --git a/server/lib/activitypub/process/process-undo.ts b/server/lib/activitypub/process/process-undo.ts
index 5a770bb97..565e70289 100644
--- a/server/lib/activitypub/process/process-undo.ts
+++ b/server/lib/activitypub/process/process-undo.ts
@@ -1,5 +1,6 @@
1import { ActivityFollow, ActivityLike, ActivityUndo } from '../../../../shared/models/activitypub' 1import { ActivityFollow, ActivityLike, ActivityUndo } from '../../../../shared/models/activitypub'
2import { DislikeObject } from '../../../../shared/models/activitypub/objects' 2import { DislikeObject } from '../../../../shared/models/activitypub/objects'
3import { getActorUrl } from '../../../helpers/activitypub'
3import { retryTransactionWrapper } from '../../../helpers/database-utils' 4import { retryTransactionWrapper } from '../../../helpers/database-utils'
4import { logger } from '../../../helpers/logger' 5import { logger } from '../../../helpers/logger'
5import { sequelizeTypescript } from '../../../initializers' 6import { sequelizeTypescript } from '../../../initializers'
@@ -13,12 +14,14 @@ import { getOrCreateAccountAndVideoAndChannel } from '../videos'
13async function processUndoActivity (activity: ActivityUndo) { 14async function processUndoActivity (activity: ActivityUndo) {
14 const activityToUndo = activity.object 15 const activityToUndo = activity.object
15 16
17 const actorUrl = getActorUrl(activity.actor)
18
16 if (activityToUndo.type === 'Like') { 19 if (activityToUndo.type === 'Like') {
17 return processUndoLike(activity.actor, activity) 20 return processUndoLike(actorUrl, activity)
18 } else if (activityToUndo.type === 'Create' && activityToUndo.object.type === 'Dislike') { 21 } else if (activityToUndo.type === 'Create' && activityToUndo.object.type === 'Dislike') {
19 return processUndoDislike(activity.actor, activity) 22 return processUndoDislike(actorUrl, activity)
20 } else if (activityToUndo.type === 'Follow') { 23 } else if (activityToUndo.type === 'Follow') {
21 return processUndoFollow(activity.actor, activityToUndo) 24 return processUndoFollow(actorUrl, activityToUndo)
22 } 25 }
23 26
24 logger.warn('Unknown activity object type %s -> %s when undo activity.', activityToUndo.type, { activity: activity.id }) 27 logger.warn('Unknown activity object type %s -> %s when undo activity.', activityToUndo.type, { activity: activity.id })
diff --git a/server/lib/activitypub/process/process.ts b/server/lib/activitypub/process/process.ts
index 094219489..10d8ba189 100644
--- a/server/lib/activitypub/process/process.ts
+++ b/server/lib/activitypub/process/process.ts
@@ -1,4 +1,5 @@
1import { Activity, ActivityType } from '../../../../shared/models/activitypub' 1import { Activity, ActivityType } from '../../../../shared/models/activitypub'
2import { getActorUrl } from '../../../helpers/activitypub'
2import { logger } from '../../../helpers/logger' 3import { logger } from '../../../helpers/logger'
3import { ActorModel } from '../../../models/activitypub/actor' 4import { ActorModel } from '../../../models/activitypub/actor'
4import { processAcceptActivity } from './process-accept' 5import { processAcceptActivity } from './process-accept'
@@ -25,9 +26,11 @@ const processActivity: { [ P in ActivityType ]: (activity: Activity, inboxActor?
25 26
26async function processActivities (activities: Activity[], signatureActor?: ActorModel, inboxActor?: ActorModel) { 27async function processActivities (activities: Activity[], signatureActor?: ActorModel, inboxActor?: ActorModel) {
27 for (const activity of activities) { 28 for (const activity of activities) {
29 const actorUrl = getActorUrl(activity.actor)
30
28 // When we fetch remote data, we don't have signature 31 // When we fetch remote data, we don't have signature
29 if (signatureActor && activity.actor !== signatureActor.url) { 32 if (signatureActor && actorUrl !== signatureActor.url) {
30 logger.warn('Signature mismatch between %s and %s.', activity.actor, signatureActor.url) 33 logger.warn('Signature mismatch between %s and %s.', actorUrl, signatureActor.url)
31 continue 34 continue
32 } 35 }
33 36