Skip to content

picatz/web

Repository files navigation

web

🕸 Your friendly neighborhood HTTP client and server

Download

$ go get -u -v github.com/picatz/web
...

Client Usage

package main

import (
  "fmt"

  "github.com/picatz/web"
)

func main() {
  client, _ := web.NewClient()

  resp, err := client.Get("https://www.google.com")

  if err != nil {
    panic(err)
  }

  fmt.Println(resp.StatusCode)
}

Server Usage

package main

import (
  "log"
  "net/http"
  "os"

  "github.com/picatz/web"
)

func main() {
  logger := log.New(os.Stderr, "example-web-server: ", log.LstdFlags)

  helloWorld := func(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Hello World!"))
  }

  server, _ := web.NewServer(
    web.WithRoutes(
      web.Routes{"/": helloWorld},
      web.MiddlewareLogRequest(logger),
      web.MiddlewareLimitRequestBody(web.DefaultRequestBodySize),
    ),
  )

  web.Serve(server, nil, "", "")
}

Server Authentication

A simple Google Oauth2 authenticator implementation is built in. First you'll need to generate and export the following ENV variables:

$ export GOOGLE_OAUTH_CLIENT_ID="..."
$ export GOOGLE_OAUTH_CLIENT_SECRET="..."
package main

import (
  "html/template"
  "log"
  "net/http"
  "os"

  "github.com/picatz/web"
)

func main() {
  logger := log.New(os.Stderr, "test-web-server: ", log.LstdFlags)

  authenticator, _ := web.NewOauth2GoogleAuthenticator(
    web.WithRedirectToLoginOnAuthFailure(),
  )

  tmpl, _ := template.New("homePage").Parse(`
    <!DOCTYPE html>
    <html lang="en">
    <meta charset="utf-8">

    <body>
      Hello {{.}}

      <a href="/auth/google/logout">Logout</a>
    </body>
  `)

  helloWorld := func(w http.ResponseWriter, r *http.Request) {
    v, ok := authenticator.ReadSessionValue(w, r, "name")
    if ok {
      tmpl.Execute(w, v)
    }
  }

  mainRoutes := web.Routes{
    "/": helloWorld,
  }

  server, _ := web.NewServer(
    web.WithRoutes(
      web.JoinRoutes(
        web.AuthenticatedRoutes(authenticator, mainRoutes),
        authenticator.Routes(),
      ),
      web.MiddlewareLogRequest(logger),
    ),
  )

  web.Serve(server, nil, "", "")
}

About

🕸Your friendly neighborhood HTTP client and server for Go

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages