summaryrefslogtreecommitdiff
path: root/src/queue/processors/http/process-inbox.ts
diff options
context:
space:
mode:
authorAkihiko Odaki <nekomanma@pixiv.co.jp>2018-04-05 01:04:44 +0900
committerAkihiko Odaki <nekomanma@pixiv.co.jp>2018-04-05 01:04:44 +0900
commite330ac1934516807757afe2d2760fa21b27006e6 (patch)
tree84171f44928b460ea3c23a32e4b53bb0f2879318 /src/queue/processors/http/process-inbox.ts
parentRetry HTTP requests (diff)
downloadmisskey-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.ts51
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();
};