diff options
| author | Akihiko Odaki <nekomanma@pixiv.co.jp> | 2018-04-05 01:04:44 +0900 |
|---|---|---|
| committer | Akihiko Odaki <nekomanma@pixiv.co.jp> | 2018-04-05 01:04:44 +0900 |
| commit | e330ac1934516807757afe2d2760fa21b27006e6 (patch) | |
| tree | 84171f44928b460ea3c23a32e4b53bb0f2879318 /src/queue/processors/http/process-inbox.ts | |
| parent | Retry HTTP requests (diff) | |
| download | misskey-e330ac1934516807757afe2d2760fa21b27006e6.tar.gz misskey-e330ac1934516807757afe2d2760fa21b27006e6.tar.bz2 misskey-e330ac1934516807757afe2d2760fa21b27006e6.zip | |
Let unhandled rejection handler handle rejections in jobs
Diffstat (limited to 'src/queue/processors/http/process-inbox.ts')
| -rw-r--r-- | src/queue/processors/http/process-inbox.ts | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/src/queue/processors/http/process-inbox.ts b/src/queue/processors/http/process-inbox.ts index de1dbd2f98..88fbb97377 100644 --- a/src/queue/processors/http/process-inbox.ts +++ b/src/queue/processors/http/process-inbox.ts @@ -5,35 +5,40 @@ import act from '../../../remote/activitypub/act'; import resolvePerson from '../../../remote/activitypub/resolve-person'; import Resolver from '../../../remote/activitypub/resolver'; -export default async ({ data }): Promise<void> => { - const keyIdLower = data.signature.keyId.toLowerCase(); - let user; +export default async ({ data }, done) => { + try { + const keyIdLower = data.signature.keyId.toLowerCase(); + let user; - if (keyIdLower.startsWith('acct:')) { - const { username, host } = parseAcct(keyIdLower.slice('acct:'.length)); - if (host === null) { - throw 'request was made by local user'; - } + if (keyIdLower.startsWith('acct:')) { + const { username, host } = parseAcct(keyIdLower.slice('acct:'.length)); + if (host === null) { + done(); + return; + } - user = await User.findOne({ usernameLower: username, hostLower: host }) as IRemoteUser; - } else { - user = await User.findOne({ - host: { $ne: null }, - 'account.publicKey.id': data.signature.keyId - }) as IRemoteUser; + user = await User.findOne({ usernameLower: username, hostLower: host }) as IRemoteUser; + } else { + user = await User.findOne({ + host: { $ne: null }, + 'account.publicKey.id': data.signature.keyId + }) as IRemoteUser; - if (user === null) { - user = await resolvePerson(data.signature.keyId); + if (user === null) { + user = await resolvePerson(data.signature.keyId); + } } - } - if (user === null) { - throw 'failed to resolve user'; - } + if (user === null || !verifySignature(data.signature, user.account.publicKey.publicKeyPem)) { + done(); + return; + } - if (!verifySignature(data.signature, user.account.publicKey.publicKeyPem)) { - throw 'signature verification failed'; + await Promise.all(await act(new Resolver(), user, data.inbox, true)); + } catch (error) { + done(error); + return; } - await Promise.all(await act(new Resolver(), user, data.inbox, true)); + done(); }; |