aboutsummaryrefslogtreecommitdiff
path: root/internal/git/handler.go
diff options
context:
space:
mode:
authorMax Resnick <max@ofmax.li>2022-11-11 15:28:22 -0800
committerMax Resnick <max@ofmax.li>2022-11-11 15:28:22 -0800
commit9317407369c72a43c5f2f0bdf8f006169669cdf8 (patch)
treec6cfbf13f1391907d946b348d909456430b15296 /internal/git/handler.go
parent301b7abdf48f843975f02a675fa7995886629eb3 (diff)
downloadgo-git-server-9317407369c72a43c5f2f0bdf8f006169669cdf8.tar.gz
re-org
Diffstat (limited to '')
-rw-r--r--internal/git/handler.go27
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)
+ })
+}