aboutsummaryrefslogtreecommitdiff
path: root/internal/git/handler.go
blob: 5a3b3e69cd484ae112160b27034bf076bcfefc0f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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)
	})
}