summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScisco <alireza@developmentseed.org>2014-08-06 09:51:40 -0400
committerScisco <alireza@developmentseed.org>2014-08-06 09:51:40 -0400
commit27f796549908969c603bde09e8f3f1bcea0ccaa0 (patch)
tree7da8c4de094f28e6f6f5e3f38876cabd24257093
parent22d8875c637221bf5fd354dc44d2aa7862848208 (diff)
parent0e6ce5357e72799eff587f8ed3c664b1635256f4 (diff)
Merge branch 'validate_x_hub_sig' of https://github.com/Phillipmartin/jekyll-hook into Phillipmartin-validate_x_hub_sig
-rw-r--r--config.sample.json1
-rwxr-xr-xjekyll-hook.js26
2 files changed, 26 insertions, 1 deletions
diff --git a/config.sample.json b/config.sample.json
index 01da368..eba0920 100644
--- a/config.sample.json
+++ b/config.sample.json
@@ -6,6 +6,7 @@
"build": "./scripts/build.sh",
"publish": "./scripts/publish.sh"
},
+ "secret": "",
"email": {
"isActivated": false,
"user": "",
diff --git a/jekyll-hook.js b/jekyll-hook.js
index e75a9f3..72785c7 100755
--- a/jekyll-hook.js
+++ b/jekyll-hook.js
@@ -9,8 +9,32 @@ var tasks = queue(1);
var spawn = require('child_process').spawn;
var email = require('emailjs/email');
var mailer = email.server.connect(config.email);
+var crypto = require('crypto');
-app.use(express.bodyParser());
+app.use(express.bodyParser({
+ verify: function(req,res,buffer){
+ if(!req.headers['x-hub-signature']){
+ return;
+ }
+
+ if(!config.secret || config.secret==""){
+ console.log("Recieved a X-Hub-Signature header, but cannot validate as no secret is configured");
+ return;
+ }
+
+ var hmac = crypto.createHmac('sha1', config.secret);
+ var recieved_sig = req.headers['x-hub-signature'].split('=')[1];
+ var computed_sig = hmac.update(buffer).digest('hex');
+
+ if(recieved_sig != computed_sig){
+ console.warn('Recieved an invalid HMAC: calculated:' + computed_sig + ' != recieved:' + recieved_sig);
+ var err = new Error('Invalid Signature');
+ err.status = 403;
+ throw err;
+ }
+ }
+
+}));
// Receive webhook post
app.post('/hooks/jekyll/:branch', function(req, res) {