Refactored application creation
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
32190b7036
commit
37404b4821
@ -1,45 +1,54 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
|
||||
"git.runcible.io/learning/ratchet/internal/model"
|
||||
"github.com/alexedwards/scs/v2"
|
||||
"github.com/go-playground/form/v4"
|
||||
"git.runcible.io/learning/ratchet/ui"
|
||||
)
|
||||
|
||||
func addRoutes(mux *http.ServeMux,
|
||||
logger *slog.Logger,
|
||||
tc *TemplateCache,
|
||||
db *sql.DB,
|
||||
fd *form.Decoder,
|
||||
sm *scs.SessionManager,
|
||||
userService *model.UserService,
|
||||
snippetService *model.SnippetService) http.Handler {
|
||||
func addBaseMiddleware(app *RatchetApp, next http.Handler, requireAuth bool) http.Handler {
|
||||
var h http.Handler
|
||||
if requireAuth {
|
||||
h = RequireAuthenticationMiddleware(next, app.sessionManager)
|
||||
}
|
||||
h = AuthenticateMiddleware(next, 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()
|
||||
|
||||
mux.Handle("GET /ping", PingHandler())
|
||||
// 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/", 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
|
||||
mux.Handle("GET /{$}", sm.LoadAndSave(NoSurfMiddleware(AuthenticateMiddleware(handleHome(logger, tc, sm, snippetService), sm, userService)))) // might be time to swith to github.com/justinas/alice dynamic chain
|
||||
mux.Handle("GET /snippet/view/{id}", sm.LoadAndSave(NoSurfMiddleware(AuthenticateMiddleware(handleSnippetView(logger, tc, sm, snippetService), sm, userService))))
|
||||
mux.Handle("GET /snippet/create", sm.LoadAndSave(NoSurfMiddleware(AuthenticateMiddleware(RequireAuthenticationMiddleware(handleSnippetCreateGet(tc, sm), sm), sm, userService))))
|
||||
mux.Handle("POST /snippet/create", sm.LoadAndSave(NoSurfMiddleware(AuthenticateMiddleware(RequireAuthenticationMiddleware(handleSnippetCreatePost(logger, tc, fd, sm, snippetService), sm), sm, userService))))
|
||||
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())
|
||||
|
||||
mux.Handle("GET /user/signup", sm.LoadAndSave(NoSurfMiddleware(AuthenticateMiddleware(handleUserSignupGet(tc, sm), sm, userService))))
|
||||
mux.Handle("POST /user/signup", sm.LoadAndSave(NoSurfMiddleware(AuthenticateMiddleware(handleUserSignupPost(logger, tc, fd, sm, userService), sm, userService))))
|
||||
mux.Handle("GET /user/login", sm.LoadAndSave(NoSurfMiddleware(AuthenticateMiddleware(handleUserLoginGet(tc, sm), sm, userService))))
|
||||
mux.Handle("POST /user/login", sm.LoadAndSave(NoSurfMiddleware(AuthenticateMiddleware(handleUserLoginPost(logger, tc, sm, fd, userService), sm, userService))))
|
||||
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
|
||||
mux.Handle("POST /user/logout", sm.LoadAndSave(NoSurfMiddleware(AuthenticateMiddleware(RequireAuthenticationMiddleware(handleUserLogoutPost(logger, sm), sm), sm, userService))))
|
||||
|
||||
return mux
|
||||
router.Handle("POST /user/logout", addBaseMiddleware(a, handleUserLogoutPost(a.logger, a.sessionManager), true))
|
||||
return RecoveryMiddleware(RequestLoggingMiddleware(CommonHeaderMiddleware(router), a.logger))
|
||||
}
|
||||
|
Loading…
Reference in New Issue