aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/lib/activitypub/process/process.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/lib/activitypub/process/process.ts')
-rw-r--r--server/lib/activitypub/process/process.ts10
1 files changed, 8 insertions, 2 deletions
diff --git a/server/lib/activitypub/process/process.ts b/server/lib/activitypub/process/process.ts
index da91675ce..35ad1696a 100644
--- a/server/lib/activitypub/process/process.ts
+++ b/server/lib/activitypub/process/process.ts
@@ -11,8 +11,9 @@ import { processLikeActivity } from './process-like'
11import { processRejectActivity } from './process-reject' 11import { processRejectActivity } from './process-reject'
12import { processUndoActivity } from './process-undo' 12import { processUndoActivity } from './process-undo'
13import { processUpdateActivity } from './process-update' 13import { processUpdateActivity } from './process-update'
14import { getOrCreateActorAndServerAndModel } from '../actor'
14 15
15const processActivity: { [ P in ActivityType ]: (activity: Activity, inboxActor?: ActorModel) => Promise<any> } = { 16const processActivity: { [ P in ActivityType ]: (activity: Activity, byActor: ActorModel, inboxActor?: ActorModel) => Promise<any> } = {
16 Create: processCreateActivity, 17 Create: processCreateActivity,
17 Update: processUpdateActivity, 18 Update: processUpdateActivity,
18 Delete: processDeleteActivity, 19 Delete: processDeleteActivity,
@@ -25,6 +26,8 @@ const processActivity: { [ P in ActivityType ]: (activity: Activity, inboxActor?
25} 26}
26 27
27async function processActivities (activities: Activity[], signatureActor?: ActorModel, inboxActor?: ActorModel) { 28async function processActivities (activities: Activity[], signatureActor?: ActorModel, inboxActor?: ActorModel) {
29 const actorsCache: { [ url: string ]: ActorModel } = {}
30
28 for (const activity of activities) { 31 for (const activity of activities) {
29 const actorUrl = getActorUrl(activity.actor) 32 const actorUrl = getActorUrl(activity.actor)
30 33
@@ -34,6 +37,9 @@ async function processActivities (activities: Activity[], signatureActor?: Actor
34 continue 37 continue
35 } 38 }
36 39
40 const byActor = signatureActor || actorsCache[actorUrl] || await getOrCreateActorAndServerAndModel(actorUrl)
41 actorsCache[actorUrl] = byActor
42
37 const activityProcessor = processActivity[activity.type] 43 const activityProcessor = processActivity[activity.type]
38 if (activityProcessor === undefined) { 44 if (activityProcessor === undefined) {
39 logger.warn('Unknown activity type %s.', activity.type, { activityId: activity.id }) 45 logger.warn('Unknown activity type %s.', activity.type, { activityId: activity.id })
@@ -41,7 +47,7 @@ async function processActivities (activities: Activity[], signatureActor?: Actor
41 } 47 }
42 48
43 try { 49 try {
44 await activityProcessor(activity, inboxActor) 50 await activityProcessor(activity, byActor, inboxActor)
45 } catch (err) { 51 } catch (err) {
46 logger.warn('Cannot process activity %s.', activity.type, { err }) 52 logger.warn('Cannot process activity %s.', activity.type, { err })
47 } 53 }