package gophertype import ( "net/http" "git.kirsle.net/apps/gophertype/pkg/authentication" "git.kirsle.net/apps/gophertype/pkg/console" "git.kirsle.net/apps/gophertype/pkg/controllers" "git.kirsle.net/apps/gophertype/pkg/glue" "git.kirsle.net/apps/gophertype/pkg/middleware" "git.kirsle.net/apps/gophertype/pkg/session" "github.com/gorilla/mux" ) // SetupRouter sets up the HTTP router. func (s *Site) SetupRouter() error { router := mux.NewRouter() router.Use(session.Middleware) router.Use(authentication.Middleware) router.Use(middleware.CSRF) console.Debug("Setting up HTTP Router") for _, route := range glue.GetControllers() { console.Debug("Register: %+v", route) if len(route.Methods) == 0 { route.Methods = []string{"GET"} } route.Methods = append(route.Methods, "HEAD") if len(route.Middleware) > 0 { console.Debug("%+v has middlewares!", route) handler := route.Middleware[0](http.HandlerFunc(route.Handler)) router.Handle(route.Path, handler).Methods(route.Methods...) } else { router.HandleFunc(route.Path, route.Handler).Methods(route.Methods...) } } router.PathPrefix("/").HandlerFunc(controllers.CatchAllHandler) router.NotFoundHandler = http.HandlerFunc(controllers.CatchAllHandler) console.Debug("Walk the mux.Router:") router.Walk(func(route *mux.Route, router *mux.Router, ancestors []*mux.Route) error { tpl, err1 := route.GetPathTemplate() met, err2 := route.GetMethods() console.Debug("path:%s methods:%s path-err:%s met-err:%s", tpl, met, err1, err2) return nil }) s.mux = router s.n.UseHandler(router) return nil }