From c3a2afa0246ee1cc34409ad83c9333e2b0cb1019 Mon Sep 17 00:00:00 2001 From: sanine Date: Sun, 23 Apr 2023 20:52:16 -0500 Subject: initial commit --- main.go | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 main.go (limited to 'main.go') diff --git a/main.go b/main.go new file mode 100644 index 0000000..bd85dcc --- /dev/null +++ b/main.go @@ -0,0 +1,72 @@ +package main + +import ( + "fmt" + "io" + "strings" + "net" + "net/http" + "net/url" + log "github.com/sirupsen/logrus" +) + + +//type Endpoint struct { +// path string +// address string +//} +// +// +//func proxy(w http.ResponseWriter, req *http.Request, end Endpoint) { +//} +// +//func makeProxiedRequest(w http.ResponseWriter, req *http.Request, end Endpoint) { +// +//} +// + +func main() { + const addr = "localhost:3333" + log.Info("configuring reverse proxy...") + origin, err := url.Parse("http://localhost:8000") + if err != nil { + log.Fatal(err) + } + log.Infof("listening on %v", addr) + http.ListenAndServe(addr, http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + req.Host = origin.Host + req.URL.Host = origin.Host + req.URL.Scheme = origin.Scheme + req.RequestURI = "" + // set X-Forwarded-For + forwardedFor, _, _ := net.SplitHostPort(req.RemoteAddr) + req.Header.Set("X-Forwarded-For", forwardedFor) + response, err := http.DefaultClient.Do(req) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + fmt.Fprintf(w, "%v", err) + log.Fatal(err) + } + + // copy header + for key, values := range response.Header { + for _, value := range values { + w.Header().Add(key, value) + } + } + + // get trailer keys + trailerKeys := []string{} + for key := range response.Trailer { + trailerKeys = append(trailerKeys, key) + } + if (len(trailerKeys) > 0) { + w.Header().Set("Trailer", strings.Join(trailerKeys, ",")) + } + + w.WriteHeader(response.StatusCode) + + // copy body + io.Copy(w, response.Body) + })) +} -- cgit v1.2.1