webhooks

package module
v3.12.0+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 8, 2018 License: MIT Imports: 3 Imported by: 0

README

Library webhooks

Project status Build Status Coverage Status Go Report Card GoDoc License

Library webhooks allows for easy receiving and parsing of GitHub, Bitbucket and GitLab Webhook Events

Features:

  • Parses the entire payload, not just a few fields.
  • Fields + Schema directly lines up with webhook posted json

Notes:

  • Currently only accepting json payloads.

Installation

Use go get.

go get -u gopkg.in/go-playground/webhooks.v3

Then import the package into your own code.

import "gopkg.in/go-playground/webhooks.v3"

Usage and Documentation

Please see http://godoc.org/gopkg.in/go-playground/webhooks.v3 for detailed usage docs.

Examples:

Multiple Handlers for each event you subscribe to

package main

import (
	"fmt"
	"strconv"

	"gopkg.in/go-playground/webhooks.v3"
	"gopkg.in/go-playground/webhooks.v3/github"
)

const (
	path = "/webhooks"
	port = 3016
)

func main() {

	hook := github.New(&github.Config{Secret: "MyGitHubSuperSecretSecrect...?"})
	hook.RegisterEvents(HandleRelease, github.ReleaseEvent)
	hook.RegisterEvents(HandlePullRequest, github.PullRequestEvent)

	err := webhooks.Run(hook, ":"+strconv.Itoa(port), path)
	if err != nil {
		fmt.Println(err)
	}
}

// HandleRelease handles GitHub release events
func HandleRelease(payload interface{}, header webhooks.Header) {

	fmt.Println("Handling Release")

	pl := payload.(github.ReleasePayload)

	// only want to compile on full releases
	if pl.Release.Draft || pl.Release.Prerelease || pl.Release.TargetCommitish != "master" {
		return
	}

	// Do whatever you want from here...
	fmt.Printf("%+v", pl)
}

// HandlePullRequest handles GitHub pull_request events
func HandlePullRequest(payload interface{}, header webhooks.Header) {

	fmt.Println("Handling Pull Request")

	pl := payload.(github.PullRequestPayload)

	// Do whatever you want from here...
	fmt.Printf("%+v", pl)
}

Single receiver for events you subscribe to

package main

import (
	"fmt"
	"strconv"

	"gopkg.in/go-playground/webhooks.v3"
	"gopkg.in/go-playground/webhooks.v3/github"
)

const (
	path = "/webhooks"
	port = 3016
)

func main() {

	hook := github.New(&github.Config{Secret: "MyGitHubSuperSecretSecrect...?"})
	hook.RegisterEvents(HandleMultiple, github.ReleaseEvent, github.PullRequestEvent) // Add as many as you want

	err := webhooks.Run(hook, ":"+strconv.Itoa(port), path)
	if err != nil {
		fmt.Println(err)
	}
}

// HandleMultiple handles multiple GitHub events
func HandleMultiple(payload interface{}, header webhooks.Header) {

	fmt.Println("Handling Payload..")

	switch payload.(type) {

	case github.ReleasePayload:
		release := payload.(github.ReleasePayload)
		// Do whatever you want from here...
		fmt.Printf("%+v", release)

	case github.PullRequestPayload:
		pullRequest := payload.(github.PullRequestPayload)
		// Do whatever you want from here...
		fmt.Printf("%+v", pullRequest)
	}
}

Contributing

Pull requests for other services are welcome!

If the changes being proposed or requested are breaking changes, please create an issue for discussion.

License

Distributed under MIT License, please see license file in code for more details.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Handler

func Handler(hook Webhook) http.Handler

Handler returns the webhook http.Handler for use in your own Mux implementation

func Run

func Run(hook Webhook, addr string, path string) error

Run runs a server

func RunServer

func RunServer(s *http.Server, hook Webhook, path string) error

RunServer runs a custom server.

func RunTLSServer

func RunTLSServer(s *http.Server, hook Webhook, path string) error

RunTLSServer runs a custom server with TLS configuration. NOTE: http.Server Handler will be overridden by this library, just set it to nil. Setting the Certificates can be done in the http.Server.TLSConfig.Certificates see example here: https://github.com/go-playground/webhooks/blob/v2/webhooks_test.go#L178

Types

type Header http.Header

Header provides http.Header to minimize imports

type Logger

type Logger interface {
	// Info prints basic information.
	Info(string)
	// Error prints error information.
	Error(string)
	// Debug prints information usefull for debugging.
	Debug(string)
}

Logger allows for customizable logging

var DefaultLog Logger = new(logger)

DefaultLog contains the default logger for webhooks, and prints only info and error messages by default for debugs override DefaultLog or see NewLogger for creating one without debugs.

func NewLogger

func NewLogger(debug bool) Logger

NewLogger returns a new logger for use.

type ProcessPayloadFunc

type ProcessPayloadFunc func(payload interface{}, header Header)

ProcessPayloadFunc is a common function for payload return values

type Provider

type Provider int

Provider defines the type of webhook

const (
	GitHub Provider = iota
	Bitbucket
	GitLab
	Gogs
)

webhooks available providers

func (Provider) String

func (p Provider) String() string

type Webhook

type Webhook interface {
	Provider() Provider
	ParsePayload(w http.ResponseWriter, r *http.Request)
}

Webhook interface defines a webhook to receive events

Directories

Path Synopsis
examples

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL