package server import ( "net/http" "git.runcible.io/learning/ratchet/ui" ) func addBaseMiddleware(app *RatchetApp, next http.Handler, requireAuth bool) http.Handler { var h http.Handler h = next if requireAuth { h = RequireAuthenticationMiddleware(h, app.sessionManager) } h = AuthenticateMiddleware(h, app.sessionManager, app.userService) h = NoSurfMiddleware(h) h = app.sessionManager.LoadAndSave(h) return h } func (a *RatchetApp) Routes() http.Handler { // TODO implement middleware that disables directory listings // This line was superceded by using the embedded filesystem // fileServer := http.FileServer(http.Dir("./ui/static/")) router := http.NewServeMux() // Subtree pattern for static assets // This line was superceded by using the embedded filesystem // router.Handle("GET /static/", http.StripPrefix("/static/", fileServer)) router.Handle("GET /static/", CacheHeaders(http.FileServerFS(ui.Files))) router.Handle("GET /ping", PingHandler()) // /{$} is used to prevent subtree path patterns from acting like a wildcard // resulting in this route requiring an exact match on "/" only // You can only include one HTTP method in a route pattern if you choose // GET will match GET & HEAD http request methods router.Handle("GET /{$}", addBaseMiddleware(a, handleHome(a.logger, a.templateCache, a.sessionManager, a.snippetService), false)) // might be time to swith to github.com/justinas/alice dynamic chain router.Handle("GET /snippet/view/{id}", addBaseMiddleware(a, handleSnippetView(a.logger, a.templateCache, a.sessionManager, a.snippetService), false)) router.Handle("GET /snippet/create", addBaseMiddleware(a, handleSnippetCreateGet(a.templateCache, a.sessionManager), true)) router.Handle("POST /snippet/create", addBaseMiddleware(a, handleSnippetCreatePost(a.logger, a.templateCache, a.formDecoder, a.sessionManager, a.snippetService), true)) // mux.Handle("/something", handleSomething(logger, config)) // mux.Handle("/healthz", handleHealthzPlease(logger)) // mux.Handle("/", http.NotFoundHandler()) router.Handle("GET /user/signup", addBaseMiddleware(a, handleUserSignupGet(a.templateCache, a.sessionManager), false)) router.Handle("POST /user/signup", addBaseMiddleware(a, handleUserSignupPost(a.logger, a.templateCache, a.formDecoder, a.sessionManager, a.userService), false)) router.Handle("GET /user/login", addBaseMiddleware(a, handleUserLoginGet(a.templateCache, a.sessionManager), false)) router.Handle("POST /user/login", addBaseMiddleware(a, handleUserLoginPost(a.logger, a.templateCache, a.sessionManager, a.formDecoder, a.userService), false)) // Requires auth router.Handle("POST /user/logout", addBaseMiddleware(a, handleUserLogoutPost(a.logger, a.sessionManager), true)) return RecoveryMiddleware(RequestLoggingMiddleware(CommonHeaderMiddleware(router), a.logger)) }