UNPKG

clabot-fix

Version:

A bot to take the pain out of Contributor License Agreements

57 lines (49 loc) 2.19 kB
(function() { 'use strict'; var answerComment, answerPullRequest, crypto, _; crypto = require('crypto'); _ = require('lodash'); answerComment = require('./answerComment'); answerPullRequest = require('./answerPullRequest'); exports.notify = function(req, res) { var hubSignature, options, payload, payloadSignature, repo, secret, user, _ref, _ref1; options = req.clabotOptions; payload = JSON.parse(req.body.payload); if (payload.repository == null) { return res.send(200); } repo = payload.repository.name; user = payload.repository.owner.login; secret = ((_ref = options.secrets) != null ? (_ref1 = _ref[user]) != null ? _ref1[repo] : void 0 : void 0) || ''; if (!(req.rawBody && (hubSignature = req.get('X-Hub-Signature')))) { console.log('Fatal Error: Can not trust request without raw body'); res.send(500, 'Fatal Error: Can not trust request without raw body'); return; } payloadSignature = 'sha1=' + crypto.createHmac('sha1', secret).update(req.rawBody).digest('hex'); delete req.rawBody; if (hubSignature !== payloadSignature) { console.log('Fatal Error: Untrusted source'); res.send(500, 'Fatal Error: Untrusted source'); return; } if (_.isFunction(options.getContractors)) { return options.getContractors(function(contractors) { if (payload.pull_request && payload.action === 'opened') { return answerPullRequest(req, res, options, contractors, payload); } else if (payload.comment && payload.issue.pull_request && payload.action === 'created') { return answerComment(req, res, options, contractors, payload); } else { console.log('Unexpected event. I\'ll just pretend nothing happened'); return res.send(200, 'Unexpected event. I\'ll just pretend nothing happened'); } }); } else { console.log('Fatal Error: options#getContractors not provided'); return res.send(500, 'Fatal Error: options#getContractors not provided'); } }; exports["default"] = function(req, res) { return res.send('always at your service, clabot'); }; }).call(this);