This bundle aiming to reduce complexity when creating GitHub web hooks apps.
The recommended way to install this bundle is through Composer:
composer require "swop/github-webhook-bundle"
Then, register the bundle into your AppKernel class. Note that this bundle rely on the SensioFrameworkExtraBundle bundle in order to work properly.
<?php
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = [
// ...
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new Swop\Bundle\GitHubWebHookBundle\GitHubWebHookBundle()
];
// ...
}
}Simply use the GitHubWebHook annotation in your controllers to mark them as GitHub web hook controllers
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Swop\GitHubWebHook\Event\GitHubEvent;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Swop\Bundle\GitHubWebHookBundle\Annotation\GitHubWebHook;
class DefaultController extends Controller
{
/**
* @Route("/webhook", name="webhook")
*
* @GitHubWebHook(eventType="push")
* @GitHubWebHook(eventType="pull_request")
*/
public function indexAction(GitHubEvent $gitHubEvent)
{
$payload = $gitHubEvent->getPayload(); // Request payload (array)
$eventType = $gitHubEvent->getType(); // "pull" or "pull_request"
// Do something depending on the payload & the event type...
return ['status' => 'success'];
}
}By declaring that your controller is a GitHub web hook, the bundle will make the following actions for you:
-
It will check if the incoming web hook event is supported by your controller. If it's not the case, a
400JSON response will be automatically returned. -
It will verify that the incoming request has a correct signature, using the web hook specific secret (see "Annotation reference") or the default one (see "Bundle configuration reference"). If the request signature is invalid, a
403JSON response will be automatically returned. -
It will build a
GitHubEventobject which will be injected in the controller parameters. -
It will manage the serialization of the data you returned in your controller, and thus will send back a
200JSON response to GitHub.
github_webhook:
default_secret: my_secretdefault_secret: Default secret to use on every hooks when validating the incoming request signature.
Simple event type handling (will respond only to the push event):
<?php
/**
* @GitHubWebHook(eventType="push")
*/Multiple event types handling (will respond to the push and pull_request event):
<?php
/**
* @GitHubWebHook(eventType="push")
* @GitHubWebHook(eventType="pull_request")
*/Configure a dedicated secret to use for signature validation:
<?php
/**
* @GitHubWebHook(eventType="push", secret="push_secret")
* @GitHubWebHook(eventType="pull_request", secret="pr_secret")
*/You also can rely on a container parameter to configure the secret to use:
<?php
/**
* @GitHubWebHook(eventType="push", secret="%hook.push.secret%")
*/See CONTRIBUTING file.
- Sylvain MAUDUIT (@Swop) as main author.
This library is released under the MIT license. See the complete license in the bundled LICENSE file.
