GoProxy middleware

Middleware for go modules proxy, inspired by https://github.com/goproxyio/goproxy

Usage

How to set up a middleware:

  1. Initiate router:
    r, err := goproxy.NewRouter()
  2. Add needed handlers via
    err := r.AddRoute(plugin)
    for example:
    regular, err := vcs.NewPlugin(cacheDir)
    if err != nil {
        log.Fatal(err)
    }
    if err := r.AddRoute("", regular); err != nil {
        log.Fatal(err)
    }
    this library currently supports vcs which is pretty much like regular go get (regular in the example), gitlab which works upon gitlab's v4 API and delegation to another go proxy, see source/...
  3. Generate middleware:
    var m http.Handler = goproxy.Middleware(r)
    Now you can use it in your HTTP server See examples/goproxy for details

Example

There's an example which supports regular go get-like module retrieval and gitlab.

  1. Build it:
    go build ./examples/goproxy
  2. Start it:
    ./goproxy -cache-dir . -gitlab https://gitlab.com/api/v4 -listen 0.0.0.0:8081
  3. Set up environment:
    export GO111MODULE=on
    export GOPROXY=http://<gitlab private token>@localhost:8081
    Remember, you must generate gitlab private token first otherwise gitlab may reject your requests