server.ext('onPreResponse', (request, reply) => { if (request.response.isBoom) { if (request.headers.accept) { if (request.headers.accept.indexOf('application/json') === -1) { const err = request.response const errName = err.output.payload.error const statusCode = err.output.payload.statusCode if (statusCode === 401) { return reply.redirect('/login') } return reply.view('error', { statusCode: statusCode, errName: errName }).code(statusCode) } } } reply.continue() })
server.route({ method: 'POST', path:'/travis', handler: function (request, reply) { let travisSignature = Buffer.from(request.headers.signature, 'base64'); let payload = request.payload.payload; let status = false; got('https://api.travis-ci.org/config', { timeout: 10000 }) .then(response => { let travisPublicKey = JSON.parse(response.body).config.notifications.webhook.public_key; let verifier = crypto.createVerify('sha1'); verifier.update(payload); status = verifier.verify(travisPublicKey, travisSignature); }) .catch(error => { console.log('Something went wrong:\n' + error) }) .then(() => { if (status) { // Handle request here now that it has been verified... } reply(200); }); } });