cerrado @ 5dd940eb52b40c78a2078ed0a02440e84bee0306

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