1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
14 "git.curoverse.com/arvados.git/sdk/go/arvados"
15 "git.curoverse.com/arvados.git/sdk/go/config"
16 "github.com/coreos/go-systemd/daemon"
19 // Server configuration
26 ManagementToken string
29 var theConfig = defaultConfig()
31 func defaultConfig() *Config {
34 GitCommand: "/usr/bin/git",
35 RepoRoot: "/var/lib/arvados/git/repositories",
40 const defaultCfgPath = "/etc/arvados/git-httpd/git-httpd.yml"
41 const deprecated = " (DEPRECATED -- use config file instead)"
42 flag.StringVar(&theConfig.Listen, "address", theConfig.Listen,
43 "Address to listen on, \"host:port\" or \":port\"."+deprecated)
44 flag.StringVar(&theConfig.GitCommand, "git-command", theConfig.GitCommand,
45 "Path to git or gitolite-shell executable. Each authenticated request will execute this program with a single argument, \"http-backend\"."+deprecated)
46 flag.StringVar(&theConfig.RepoRoot, "repo-root", theConfig.RepoRoot,
47 "Path to git repositories."+deprecated)
48 flag.StringVar(&theConfig.GitoliteHome, "gitolite-home", theConfig.GitoliteHome,
49 "Value for GITOLITE_HTTP_HOME environment variable. If not empty, GL_BYPASS_ACCESS_CHECKS=1 will also be set."+deprecated)
51 cfgPath := flag.String("config", defaultCfgPath, "Configuration file `path`.")
52 dumpConfig := flag.Bool("dump-config", false, "write current configuration to stdout and exit (useful for migrating from command line flags to config file)")
54 flag.StringVar(&theConfig.ManagementToken, "management-token", theConfig.ManagementToken,
55 "Authorization token to be included in all health check requests.")
60 err := config.LoadFile(theConfig, *cfgPath)
62 h := os.Getenv("ARVADOS_API_HOST")
63 if h == "" || !os.IsNotExist(err) || *cfgPath != defaultCfgPath {
66 log.Print("DEPRECATED: No config file found, but ARVADOS_API_HOST environment variable is set. Please use a config file instead.")
67 theConfig.Client.APIHost = h
68 if regexp.MustCompile("^(?i:1|yes|true)$").MatchString(os.Getenv("ARVADOS_API_HOST_INSECURE")) {
69 theConfig.Client.Insecure = true
71 if j, err := json.MarshalIndent(theConfig, "", " "); err == nil {
72 log.Print("Current configuration:\n", string(j))
77 log.Fatal(config.DumpAndExit(theConfig))
81 if err := srv.Start(); err != nil {
84 if _, err := daemon.SdNotify(false, "READY=1"); err != nil {
85 log.Printf("Error notifying init daemon: %v", err)
87 log.Println("Listening at", srv.Addr)
88 log.Println("Repository root", theConfig.RepoRoot)
89 if err := srv.Wait(); err != nil {