Merge branch '8784-dir-listings'
[arvados.git] / services / arv-git-httpd / git_handler.go
index f0b98fab72382dfa02c2b12a144e2a6b9f5190c4..d9b08a995b3ab1baee6b3a5b33a3f3f9d084e2b6 100644 (file)
@@ -1,3 +1,7 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
 package main
 
 import (
@@ -5,6 +9,7 @@ import (
        "net"
        "net/http"
        "net/http/cgi"
+       "os"
 )
 
 // gitHandler is an http.Handler that invokes git-http-backend (or
@@ -16,21 +21,29 @@ type gitHandler struct {
 }
 
 func newGitHandler() http.Handler {
+       const glBypass = "GL_BYPASS_ACCESS_CHECKS"
+       const glHome = "GITOLITE_HTTP_HOME"
+       var env []string
+       path := os.Getenv("PATH")
+       if theConfig.GitoliteHome != "" {
+               env = append(env,
+                       glHome+"="+theConfig.GitoliteHome,
+                       glBypass+"=1")
+               path = path + ":" + theConfig.GitoliteHome + "/bin"
+       } else if home, bypass := os.Getenv(glHome), os.Getenv(glBypass); home != "" || bypass != "" {
+               env = append(env, glHome+"="+home, glBypass+"="+bypass)
+               log.Printf("DEPRECATED: Passing through %s and %s environment variables. Use GitoliteHome configuration instead.", glHome, glBypass)
+       }
+       env = append(env,
+               "GIT_PROJECT_ROOT="+theConfig.RepoRoot,
+               "GIT_HTTP_EXPORT_ALL=",
+               "SERVER_ADDR="+theConfig.Listen,
+               "PATH="+path)
        return &gitHandler{
                Handler: cgi.Handler{
                        Path: theConfig.GitCommand,
                        Dir:  theConfig.RepoRoot,
-                       Env: []string{
-                               "GIT_PROJECT_ROOT=" + theConfig.RepoRoot,
-                               "GIT_HTTP_EXPORT_ALL=",
-                               "SERVER_ADDR=" + theConfig.Listen,
-                       },
-                       InheritEnv: []string{
-                               "PATH",
-                               // Needed if GitCommand is gitolite-shell:
-                               "GITOLITE_HTTP_HOME",
-                               "GL_BYPASS_ACCESS_CHECKS",
-                       },
+                       Env:  env,
                        Args: []string{"http-backend"},
                },
        }