cerrado @ 49fc8733129028ff4a3537b9eb20f548f0e3e9e6

 1package handler
 2
 3import (
 4	"fmt"
 5	"net/http"
 6
 7	serverconfig "git.gabrielgio.me/cerrado/pkg/config"
 8	"git.gabrielgio.me/cerrado/pkg/ext"
 9	"git.gabrielgio.me/cerrado/pkg/handler/about"
10	"git.gabrielgio.me/cerrado/pkg/handler/auth"
11	"git.gabrielgio.me/cerrado/pkg/handler/git"
12	"git.gabrielgio.me/cerrado/pkg/handler/static"
13	"git.gabrielgio.me/cerrado/pkg/service"
14	"git.gabrielgio.me/cerrado/templates"
15)
16
17// Mount handler gets the requires service and repository to build the handlers
18// This functons wraps the whole handler package and wraps it into one part so
19// its sub package don't leak in other places.
20func MountHandler(
21	gitService *service.GitService,
22	authService *service.AuthService,
23	configRepo *serverconfig.ConfigurationRepository,
24) (http.Handler, error) {
25	var (
26		gitHandler   = git.NewGitHandler(gitService, configRepo)
27		aboutHandler = about.NewAboutHandler(configRepo)
28		loginHandler = auth.NewLoginHandler(authService)
29	)
30
31	staticHandler, err := static.ServeStaticHandler()
32	if err != nil {
33		return nil, err
34	}
35
36	cssStaticHandler, err := static.ServeStaticCSSHandler(
37		configRepo.GetSyntaxHighlight(),
38		configRepo.GetSyntaxHighlightDark(),
39	)
40	if err != nil {
41		return nil, err
42	}
43
44	mux := ext.NewRouter()
45	mux.AddMiddleware(ext.Compress)
46	mux.AddMiddleware(ext.Log)
47	mux.AddMiddleware(ext.VerifyRespository(configRepo))
48
49	if configRepo.IsAuthEnabled() {
50		mux.AddMiddleware(ext.Authenticate(authService))
51		mux.HandleFunc("/login/{$}", loginHandler.Login)
52		mux.HandleFunc("/logout/{$}", loginHandler.Logout)
53	} else {
54		mux.AddMiddleware(ext.DisableAuthentication)
55	}
56
57	mux.HandleFunc("/static/{file}", staticHandler)
58	mux.HandleFunc(fmt.Sprintf("/static/theme%s.css", templates.Slug), cssStaticHandler) // add slug so css file can be cached forever.
59	mux.HandleFunc("/{name}/about/{$}", gitHandler.About)
60	mux.HandleFunc("/{name}", gitHandler.Multiplex)
61	mux.HandleFunc("/{name}/{rest...}", gitHandler.Multiplex)
62	mux.HandleFunc("/{name}/refs/{$}", gitHandler.Refs)
63	mux.HandleFunc("/{name}/tree/{ref}/{rest...}", gitHandler.Tree)
64	mux.HandleFunc("/{name}/blob/{ref}/{rest...}", gitHandler.Blob)
65	mux.HandleFunc("/{name}/log/{ref}/", gitHandler.Log)
66	mux.HandleFunc("/{name}/commit/{ref}/", gitHandler.Commit)
67	mux.HandleFunc("/{name}/ref/{ref}/", gitHandler.Ref)
68	mux.HandleFunc("/{name}/archive/{file}", gitHandler.Archive)
69	mux.HandleFunc("/about", aboutHandler.About)
70	mux.HandleFunc("/", gitHandler.List)
71	return mux.Handler(), nil
72}