Skip to content

An Elixir library to handle GitHub webhooks with ease

License

Notifications You must be signed in to change notification settings

puretype/github_webhook

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitHubWebhook

A fork from gh_webhook_plug, with some additional functionality:

  • deserializes the payload into an Elixir data structure
  • pass along webhook headers in a keyword list
  • updates for OTP functionality and updated Elixir conventions
  • uses the X-Hub-Signature-256 header for verification
    • make sure that you have configured a secret for your webhook

Usage

Inside a Phoenix application, in the Endpoint module:

defmodule MyApp.Endpoint do

  plug GitHubWebhook,
    secret: "secret",
    path: "/github_webhook",
    action: {MyApp.GithubWebhook, :handle}

  # Rest of the plugs
end

so you can write the handler like so:

defmodule MyApp.GithubWebhook do
  @spec handle(Plug.Conn.t(), map(), Keyword.t()) :: any()
  def handle(conn, payload, opts) do
    # Handle webhook payload here
    # opts contains additional values from headers

    # Return value of this function is ignored
  end
end

Configuration

The below variables can be set in your config/config.exs or via options to the plug:

config :github_webhook,
  # Secret set in webhook settings page of the Github repository
  secret: "foobar",
  # Path that will be intercepted by GhWebhookPlug
  path: "/api/github_webhook",
  # Module and function that will be used to handle the webhook payload
  action: {MyApp.GithubWebhook, :handle}

The following options are read at compile-time, and so therefore must be set in config/config.exs:

config :github_webhook,
  # JSON library used for decoding the incoming request
  json_library: Jason

Installation

The package can be installed by adding github_webhook to your list of dependencies in mix.exs:

def deps do
  [
    {:github_webhook, "~> 0.2"}
  ]
end

The docs can be found at https://hexdocs.pm/github_webhook.

About

An Elixir library to handle GitHub webhooks with ease

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Languages