swop/github-webhook-bundle

Symfony 扩展包,旨在简化 GitHub Webhook 处理。

安装: 362

依赖: 0

建议者: 0

安全性: 0

星标: 6

关注者: 2

分支: 4

开放问题: 1

类型:symfony-bundle

v1.0 2016-11-22 02:08 UTC

This package is not auto-updated.

Last update: 2024-09-23 14:33:52 UTC


README

Build Status

此扩展包旨在降低创建 GitHub Webhook 应用时的复杂性。

安装

推荐通过 Composer 安装此扩展包

composer require "swop/github-webhook-bundle"

然后,将扩展包注册到您的 AppKernel 类中。请注意,此扩展包依赖于 SensioFrameworkExtraBundle 扩展包才能正常工作。

<?php

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = [
            // ...
            new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
            new Swop\Bundle\GitHubWebHookBundle\GitHubWebHookBundle()
        ];

        // ...
    }
}

使用方法

只需在您的控制器中使用 GitHubWebHook 注解来标记它们为 GitHub Webhook 控制器

<?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'];
    }
}

通过声明您的控制器是 GitHub Webhook,扩展包将为您执行以下操作

  • 它会检查传入的 Webhook 事件是否被您的控制器 支持。如果不支持,将自动返回 400 JSON 响应。

  • 它将验证传入的请求 是否有正确的签名,使用 Webhook 特定密钥(见“注解参考”)或默认密钥(见“扩展包配置参考”)。如果请求签名无效,将自动返回 403 JSON 响应。

  • 它将构建一个 GitHubEvent 对象,并将其注入到控制器参数中。

  • 它将管理您在控制器中返回的数据的序列化,从而向 GitHub 返回 200 JSON 响应。

配置

扩展包配置参考

github_webhook:
    default_secret: my_secret
  • default_secret:在验证传入请求签名时在每个钩子中使用的默认密钥。

注解参考

简单事件类型处理(只响应 push 事件)

<?php
/**
 * @GitHubWebHook(eventType="push")
 */

多事件类型处理(响应 pushpull_request 事件)

<?php
/**
 * @GitHubWebHook(eventType="push")
 * @GitHubWebHook(eventType="pull_request")
 */

为签名验证配置专用密钥

<?php
/**
 * @GitHubWebHook(eventType="push", secret="push_secret")
 * @GitHubWebHook(eventType="pull_request", secret="pr_secret")
 */

您还可以依靠容器参数来配置要使用的密钥

<?php
/**
 * @GitHubWebHook(eventType="push", secret="%hook.push.secret%")
 */

贡献

参见 CONTRIBUTING 文件。

原始信用

许可

此库在 MIT 许可证下发布。请参阅捆绑的 LICENSE 文件中的完整许可证。