From fabf233478ad79488cd95b1fcfb511a0c5d348bb Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Sun, 1 Apr 2018 15:58:49 +0900 Subject: Implement inbox --- src/server/activitypub/inbox.ts | 42 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/server/activitypub/inbox.ts (limited to 'src/server/activitypub/inbox.ts') diff --git a/src/server/activitypub/inbox.ts b/src/server/activitypub/inbox.ts new file mode 100644 index 0000000000..0d4af7c492 --- /dev/null +++ b/src/server/activitypub/inbox.ts @@ -0,0 +1,42 @@ +import * as bodyParser from 'body-parser'; +import * as express from 'express'; +import { parseRequest, verifySignature } from 'http-signature'; +import User, { IRemoteAccount } from '../../models/user'; +import queue from '../../queue'; + +const app = express(); +app.disable('x-powered-by'); +app.use(bodyParser.json()); + +app.get('/@:user/inbox', async (req, res) => { + let parsed; + + try { + parsed = parseRequest(req); + } catch (exception) { + return res.sendStatus(401); + } + + const user = await User.findOne({ + host: { $ne: null }, + account: { publicKey: { id: parsed.keyId } } + }); + + if (user === null) { + return res.sendStatus(401); + } + + if (!verifySignature(parsed, (user.account as IRemoteAccount).publicKey.publicKeyPem)) { + return res.sendStatus(401); + } + + queue.create('http', { + type: 'performActivityPub', + actor: user._id, + outbox: req.body, + }).save(); + + return res.sendStatus(200); +}); + +export default app; -- cgit v1.3.1-freya From 54776545b6bb297b3af19767bed98b2634ba3046 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 1 Apr 2018 16:04:23 +0900 Subject: Use dot notation --- src/server/activitypub/inbox.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/server/activitypub/inbox.ts') diff --git a/src/server/activitypub/inbox.ts b/src/server/activitypub/inbox.ts index 0d4af7c492..f76e750d22 100644 --- a/src/server/activitypub/inbox.ts +++ b/src/server/activitypub/inbox.ts @@ -19,7 +19,7 @@ app.get('/@:user/inbox', async (req, res) => { const user = await User.findOne({ host: { $ne: null }, - account: { publicKey: { id: parsed.keyId } } + 'account.publicKey.id': parsed.keyId }); if (user === null) { -- cgit v1.3.1-freya From d36f5376e38f30fe12fd3459aa833def230e5302 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 1 Apr 2018 16:46:33 +0900 Subject: Fix --- src/server/activitypub/inbox.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/server/activitypub/inbox.ts') diff --git a/src/server/activitypub/inbox.ts b/src/server/activitypub/inbox.ts index f76e750d22..b4761d9972 100644 --- a/src/server/activitypub/inbox.ts +++ b/src/server/activitypub/inbox.ts @@ -8,7 +8,7 @@ const app = express(); app.disable('x-powered-by'); app.use(bodyParser.json()); -app.get('/@:user/inbox', async (req, res) => { +app.post('/@:user/inbox', async (req, res) => { let parsed; try { -- cgit v1.3.1-freya From c83bb3b8ab59ea8b6a5042b55b859076cdfa127e Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Sun, 1 Apr 2018 18:16:47 +0900 Subject: Respond with 202 for inbox request --- src/server/activitypub/inbox.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/server/activitypub/inbox.ts') diff --git a/src/server/activitypub/inbox.ts b/src/server/activitypub/inbox.ts index b4761d9972..9151297487 100644 --- a/src/server/activitypub/inbox.ts +++ b/src/server/activitypub/inbox.ts @@ -36,7 +36,7 @@ app.post('/@:user/inbox', async (req, res) => { outbox: req.body, }).save(); - return res.sendStatus(200); + return res.status(202).end(); }); export default app; -- cgit v1.3.1-freya