func main() { dry := flag.Bool("dry", false, "dry-run: does not start the server (for testing purpose)") configFile := flag.String("config", "/etc/gandalf.conf", "Gandalf configuration file") gVersion := flag.Bool("version", false, "Print version and exit") flag.Parse() if *gVersion { fmt.Printf("gandalf-webserver version %s\n", version) return } log.Printf("Opening config file: %s ...\n", *configFile) err := config.ReadAndWatchConfigFile(*configFile) if err != nil { msg := `Could not open gandalf config file at %s (%s). For an example, see: gandalf/etc/gandalf.conf Note that you can specify a different config file with the --config option -- e.g.: --config=./etc/gandalf.conf` log.Fatalf(msg, *configFile, err) } log.Printf("Successfully read config file: %s\n", *configFile) router := api.SetupRouter() bind, err := config.GetString("bind") if err != nil { var perr error bind, perr = config.GetString("webserver:port") if perr != nil { panic(err) } } if !*dry { log.Fatal(http.ListenAndServe(bind, router)) } }
func main() { dry := flag.Bool("dry", false, "dry-run: does not start the server (for testing purpose)") configFile := flag.String("config", "/etc/gandalf.conf", "Gandalf configuration file") gVersion := flag.Bool("version", false, "Print version and exit") flag.Parse() if *gVersion { fmt.Printf("gandalf-webserver version %s\n", version) return } err := config.ReadAndWatchConfigFile(*configFile) if err != nil { msg := `Could not find gandalf config file. Searched on %s. For an example conf check gandalf/etc/gandalf.conf file.\n %s` log.Panicf(msg, *configFile, err) } router := api.SetupRouter() bind, err := config.GetString("bind") if err != nil { var perr error bind, perr = config.GetString("webserver:port") if perr != nil { panic(err) } } if !*dry { log.Fatal(http.ListenAndServe(bind, router)) } }
func main() { dry := flag.Bool("dry", false, "dry-run: does not start the server (for testing purpose)") configFile := flag.String("config", "/etc/gandalf.conf", "Gandalf configuration file") gVersion := flag.Bool("version", false, "Print version and exit") flag.Parse() if *gVersion { fmt.Printf("gandalf-webserver version %s\n", version) return } err := config.ReadAndWatchConfigFile(*configFile) if err != nil { msg := `Could not find gandalf config file. Searched on %s. For an example conf check gandalf/etc/gandalf.conf file.\n %s` log.Panicf(msg, *configFile, err) } router := pat.New() router.Post("/user/:name/key", http.HandlerFunc(api.AddKey)) router.Del("/user/:name/key/:keyname", http.HandlerFunc(api.RemoveKey)) router.Get("/user/:name/keys", http.HandlerFunc(api.ListKeys)) router.Post("/user", http.HandlerFunc(api.NewUser)) router.Del("/user/:name", http.HandlerFunc(api.RemoveUser)) router.Post("/repository", http.HandlerFunc(api.NewRepository)) router.Post("/repository/grant", http.HandlerFunc(api.GrantAccess)) router.Del("/repository/revoke", http.HandlerFunc(api.RevokeAccess)) router.Del("/repository/:name", http.HandlerFunc(api.RemoveRepository)) router.Get("/repository/:name", http.HandlerFunc(api.GetRepository)) router.Put("/repository/:name", http.HandlerFunc(api.RenameRepository)) router.Get("/repository/:name/archive/:ref.:format", http.HandlerFunc(api.GetArchive)) router.Get("/repository/:name/contents", http.HandlerFunc(api.GetFileContents)) router.Get("/repository/:name/tree/:path", http.HandlerFunc(api.GetTree)) router.Get("/repository/:name/tree", http.HandlerFunc(api.GetTree)) router.Get("/repository/:name/branch", http.HandlerFunc(api.GetBranch)) router.Get("/repository/:name/tag", http.HandlerFunc(api.GetTag)) router.Get("/repository/:name/diff/commits", http.HandlerFunc(api.GetDiff)) router.Get("/healthcheck/", http.HandlerFunc(api.HealthCheck)) router.Post("/hook/:name", http.HandlerFunc(api.AddHook)) bind, err := config.GetString("bind") if err != nil { var perr error bind, perr = config.GetString("webserver:port") if perr != nil { panic(err) } } if !*dry { log.Fatal(http.ListenAndServe(bind, router)) } }
func main() { dry := flag.Bool("dry", false, "dry-run: does not start the server (for testing purpose)") configFile := flag.String("config", "/etc/gandalf.conf", "Gandalf configuration file") gVersion := flag.Bool("version", false, "Print version and exit") flag.Parse() if *gVersion { fmt.Printf("gandalf-webserver version %s\n", version) return } log.Debugf("Opening config file: %s ...\n", *configFile) err := config.ReadAndWatchConfigFile(*configFile) if err != nil { msg := `Could not open gandalf config file at %s (%s). For an example, see: gandalf/etc/gandalf.conf Note that you can specify a different config file with the --config option -- e.g.: --config=./etc/gandalf.conf` log.Fatalf(msg, *configFile, err) } log.Init() log.Debugf("Successfully read config file: %s\n", *configFile) router := api.SetupRouter() n := negroni.New() n.Use(api.NewLoggerMiddleware()) n.Use(api.NewResponseHeaderMiddleware("Server", "gandalf-webserver/"+version)) n.Use(api.NewResponseHeaderMiddleware("Cache-Control", "private, max-age=0")) n.Use(api.NewResponseHeaderMiddleware("Expires", "-1")) n.UseHandler(router) bind, err := config.GetString("bind") if err != nil { var perr error bind, perr = config.GetString("webserver:port") if perr != nil { panic(err) } } if !*dry { bareLocation, err := config.GetString("git:bare:location") if err != nil { panic("You should configure a git:bare:location for gandalf.") } fmt.Printf("Repository location: %s\n", bareLocation) fmt.Printf("gandalf-webserver %s listening on %s\n", version, bind) http.ListenAndServe(bind, router) } }