diff options
| author | Akihiko Odaki <nekomanma@pixiv.co.jp> | 2018-04-02 18:36:47 +0900 |
|---|---|---|
| committer | Akihiko Odaki <nekomanma@pixiv.co.jp> | 2018-04-02 18:36:47 +0900 |
| commit | 69763ac32b4e79e84d8338ba8e20b83add9d8560 (patch) | |
| tree | a3ac499dac06decbc8c47a3d393336f5fbedc56a /src/server | |
| parent | Distribute posts from remote (diff) | |
| download | misskey-69763ac32b4e79e84d8338ba8e20b83add9d8560.tar.gz misskey-69763ac32b4e79e84d8338ba8e20b83add9d8560.tar.bz2 misskey-69763ac32b4e79e84d8338ba8e20b83add9d8560.zip | |
Resolve account by signature in inbox
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/activitypub/inbox.ts | 42 |
1 files changed, 6 insertions, 36 deletions
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(); |