Сравнить подписи X-Hub-Signature не совпадает с подписью BLOB-объекта, но работает с собственной функцией - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь создать github webhook, и я получаю, что X-Hub-Signature не соответствует сигнатуре BLOB-объекта

Моя собственная функция работает! но не в пакете github-webhook-handler

Вот моя собственная функция:

    const createComparisonSignature = (body) => {
      const hmac = crypto.createHmac('sha1', process.env.GITHUB_SECRET);
      const self_signature = hmac.update(JSON.stringify(body)).digest('hex');
      return `sha1=${self_signature}`; // shape in GitHub header
    }
    const compareSignatures = (signature, comparison_signature) => {
      const source = Buffer.from(signature);
      const comparison = Buffer.from(comparison_signature);
      return crypto.timingSafeEqual(source, comparison); // constant time comparison
    }
    const { headers, body } = req;
    const signature = headers['x-hub-signature'];
    const comparison_signature = createComparisonSignature(req.body);
    if (!compareSignatures(signature, comparison_signature)) {
      return res.status(401).send('Mismatched signatures');
    } else {
      console.log("signature match")
      const { action, ...payload } = body;
      req.event_type = headers['x-github-event']; // one of: https://developer.github.com/v3/activity/events/types/ 
      req.action = action;
      req.payload = payload;
      next();
    }
    return next()

Таким образом, я получаю совпадение подписи при доставке, но для следующего промежуточного ПО я получаю X-Hub-Signature does not match blob signature github-webhook- Для получения автообновления на электроне требуется обработчик с гайкой-подачей js.

...