clabot-fix
Version:
A bot to take the pain out of Contributor License Agreements
57 lines (49 loc) • 2.19 kB
JavaScript
(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);