|
1 | | -import { verifyWithFallback } from "@octokit/webhooks-methods"; |
2 | | - |
| 1 | +import { verifyAndParse } from "./verify-and-parse.ts"; |
3 | 2 | import type { |
4 | | - EmitterWebhookEvent, |
5 | 3 | EmitterWebhookEventWithStringPayloadAndSignature, |
6 | 4 | State, |
7 | | - WebhookError, |
8 | 5 | } from "./types.ts"; |
9 | 6 | import type { EventHandler } from "./event-handler/index.ts"; |
10 | 7 |
|
11 | 8 | export async function verifyAndReceive( |
12 | 9 | state: State & { secret: string; eventHandler: EventHandler<unknown> }, |
13 | 10 | event: EmitterWebhookEventWithStringPayloadAndSignature, |
14 | 11 | ): Promise<void> { |
15 | | - // verify will validate that the secret is not undefined |
16 | | - const matchesSignature = await verifyWithFallback( |
17 | | - state.secret, |
18 | | - event.payload, |
19 | | - event.signature, |
20 | | - state.additionalSecrets, |
21 | | - ).catch(() => false); |
22 | | - |
23 | | - if (!matchesSignature) { |
24 | | - const error = new Error( |
25 | | - "[@octokit/webhooks] signature does not match event payload and secret", |
26 | | - ); |
27 | | - |
28 | | - return state.eventHandler.receive( |
29 | | - Object.assign(error, { event, status: 400 }) as WebhookError, |
30 | | - ); |
31 | | - } |
32 | | - |
33 | | - let payload: EmitterWebhookEvent["payload"]; |
34 | | - try { |
35 | | - payload = JSON.parse(event.payload); |
36 | | - } catch (error: any) { |
37 | | - error.message = "Invalid JSON"; |
38 | | - error.status = 400; |
39 | | - throw new AggregateError([error], error.message); |
40 | | - } |
41 | | - |
42 | | - return state.eventHandler.receive({ |
43 | | - id: event.id, |
44 | | - name: event.name, |
45 | | - payload, |
46 | | - } as EmitterWebhookEvent); |
| 12 | + return state.eventHandler.receive( |
| 13 | + await verifyAndParse(state.secret, event, state.additionalSecrets), |
| 14 | + ); |
47 | 15 | } |
0 commit comments