aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/lib/jobs/activitypub-http-job-scheduler/activitypub-http-job-scheduler.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/lib/jobs/activitypub-http-job-scheduler/activitypub-http-job-scheduler.ts')
-rw-r--r--server/lib/jobs/activitypub-http-job-scheduler/activitypub-http-job-scheduler.ts26
1 files changed, 23 insertions, 3 deletions
diff --git a/server/lib/jobs/activitypub-http-job-scheduler/activitypub-http-job-scheduler.ts b/server/lib/jobs/activitypub-http-job-scheduler/activitypub-http-job-scheduler.ts
index 95a5d3ff2..88885cf97 100644
--- a/server/lib/jobs/activitypub-http-job-scheduler/activitypub-http-job-scheduler.ts
+++ b/server/lib/jobs/activitypub-http-job-scheduler/activitypub-http-job-scheduler.ts
@@ -1,5 +1,5 @@
1import { JobCategory } from '../../../../shared' 1import { JobCategory } from '../../../../shared'
2import { buildSignedActivity, logger } from '../../../helpers' 2import { buildSignedActivity, getServerActor, logger } from '../../../helpers'
3import { ACTIVITY_PUB } from '../../../initializers' 3import { ACTIVITY_PUB } from '../../../initializers'
4import { ActorModel } from '../../../models/activitypub/actor' 4import { ActorModel } from '../../../models/activitypub/actor'
5import { JobHandler, JobScheduler } from '../job-scheduler' 5import { JobHandler, JobScheduler } from '../job-scheduler'
@@ -46,16 +46,36 @@ async function computeBody (payload: ActivityPubHttpPayload) {
46 46
47 if (payload.signatureActorId) { 47 if (payload.signatureActorId) {
48 const actorSignature = await ActorModel.load(payload.signatureActorId) 48 const actorSignature = await ActorModel.load(payload.signatureActorId)
49 if (!actorSignature) throw new Error('Unknown signature account id.') 49 if (!actorSignature) throw new Error('Unknown signature actor id.')
50 body = await buildSignedActivity(actorSignature, payload.body) 50 body = await buildSignedActivity(actorSignature, payload.body)
51 } 51 }
52 52
53 return body 53 return body
54} 54}
55 55
56async function buildSignedRequestOptions (payload: ActivityPubHttpPayload) {
57 let actor: ActorModel
58 if (payload.signatureActorId) {
59 actor = await ActorModel.load(payload.signatureActorId)
60 if (!actor) throw new Error('Unknown signature actor id.')
61 } else {
62 // We need to sign the request, so use the server
63 actor = await getServerActor()
64 }
65
66 const keyId = actor.getWebfingerUrl()
67 return {
68 algorithm: 'rsa-sha256',
69 authorizationHeaderName: 'Signature',
70 keyId,
71 key: actor.privateKey
72 }
73}
74
56export { 75export {
57 ActivityPubHttpPayload, 76 ActivityPubHttpPayload,
58 activitypubHttpJobScheduler, 77 activitypubHttpJobScheduler,
59 maybeRetryRequestLater, 78 maybeRetryRequestLater,
60 computeBody 79 computeBody,
80 buildSignedRequestOptions
61} 81}