Skip to content

Commit

Permalink
Merge pull request #10 from go-playground/add-handler-support
Browse files Browse the repository at this point in the history
Add handler support
  • Loading branch information
deankarn authored Apr 27, 2017
2 parents fccbba5 + 0926003 commit c93876b
Show file tree
Hide file tree
Showing 4 changed files with 105 additions and 13 deletions.
39 changes: 39 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
language: go
go:
- 1.7.5
- 1.8.1
- tip
matrix:
allow_failures:
- go: tip

notifications:
email:
recipients: [email protected]
on_success: change
on_failure: always

before_install:
- go get -u github.com/go-playground/overalls
- go get -u github.com/mattn/goveralls
- go get -u golang.org/x/tools/cmd/cover
- go get -u github.com/golang/lint/golint
- go get -u github.com/gordonklaus/ineffassign
- mkdir -p $GOPATH/src/gopkg.in
- ln -s $GOPATH/src/github.com/$TRAVIS_REPO_SLUG $GOPATH/src/gopkg.in/webhooks.v2
- ln -s $GOPATH/src/github.com/$TRAVIS_REPO_SLUG $GOPATH/src/gopkg.in/webhooks.v3

before_script:
- go vet ./...

script:
- gofmt -d -s .
- golint ./...
- ineffassign ./
- go test -v ./...
- go test -race

after_success: |
[ $TRAVIS_GO_VERSION = 1.8.1 ] &&
overalls -project="github.com/go-playground/webhooks" -covermode=count -ignore=.git,examples -debug &&
goveralls -coverprofile=overalls.coverprofile -service travis-ci -repotoken $COVERALLS_TOKEN
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Library webhooks
================
<img align="right" src="https://raw.githubusercontent.com/go-playground/webhooks/v3/logo.png">![Project status](https://img.shields.io/badge/version-3.0.0-green.svg)
[![Build Status](https://semaphoreci.com/api/v1/joeybloggs/webhooks/branches/v3/badge.svg)](https://semaphoreci.com/joeybloggs/webhooks)
<img align="right" src="https://raw.githubusercontent.com/go-playground/webhooks/v3/logo.png">![Project status](https://img.shields.io/badge/version-3.1.0-green.svg)
[![Build Status](https://travis-ci.org/go-playground/webhooks.svg?branch=v3)](https://travis-ci.org/go-playground/webhooks)
[![Coverage Status](https://coveralls.io/repos/go-playground/webhooks/badge.svg?branch=v3&service=github)](https://coveralls.io/github/go-playground/webhooks?branch=v3)
[![Go Report Card](https://goreportcard.com/badge/go-playground/webhooks)](https://goreportcard.com/report/go-playground/webhooks)
[![GoDoc](https://godoc.org/gopkg.in/go-playground/webhooks.v3?status.svg)](https://godoc.org/gopkg.in/go-playground/webhooks.v3)
Expand Down
36 changes: 25 additions & 11 deletions webhooks.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,18 +35,27 @@ type Webhook interface {
}

type server struct {
hook Webhook
path string
hook Webhook
path string
includePathCheck bool
}

// ProcessPayloadFunc is a common function for payload return values
type ProcessPayloadFunc func(payload interface{}, header Header)

// Handler returns the webhook http.Handler for use in your own Mux implementation
func Handler(hook Webhook) http.Handler {
return &server{
hook: hook,
}
}

// Run runs a server
func Run(hook Webhook, addr string, path string) error {
srv := &server{
hook: hook,
path: path,
hook: hook,
path: path,
includePathCheck: true,
}

s := &http.Server{Addr: addr, Handler: srv}
Expand All @@ -58,8 +67,9 @@ func Run(hook Webhook, addr string, path string) error {
func RunServer(s *http.Server, hook Webhook, path string) error {

srv := &server{
hook: hook,
path: path,
hook: hook,
path: path,
includePathCheck: true,
}

s.Handler = srv
Expand All @@ -74,8 +84,9 @@ func RunServer(s *http.Server, hook Webhook, path string) error {
func RunTLSServer(s *http.Server, hook Webhook, path string) error {

srv := &server{
hook: hook,
path: path,
hook: hook,
path: path,
includePathCheck: true,
}

s.Handler = srv
Expand All @@ -91,9 +102,12 @@ func (s *server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
http.Error(w, "405 Method not allowed", http.StatusMethodNotAllowed)
return
}
if r.URL.Path != s.path {
http.Error(w, "404 Not found", http.StatusNotFound)
return

if s.includePathCheck {
if r.URL.Path != s.path {
http.Error(w, "404 Not found", http.StatusNotFound)
return
}
}

s.hook.ParsePayload(w, r)
Expand Down
39 changes: 39 additions & 0 deletions webhooks_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import (
"testing"
"time"

"net/http/httptest"

. "gopkg.in/go-playground/assert.v1"
)

Expand Down Expand Up @@ -47,6 +49,43 @@ func TestMain(m *testing.M) {
// teardown
}

func TestHandler(t *testing.T) {

mux := http.NewServeMux()
mux.Handle("/webhooks", Handler(fakeHook))

s := httptest.NewServer(Handler(fakeHook))
defer s.Close()

payload := "{}"

req, err := http.NewRequest("POST", s.URL+"/webhooks", bytes.NewBuffer([]byte(payload)))
req.Header.Set("Content-Type", "application/json")

Equal(t, err, nil)

client := &http.Client{}
resp, err := client.Do(req)
Equal(t, err, nil)

defer resp.Body.Close()

Equal(t, resp.StatusCode, http.StatusOK)

// Test BAD METHOD
req, err = http.NewRequest("GET", s.URL+"/webhooks", bytes.NewBuffer([]byte(payload)))
req.Header.Set("Content-Type", "application/json")

Equal(t, err, nil)

resp, err = client.Do(req)
Equal(t, err, nil)

defer resp.Body.Close()

Equal(t, resp.StatusCode, http.StatusMethodNotAllowed)
}

func TestRun(t *testing.T) {

go Run(fakeHook, "127.0.0.1:3006", "/webhooks")
Expand Down

0 comments on commit c93876b

Please sign in to comment.