Skip to content

Conversation

@odeke-em
Copy link
Member

Fixes #29.

Implemented a package for Uber webhook reception and verification.
The example features a fully runnable HTTPS server with Let's Encrypt
certs, just change the domains and the rest is simple. Make sure
to set in your environment

  • Client ID: UBER_APP_OAUTH2_CLIENT_ID
  • Client Secret: UBER_APP_OAUTH2_CLIENT_SECRET

Sample runnable example pasted here for easy lookup

package main

import (
  "flag"
  "fmt"
  "log"
  "net/http"

  "golang.org/x/crypto/acme/autocert"

  "github.com/orijtech/otils"
  "github.com/orijtech/uber/uberhook"
)

func main() {
  var http1 bool
  var http1Port int
  flag.BoolVar(&http1, "http1", false, "run the server as an HTTP1
server: useful for local dev")
  flag.IntVar(&http1Port, "port", 8888, "the port to run the HTTP1
server on")
  flag.Parse()

  webhook, err := uberhook.New()
  if err != nil {
    log.Fatal(err)
  }

  mux := http.NewServeMux()
  mux.Handle("/", webhook.Middleware(http.HandlerFunc(func(w
http.ResponseWriter, r *http.Request) {
    defer r.Body.Close()
    event, err := uberhook.FparseEvent(r.Body)

    if err != nil {
      http.Error(w, err.Error(), http.StatusBadRequest)
      return
    }
    log.Printf("Got an event from Uber: %#v\n", event)
    fmt.Fprintf(w, "Successfully retrieved event!\n")
  })))

  if http1 {
    addr := fmt.Sprintf(":%d", http1Port)
    log.Printf("Running as an http1 server on: %s\n", addr)
    if err := http.ListenAndServe(addr, mux); err != nil {
      log.Fatal(err)
    }
    return
  }

  log.Printf("Running as an http2 server!")
  go func() {
    nonHTTPSHandler :=
otils.RedirectAllTrafficTo("https://uberhook.orijtech.com")
    if err := http.ListenAndServe(":80", nonHTTPSHandler); err != nil {
      log.Fatal(err)
    }
  }()

  domains := []string{
    "uberhook.orijtech.com",
    "www.uberhook.orijtech.com",
  }

  log.Fatal(http.Serve(autocert.NewListener(domains...), mux))
}

Fixes #29.

Implemented a package for Uber webhook reception and verification.
The example features a fully runnable HTTPS server with Let's Encrypt
certs, just change the domains and the rest is simple. Make sure
to set in your environment
* Client ID: `UBER_APP_OAUTH2_CLIENT_ID`
* Client Secret: `UBER_APP_OAUTH2_CLIENT_SECRET`

Sample runnable example pasted here for easy lookup
```go
package main

import (
  "flag"
  "fmt"
  "log"
  "net/http"

  "golang.org/x/crypto/acme/autocert"

  "github.com/orijtech/otils"
  "github.com/orijtech/uber/uberhook"
)

func main() {
  var http1 bool
  var http1Port int
  flag.BoolVar(&http1, "http1", false, "run the server as an HTTP1
server: useful for local dev")
  flag.IntVar(&http1Port, "port", 8888, "the port to run the HTTP1
server on")
  flag.Parse()

  webhook, err := uberhook.New()
  if err != nil {
    log.Fatal(err)
  }

  mux := http.NewServeMux()
  mux.Handle("/", webhook.Middleware(http.HandlerFunc(func(w
http.ResponseWriter, r *http.Request) {
    defer r.Body.Close()
    event, err := uberhook.FparseEvent(r.Body)

    if err != nil {
      http.Error(w, err.Error(), http.StatusBadRequest)
      return
    }
    log.Printf("Got an event from Uber: %#v\n", event)
    fmt.Fprintf(w, "Successfully retrieved event!\n")
  })))

  if http1 {
    addr := fmt.Sprintf(":%d", http1Port)
    log.Printf("Running as an http1 server on: %s\n", addr)
    if err := http.ListenAndServe(addr, mux); err != nil {
      log.Fatal(err)
    }
    return
  }

  log.Printf("Running as an http2 server!")
  go func() {
    nonHTTPSHandler :=
otils.RedirectAllTrafficTo("https://uberhook.orijtech.com")
    if err := http.ListenAndServe(":80", nonHTTPSHandler); err != nil {
      log.Fatal(err)
    }
  }()

  domains := []string{
    "uberhook.orijtech.com",
    "www.uberhook.orijtech.com",
  }

  log.Fatal(http.Serve(autocert.NewListener(domains...), mux))
}
```
@odeke-em odeke-em merged commit e3c047f into master Jun 10, 2017
@odeke-em odeke-em deleted the webhooks branch July 12, 2017 06:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants