@@ -20,35 +20,51 @@ export const createHandler = (options: CreateHandlerOptions): Handler => {
|
||||
const { secret } = options
|
||||
|
||||
const handler: Handler = async function (req, res) {
|
||||
const signature = req.headers['x-webhook-signature']
|
||||
assert(typeof signature === 'string', 'X-Webhook-Signature must be string')
|
||||
const event = req.headers['x-webhook-event']
|
||||
const signature256 = req.headers['x-webhook-signature256']
|
||||
assert(
|
||||
typeof signature256 === 'string',
|
||||
'X-Webhook-Signature256 must be string',
|
||||
)
|
||||
try {
|
||||
const signature = req.headers['x-webhook-signature']
|
||||
assert(
|
||||
typeof signature === 'string',
|
||||
'X-Webhook-Signature must be string',
|
||||
)
|
||||
const event = req.headers['x-webhook-event']
|
||||
const signature256 = req.headers['x-webhook-signature256']
|
||||
assert(
|
||||
typeof signature256 === 'string',
|
||||
'X-Webhook-Signature256 must be string',
|
||||
)
|
||||
|
||||
const obj = (req as any).body || (await parseJSONFromRequest(req))
|
||||
const stringifyPayload = JSON.stringify(obj)
|
||||
const isValid =
|
||||
verifyWebhook(secret, stringifyPayload, signature256 as string) &&
|
||||
verifyWebhookSha1(secret, stringifyPayload, signature as string)
|
||||
const obj = (req as any).body || (await parseJSONFromRequest(req))
|
||||
const stringifyPayload = JSON.stringify(obj)
|
||||
const isValid =
|
||||
verifyWebhook(secret, stringifyPayload, signature256 as string) &&
|
||||
verifyWebhookSha1(secret, stringifyPayload, signature as string)
|
||||
if (isValid) {
|
||||
if (event === 'health_check') {
|
||||
res.statusCode = 200
|
||||
res.setHeader('Content-Type', 'application/json')
|
||||
res.end(JSON.stringify({ ok: 1 }))
|
||||
return
|
||||
}
|
||||
|
||||
if (isValid) {
|
||||
handler.emitter.emit(event as BusinessEvents, obj)
|
||||
handler.emitter.emit('*', {
|
||||
type: event,
|
||||
payload: obj,
|
||||
})
|
||||
res.statusCode = 200
|
||||
res.end()
|
||||
} else {
|
||||
console.error('revice a invalidate webhook payload', req.headers)
|
||||
handler.emitter.emit('error', new Error('invalidate signature'))
|
||||
handler.emitter.emit(event as BusinessEvents, obj)
|
||||
handler.emitter.emit('*', {
|
||||
type: event,
|
||||
payload: obj,
|
||||
})
|
||||
res.statusCode = 200
|
||||
res.setHeader('Content-Type', 'application/json')
|
||||
res.end(JSON.stringify({ ok: 1 }))
|
||||
} else {
|
||||
console.error('revice a invalidate webhook payload', req.headers)
|
||||
handler.emitter.emit('error', new Error('invalidate signature'))
|
||||
|
||||
res.statusCode = 400
|
||||
res.end('invalidate signature')
|
||||
res.statusCode = 400
|
||||
res.setHeader('Content-Type', 'application/json')
|
||||
res.end(JSON.stringify({ ok: 0, message: 'Invalid Signature' }))
|
||||
}
|
||||
} catch (err) {
|
||||
res.statusCode = 500
|
||||
res.end(JSON.stringify({ ok: 0, message: err.message }))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user