← 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.