Skip to content

Instantly share code, notes, and snippets.

@bbrewer97202
Created January 4, 2017 16:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bbrewer97202/9d648ecf4a5b276d50f0f3686751baee to your computer and use it in GitHub Desktop.
Save bbrewer97202/9d648ecf4a5b276d50f0f3686751baee to your computer and use it in GitHub Desktop.
validation of x-hub-signature header facebook
const crypto = require('crypto');
const jsesc = require('jsesc');
//inside express route handler
const xHubSignature = req.headers['x-hub-signature'];
if (this.validateSignature(xHubSignature, req.body)) {
console.log('valid signature');
}
/**
* given xHubSignature and body request as JSON, return boolean if signed response matches expected signature
*/
validateSignature(xHubSignature, body) {
let isValid = false;
body = jsesc(body, {
json: true,
escapeEverything: false,
lowercaseHex: true
});
if (process.env.FACEBOOK_APP_SECRET) {
const signature = 'sha1=' + crypto.createHmac('sha1', process.env.FACEBOOK_APP_SECRET).update(body).digest('hex');
isValid = (xHubSignature === signature);
} else {
console.log('missing FACEBOOK_APP_SECRET env variable');
}
return isValid;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment