diff options
| author | Mar0xy <marie@kaifa.ch> | 2023-10-20 12:50:56 +0200 |
|---|---|---|
| committer | Mar0xy <marie@kaifa.ch> | 2023-10-20 12:50:56 +0200 |
| commit | 71b7c31958e2ce11a4b5a11a5c282ca3bdcb41dc (patch) | |
| tree | 653fabf747e5a53cb39c9e167d2499a4430e76c7 /packages/backend/src/queue | |
| parent | upd: wrap username in header (diff) | |
| download | sharkey-71b7c31958e2ce11a4b5a11a5c282ca3bdcb41dc.tar.gz sharkey-71b7c31958e2ce11a4b5a11a5c282ca3bdcb41dc.tar.bz2 sharkey-71b7c31958e2ce11a4b5a11a5c282ca3bdcb41dc.zip | |
upd: refetch user keys on signature failure
Reference: https://github.com/misskey-dev/misskey/pull/12051
Diffstat (limited to 'packages/backend/src/queue')
| -rw-r--r-- | packages/backend/src/queue/processors/InboxProcessorService.ts | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/packages/backend/src/queue/processors/InboxProcessorService.ts b/packages/backend/src/queue/processors/InboxProcessorService.ts index 89d4ea503e..f51c9f140d 100644 --- a/packages/backend/src/queue/processors/InboxProcessorService.ts +++ b/packages/backend/src/queue/processors/InboxProcessorService.ts @@ -104,12 +104,24 @@ export class InboxProcessorService { } // HTTP-Signatureの検証 - const httpSignatureValidated = httpSignature.verifySignature(signature, authUser.key.keyPem); + let httpSignatureValidated = httpSignature.verifySignature(signature, authUser.key.keyPem); // また、signatureのsignerは、activity.actorと一致する必要がある if (!httpSignatureValidated || authUser.user.uri !== activity.actor) { + let renewKeyFailed = false; + + if (!httpSignatureValidated) { + authUser.key = await this.apDbResolverService.refetchPublicKeyForApId(authUser.user); + + if (authUser.key != null) { + httpSignatureValidated = httpSignature.verifySignature(signature, authUser.key.keyPem); + } else { + renewKeyFailed = true; + } + } + // 一致しなくても、でもLD-Signatureがありそうならそっちも見る - if (activity.signature) { + if (activity.signature && renewKeyFailed) { if (activity.signature.type !== 'RsaSignature2017') { throw new Bull.UnrecoverableError(`skip: unsupported LD-signature type ${activity.signature.type}`); } |