gophertype/pkg/routes.go

59 řádky
1.6 KiB
Go
Surový Trvalý odkaz Normální zobrazení Historie

2019-11-15 03:03:56 +00:00
package gophertype
import (
"net/http"
2019-11-26 03:55:28 +00:00
"git.kirsle.net/apps/gophertype/pkg/authentication"
"git.kirsle.net/apps/gophertype/pkg/console"
2019-11-15 03:03:56 +00:00
"git.kirsle.net/apps/gophertype/pkg/controllers"
"git.kirsle.net/apps/gophertype/pkg/glue"
"git.kirsle.net/apps/gophertype/pkg/middleware"
2019-11-26 03:55:28 +00:00
"git.kirsle.net/apps/gophertype/pkg/session"
2019-11-15 03:03:56 +00:00
"github.com/gorilla/mux"
)
// SetupRouter sets up the HTTP router.
func (s *Site) SetupRouter() error {
router := mux.NewRouter()
2019-11-26 03:55:28 +00:00
router.Use(session.Middleware)
router.Use(authentication.Middleware)
router.Use(middleware.CSRF)
router.Use(middleware.AgeGate)
console.Debug("Setting up HTTP Router")
2019-11-15 03:03:56 +00:00
for _, route := range glue.GetControllers() {
console.Debug("Register: %+v", route)
2019-11-15 03:03:56 +00:00
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)
2019-11-15 03:03:56 +00:00
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:")
2019-11-15 03:03:56 +00:00
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)
2019-11-15 03:03:56 +00:00
return nil
})
s.mux = router
s.n.UseHandler(router)
return nil
}