Skip to content

Commit

Permalink
POC: select data from jsonapi response
Browse files Browse the repository at this point in the history
  • Loading branch information
gabesullice committed Jan 27, 2018
0 parents commit 006e00d
Show file tree
Hide file tree
Showing 38 changed files with 2,524 additions and 0 deletions.
15 changes: 15 additions & 0 deletions Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 26 additions & 0 deletions Gopkg.toml
@@ -0,0 +1,26 @@

# Gopkg.toml example
#
# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md
# for detailed Gopkg.toml documentation.
#
# required = ["github.com/user/thing/cmd/thing"]
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
#
# [[constraint]]
# name = "github.com/user/project"
# version = "1.0.0"
#
# [[constraint]]
# name = "github.com/user/project2"
# branch = "dev"
# source = "github.com/myfork/project2"
#
# [[override]]
# name = "github.com/x/y"
# version = "2.4.0"


[[constraint]]
branch = "master"
name = "github.com/savaki/jq"
83 changes: 83 additions & 0 deletions main.go
@@ -0,0 +1,83 @@
package main

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

"github.com/savaki/jq"
)

type PushProcessor struct {
ops []jq.Op
rw http.ResponseWriter
}

func (p PushProcessor) Header() http.Header {
return p.rw.Header()
}

func (p PushProcessor) WriteHeader(h int) {
p.rw.WriteHeader(h)
}

func (p PushProcessor) Write(b []byte) (int, error) {
for _, op := range p.ops {
if data, err := op.Apply(b); err != nil {
log.Println(err)
} else {
log.Printf("%s\n", data)
}
}
return p.rw.Write(b)
}

func main() {
url, _ := url.Parse(os.Args[1])
log.Printf("Started proxy for %v", url)
backend := httputil.NewSingleHostReverseProxy(url)
backend.Director = chainDirectors(
//logRequest,
//logHeader,
changeHost(backend.Director, url),
)
log.Fatalln(http.ListenAndServe(":8080", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var ops []jq.Op
for _, path := range os.Args[2:] {
ops = append(ops, jq.Must(jq.Parse(path)))
}
backend.ServeHTTP(PushProcessor{
ops: ops,
rw: w,
}, r)
})))
}

func chainDirectors(dirs ...func(*http.Request)) func(*http.Request) {
return func(r *http.Request) {
for k, _ := range dirs {
dirs[k](r)
}
}
}

func changeHost(d func(*http.Request), url *url.URL) func(*http.Request) {
return func(r *http.Request) {
path := r.URL.Path
d(r)
r.Host = url.Host
r.URL = url
r.URL.Path = path
}
}

func logRequest(r *http.Request) {
dump, _ := httputil.DumpRequest(r, false)
log.Printf("%s", dump)
}

func logHeader(r *http.Request) {
log.Printf("%+v", r.Header["X-Push-Request"])
}
33 changes: 33 additions & 0 deletions vendor/github.com/savaki/jq/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

201 changes: 201 additions & 0 deletions vendor/github.com/savaki/jq/LICENSE

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 006e00d

Please sign in to comment.