GitHub DevLog AI GitHub DevLog AIWebhook inbox privado para GitHub
← Integrações GitHub
Ruby

Webhook do GitHub com Ruby on Rails

Use request.raw_post e secure_compare antes de permitir que o evento alcance o processamento.

Exemplo de código

Endpoint de webhook

Exemplos de código, nomes de cabeçalhos, nomes de eventos e assinaturas permanecem literais nos dois idiomas.

class GithubWebhooksController < ApplicationController
  skip_forgery_protection

  def create
    body = request.raw_post
    sent = request.headers['X-Hub-Signature-256'].to_s
    digest = OpenSSL::HMAC.hexdigest('SHA256', ENV.fetch('GITHUB_WEBHOOK_SECRET'), body)
    expected = "sha256=#{digest}"
    valid = sent.bytesize == expected.bytesize &&
      ActiveSupport::SecurityUtils.secure_compare(sent, expected)
    return head :unauthorized unless valid

    GithubWebhookJob.perform_later(request.headers['X-GitHub-Delivery'],
      request.headers['X-GitHub-Event'], JSON.parse(body))
    head :accepted
  end
end
Passos de configuração

Valide a primeira delivery

Passos de configuração 1

Crie um workspace no DevLog e copie o endpoint e o Secret.

Passos de configuração 2

Configure o mesmo Secret no GitHub e na variável segura da aplicação.

Passos de configuração 3

Envie um ping e confirme assinatura, Delivery ID e payload no inbox.