Skip to content

Commit

Permalink
feat: api.verifyAndReceive({id, name, payload, signature})
Browse files Browse the repository at this point in the history
  • Loading branch information
gr2m committed Dec 25, 2017
1 parent 38ba0d7 commit 4870c65
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
6 changes: 3 additions & 3 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ const createEventHandler = require('./event-handler')
const middleware = require('./middleware/middleware')
const sign = require('./sign')
const verify = require('./verify')
const verifyAndReceive = require('./middleware/verify-and-receive')

function createWebhooksApi (options) {
if (!options || !options.secret) {
Expand All @@ -16,14 +17,13 @@ function createWebhooksApi (options) {
secret: options.secret
}

const webhooksMiddleware = middleware.bind(null, state)

return {
sign: sign.bind(null, options.secret),
verify: verify.bind(null, options.secret),
on: state.eventHandler.on,
removeListener: state.eventHandler.removeListener,
receive: state.eventHandler.receive,
middleware: webhooksMiddleware
middleware: middleware.bind(null, state),
verifyAndReceive: verifyAndReceive.bind(null, state)
}
}
22 changes: 22 additions & 0 deletions middleware/verify-and-receive.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
module.exports = verifyAndReceive

const verify = require('../verify')

function verifyAndReceive (state, event) {
const matchesSignature = verify(state.secret, event.payload, event.signature)

if (!matchesSignature) {
const error = new Error('signature does not match event payload and secret')

error.event = event
error.status = 400

return state.eventHandler.receive(error)
}

return state.eventHandler.receive({
id: event.id,
name: event.name,
payload: event.payload
})
}

0 comments on commit 4870c65

Please sign in to comment.