--- /dev/null
+module go.stargrave.org/goproxy
+
+go 1.22.0
+
+require github.com/goproxy/goproxy v0.15.1
+
+require golang.org/x/mod v0.14.0 // indirect
--- /dev/null
+github.com/goproxy/goproxy v0.15.1 h1:8WIienqCHsudirStYC+c+zYeqIWLX1biZ1wT9ssb0D0=
+github.com/goproxy/goproxy v0.15.1/go.mod h1:OzNjaRaJSCtp35nVH6V6UvlIhrEOds1lDVgn6ZTEB/0=
+golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
+golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ=
+golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
--- /dev/null
+package main
+
+import (
+ "flag"
+ "log"
+ "net/http"
+ "os"
+ "path"
+
+ "github.com/goproxy/goproxy"
+)
+
+type Logged struct{ goproxy http.Handler }
+
+func (l *Logged) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+ log.Print(r.URL)
+ l.goproxy.ServeHTTP(w, r)
+}
+
+func main() {
+ pth := flag.String("root", "/tmp/goproxy", "Path to storage")
+ bind := flag.String("bind", "[::1]:1234", "Address to listen on")
+ proxy := flag.String("proxy", "direct", "GOPROXY value")
+ sumdb := flag.String("sumdb", "off", "GOSUMDB value")
+ flag.Parse()
+ log.SetFlags(0)
+ log.Fatal(http.ListenAndServe(*bind, &Logged{&goproxy.Goproxy{
+ GoBinEnv: append(
+ os.Environ(),
+ "GOPATH="+path.Join(*pth, "gopath"),
+ "GOPROXY="+*proxy,
+ "GOSUMDB="+*sumdb,
+ ),
+ Cacher: goproxy.DirCacher(*pth),
+ }}))
+}