From 69763ac32b4e79e84d8338ba8e20b83add9d8560 Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Mon, 2 Apr 2018 18:36:47 +0900 Subject: Resolve account by signature in inbox --- src/server/activitypub/inbox.ts | 42 ++++++----------------------------------- 1 file changed, 6 insertions(+), 36 deletions(-) (limited to 'src/server') diff --git a/src/server/activitypub/inbox.ts b/src/server/activitypub/inbox.ts index 2de2bd9646..5de8433850 100644 --- a/src/server/activitypub/inbox.ts +++ b/src/server/activitypub/inbox.ts @@ -1,9 +1,7 @@ import * as bodyParser from 'body-parser'; import * as express from 'express'; -import { parseRequest, verifySignature } from 'http-signature'; -import User, { IRemoteUser } from '../../models/user'; +import { parseRequest } from 'http-signature'; import queue from '../../queue'; -import parseAcct from '../../acct/parse'; const app = express(); @@ -14,48 +12,20 @@ app.post('/@:user/inbox', bodyParser.json({ return true; } }), async (req, res) => { - let parsed; + let signature; req.headers.authorization = 'Signature ' + req.headers.signature; try { - parsed = parseRequest(req); + signature = parseRequest(req); } catch (exception) { return res.sendStatus(401); } - const keyIdLower = parsed.keyId.toLowerCase(); - let query; - - if (keyIdLower.startsWith('acct:')) { - const { username, host } = parseAcct(keyIdLower.slice('acct:'.length)); - if (host === null) { - return res.sendStatus(401); - } - - query = { usernameLower: username, hostLower: host }; - } else { - query = { - host: { $ne: null }, - 'account.publicKey.id': parsed.keyId - }; - } - - const user = await User.findOne(query) as IRemoteUser; - - if (user === null) { - return res.sendStatus(401); - } - - if (!verifySignature(parsed, user.account.publicKey.publicKeyPem)) { - return res.sendStatus(401); - } - queue.create('http', { - type: 'performActivityPub', - actor: user._id, - outbox: req.body, - distribute: true, + type: 'processInbox', + inbox: req.body, + signature, }).save(); return res.status(202).end(); -- cgit v1.2.3-freya