commit 8bfae2924c4b8a3fa3b931d18d5be214108f39c2 Author: Bel LaPointe <153096461+breel-render@users.noreply.github.com> Date: Mon Nov 11 15:23:17 2024 -0700 mvp diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..39b2212 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module gitea/json-adapter + +go 1.22.3 diff --git a/main.go b/main.go new file mode 100644 index 0000000..f230201 --- /dev/null +++ b/main.go @@ -0,0 +1,59 @@ +package main + +import ( + "bytes" + "encoding/json" + "flag" + "io" + "log" + "net/http" + "net/http/httputil" + "net/url" + "os" + "strconv" + "text/template" +) + +func main() { + fs := flag.NewFlagSet(os.Args[0], flag.ContinueOnError) + p := fs.Int("p", 28080, "port") + t := fs.String("t", "{{ . }}", "template") + y := fs.String("y", "http://localhost:41912", "target") + if err := fs.Parse(os.Args[1:]); err != nil { + panic(err) + } + + tmpl, err := template.New("").Parse(*t) + if err != nil { + panic(err) + } + + u, err := url.Parse(*y) + if err != nil { + panic(err) + } + proxy := httputil.NewSingleHostReverseProxy(u) + + handle := func(w http.ResponseWriter, r *http.Request) error { + var v interface{} + if err := json.NewDecoder(r.Body).Decode(&v); err != nil { + return err + } + buff := bytes.NewBuffer(nil) + if err := tmpl.Execute(buff, v); err != nil { + return err + } + r.Body = io.NopCloser(buff) + r.ContentLength = int64(len(buff.Bytes())) + proxy.ServeHTTP(w, r) + return nil + } + log.Println("listening on", *p) + if err := http.ListenAndServe(":"+strconv.Itoa(*p), http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if err := handle(w, r); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + } + })); err != nil { + panic(err) + } +}