// Reverse proxy package cfg import ( "fmt" "io" "net/http" "net/url" "go.stargrave.org/godlighty" ) func init() { host := "some-proxied-host.com" godlighty.Hosts[host] = &godlighty.HostCfg{ Hooks: []godlighty.Hook{ func(w http.ResponseWriter, r *http.Request) bool { var err error if r.URL, err = url.ParseRequestURI(r.RequestURI); err != nil { panic(err) } r.URL.Scheme = "http" r.URL.Host = "[dead::beaf]" r.RequestURI = "" resp, err := http.DefaultClient.Do(r) if err != nil { fmt.Printf("%s %s \"%s %+q %s\" %d \"%s\" \"%s\"\n", r.RemoteAddr, host, r.Method, godlighty.PathWithQuery(r.URL), r.Proto, http.StatusBadGateway, err.Error(), r.Header.Get("User-Agent"), ) http.Error(w, err.Error(), http.StatusBadGateway) return true } for k, vs := range resp.Header { for _, v := range vs { w.Header().Add(k, v) } } w.WriteHeader(resp.StatusCode) size, _ := io.Copy(w, resp.Body) resp.Body.Close() fmt.Printf("%s %s \"%s %+q %s\" %d %d \"%s\"\n", r.RemoteAddr, host, r.Method, godlighty.PathWithQuery(r.URL), r.Proto, resp.StatusCode, size, r.Header.Get("User-Agent"), ) return true }, }, } }