* Remove Negroni in favor of the standard net/http server. * Remove gorilla/mux in favor of the standard net/http NewServeMux. * Remove gorilla/sessions in favor of Redis session_id cookie. * Remove the hacky glue controllers setup in favor of regular defined routes in the router.go file directly. * Update all Go dependencies for Go 1.24 * Move and centralize all the HTTP middlewares. * Add middlewares for Logging and Recovery to replace Negroni's.
61 lines
2.6 KiB
Go
61 lines
2.6 KiB
Go
package gophertype
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"git.kirsle.net/apps/gophertype/pkg/controllers"
|
|
"git.kirsle.net/apps/gophertype/pkg/middleware"
|
|
"git.kirsle.net/apps/gophertype/pkg/models"
|
|
)
|
|
|
|
// SetupRouter sets up the HTTP router.
|
|
func (s *Site) SetupRouter() error {
|
|
router := http.NewServeMux()
|
|
|
|
router.HandleFunc("/", controllers.CatchAllHandler)
|
|
router.HandleFunc("/age-verify", controllers.AgeVerify)
|
|
router.HandleFunc("/login", controllers.Login)
|
|
router.HandleFunc("GET /logout", controllers.Logout)
|
|
router.HandleFunc("/comments", controllers.PostComment)
|
|
router.HandleFunc("/comments/subscription", controllers.ManageSubscription)
|
|
router.HandleFunc("/comments/quick-delete", controllers.CommentQuickDelete)
|
|
router.HandleFunc("/contact", controllers.ContactHandler)
|
|
router.HandleFunc("GET /blog", controllers.BlogIndex(models.Public, false))
|
|
router.HandleFunc("GET /tagged", controllers.TagIndex)
|
|
router.HandleFunc("GET /tagged/{tag}", controllers.BlogIndex(models.Public, true))
|
|
router.HandleFunc("GET /archive", controllers.BlogArchive)
|
|
router.HandleFunc("GET /blog/random", controllers.BlogRandom)
|
|
router.HandleFunc("/ask", controllers.QuestionHandler)
|
|
router.HandleFunc("GET /blog.rss", controllers.RSSFeed)
|
|
router.HandleFunc("GET /blog.atom", controllers.RSSFeed)
|
|
router.HandleFunc("GET /blog.json", controllers.RSSFeed)
|
|
router.HandleFunc("GET /blog/search", controllers.BlogSearch)
|
|
|
|
// Initial setup page
|
|
router.Handle("/admin/setup", middleware.ExampleMiddleware(http.HandlerFunc(controllers.InitialSetup)))
|
|
|
|
// Login Required
|
|
router.HandleFunc("/admin", controllers.AdminIndex)
|
|
router.HandleFunc("/admin/users", controllers.AdminIndex)
|
|
router.Handle("GET /blog/drafts", middleware.LoginRequired(controllers.BlogIndex(models.Draft, false)))
|
|
router.Handle("GET /blog/private", middleware.LoginRequired(controllers.BlogIndex(models.Private, false)))
|
|
router.Handle("GET /blog/unlisted", middleware.LoginRequired(controllers.BlogIndex(models.Unlisted, false)))
|
|
router.Handle("/blog/edit", middleware.LoginRequired(http.HandlerFunc(controllers.EditPost)))
|
|
router.Handle("/ask/answer", middleware.LoginRequired(http.HandlerFunc(controllers.AnswerHandler)))
|
|
router.Handle("/admin/upload", middleware.LoginRequired(http.HandlerFunc(controllers.UploadHandler)))
|
|
|
|
// Global middlewares.
|
|
var (
|
|
withCSRF = middleware.CSRF(router)
|
|
withSession = middleware.Session(withCSRF)
|
|
withAuthentication = middleware.Authentication(withSession)
|
|
withAgeGate = middleware.AgeGate(withAuthentication)
|
|
withRecovery = middleware.Recovery(withAgeGate)
|
|
withLogger = middleware.Logging(withRecovery)
|
|
)
|
|
|
|
s.mux = withLogger
|
|
|
|
return nil
|
|
}
|