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, // TODO we don't want to export all "GIT_HTTP_EXPORT_ALL=1", fmt.Sprintf("REMOTE_USER=%s", uid), }, } gitBackendHandler.ServeHTTP(rw, req) }) }