diff options
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/main.go | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/cmd/main.go b/cmd/main.go index bda8bf6..0cd9eec 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -11,6 +11,7 @@ import ( "git.ofmax.li/go-git-server/internal/admin" "git.ofmax.li/go-git-server/internal/authz" "git.ofmax.li/go-git-server/internal/git" + "git.ofmax.li/go-git-server/internal/modules" ) var ( @@ -19,6 +20,7 @@ var ( backendCommand string loggingLevel string addr string + serverHost string modelPath string policyPath string serverConfigPath string @@ -87,16 +89,26 @@ func main() { identities.Register(id, name) } + // Create git and module handlers + gitHandler := git.GitHttpBackendHandler(reposDir, backendCommand) + moduleHandler := modules.NewModuleHandler(reposDir, serverHost, adminSvc.Conf) + router := http.NewServeMux() // TODO we don't want to use a global // de-reference args - router.Handle("/mgmt/", admin.Hooks(adminSvc, git.GitHttpBackendHandler(reposDir, backendCommand))) - router.Handle("/", git.GitHttpBackendHandler(reposDir, backendCommand)) - mux := authz.Authentication(tokens, identities, authz.Authorization(adminSvc, router)) + router.Handle("/mgmt/", admin.Hooks(adminSvc, gitHandler)) + + // Apply authentication to git operations + authenticatedGitHandler := authz.Authentication(tokens, identities, authz.Authorization(adminSvc, gitHandler)) + + // Apply module middleware (handles module requests directly, passes git requests to auth) + moduleMiddleware := modules.ModuleMiddleware(moduleHandler, authenticatedGitHandler) + + router.Handle("/", moduleMiddleware) server := &http.Server{ Addr: addr, ReadHeaderTimeout: 5 * time.Second, - Handler: mux, + Handler: router, } slog.Error("error while running exiting", slog.Any("error", server.ListenAndServe())) os.Exit(1) @@ -110,6 +122,7 @@ func init() { flag.StringVar(&backendCommand, "c", "git http-backend", "CGI binary to execute") flag.StringVar(&loggingLevel, "e", logLevel, "set log level") flag.StringVar(&addr, "l", ":8080", "Address/port to listen on") + flag.StringVar(&serverHost, "h", "localhost:8080", "Public hostname for Go module discovery") flag.StringVar(&modelPath, "m", "./auth_model.ini", "casbin authentication model") flag.StringVar(&policyPath, "p", "./policy.csv", "casbin auth policy") flag.StringVar(&tokenFilePath, "t", "./tokens.csv", "casbin auth policy") |