Skip to content

Commit 4870c65

Browse files
committed
feat: api.verifyAndReceive({id, name, payload, signature})
1 parent 38ba0d7 commit 4870c65

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const createEventHandler = require('./event-handler')
44
const middleware = require('./middleware/middleware')
55
const sign = require('./sign')
66
const verify = require('./verify')
7+
const verifyAndReceive = require('./middleware/verify-and-receive')
78

89
function createWebhooksApi (options) {
910
if (!options || !options.secret) {
@@ -16,14 +17,13 @@ function createWebhooksApi (options) {
1617
secret: options.secret
1718
}
1819

19-
const webhooksMiddleware = middleware.bind(null, state)
20-
2120
return {
2221
sign: sign.bind(null, options.secret),
2322
verify: verify.bind(null, options.secret),
2423
on: state.eventHandler.on,
2524
removeListener: state.eventHandler.removeListener,
2625
receive: state.eventHandler.receive,
27-
middleware: webhooksMiddleware
26+
middleware: middleware.bind(null, state),
27+
verifyAndReceive: verifyAndReceive.bind(null, state)
2828
}
2929
}

middleware/verify-and-receive.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
module.exports = verifyAndReceive
2+
3+
const verify = require('../verify')
4+
5+
function verifyAndReceive (state, event) {
6+
const matchesSignature = verify(state.secret, event.payload, event.signature)
7+
8+
if (!matchesSignature) {
9+
const error = new Error('signature does not match event payload and secret')
10+
11+
error.event = event
12+
error.status = 400
13+
14+
return state.eventHandler.receive(error)
15+
}
16+
17+
return state.eventHandler.receive({
18+
id: event.id,
19+
name: event.name,
20+
payload: event.payload
21+
})
22+
}

0 commit comments

Comments
 (0)