diff options
| author | Max Resnick <max@ofmax.li> | 2022-11-11 15:28:22 -0800 |
|---|---|---|
| committer | Max Resnick <max@ofmax.li> | 2022-11-11 15:28:22 -0800 |
| commit | 9317407369c72a43c5f2f0bdf8f006169669cdf8 (patch) | |
| tree | c6cfbf13f1391907d946b348d909456430b15296 /internal/git | |
| parent | 301b7abdf48f843975f02a675fa7995886629eb3 (diff) | |
| download | go-git-server-9317407369c72a43c5f2f0bdf8f006169669cdf8.tar.gz | |
re-org
Diffstat (limited to 'internal/git')
| -rw-r--r-- | internal/git/handler.go | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/internal/git/handler.go b/internal/git/handler.go new file mode 100644 index 0000000..5a3b3e6 --- /dev/null +++ b/internal/git/handler.go @@ -0,0 +1,27 @@ +package git + +import ( + "fmt" + "net/http" + "net/http/cgi" +) + +// GitHttpBackendHandler a handler for git cgi +func GitHttpBackendHandler(reposDir, backendCommand string) http.Handler { + projectDirEnv := fmt.Sprintf("GIT_PROJECT_ROOT=%v", reposDir) + return http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { + ctx := req.Context() + uid := ctx.Value("urn") + gitBackendHandler := &cgi.Handler{ + Path: "/bin/sh", + Args: []string{"-c", backendCommand}, + Dir: ".", + Env: []string{ + projectDirEnv, + "GIT_HTTP_EXPORT_ALL=1", + fmt.Sprintf("REMOTE_USER=%s", uid), + }, + } + gitBackendHandler.ServeHTTP(rw, req) + }) +} |