sundar_147
sundar_147

Reputation: 13

Mandrill webhook authentication-signature not matched

Mandrill webhook authentication-verify signature

For node js

example verify signature

please check the code below

But its working only for event types like send, reject. Not working for event types like open, click & others

function generateSignature(webhook_key, url, params) {
  var signed_data = url;
  const param_keys = Object.keys(params);
  param_keys.sort();
  param_keys.forEach(function (key) {
      signed_data += key + params[key];
  }); 

  hmac = crypto.createHmac('sha1', webhook_key);
  hmac.update(signed_data);

  return hmac.digest('base64');
}

let url = "https://your-app-domain.com/default/MandrillXP-new";
let key = "abcd1234"; //your mandrill webhook api key

let bodyPayload;
if(event.isBase64Encoded){
  bodyPayload = Buffer.from(event.body, 'base64').toString()
}else{
  bodyPayload = event.body
} 
  let splitData = req.body.split("=")
  let decodeData = decodeURIComponent(splitData[1]);    

var generatedSignature = generateSignature(key, url, { "mandrill_events": decodeData })

if (req.headers["x-mandrill-signature"]!== generatedSignature) {
  console.log("signature mismatch")
}else{
  console.log("signature  matched")
}

Upvotes: 0

Views: 386

Answers (1)

sundar_147
sundar_147

Reputation: 13

replace '+' with ' '(space) in string before encode

var decodeData = decodeData .replace(/[+]/g, ' ');

Upvotes: 0

Related Questions