diff --git a/app/handlers/home.go b/app/handlers/home.go index 92c9e9f..67abc1b 100644 --- a/app/handlers/home.go +++ b/app/handlers/home.go @@ -1,20 +1,15 @@ package handlers import ( - "fiber-sessions/app/data" "fiber-sessions/app/router/requests" "fiber-sessions/app/templates" - - "github.com/gofiber/fiber/v2" ) -func Home(ctx *fiber.Ctx) error { - request := requests.NewRequest(ctx, data.UsersStorage) - +func Home(request *requests.Request) error { pc := templates.PageContext{ Title: "Welcome to the demo", ActivePage: "home", } - Render(ctx, templates.Home(request, pc)) + Render(request.Ctx, templates.Home(request, pc)) return nil } diff --git a/app/handlers/login.go b/app/handlers/login.go index e45af0b..ab3b680 100644 --- a/app/handlers/login.go +++ b/app/handlers/login.go @@ -1,11 +1,8 @@ package handlers import ( - "fiber-sessions/app/data" "fiber-sessions/app/router/requests" "fiber-sessions/app/templates" - - "github.com/gofiber/fiber/v2" ) var pcLogin templates.PageContext = templates.PageContext{ @@ -13,19 +10,16 @@ var pcLogin templates.PageContext = templates.PageContext{ ActivePage: "login", } -func Login(ctx *fiber.Ctx) error { - request := requests.NewRequest(ctx, data.UsersStorage) - Render(ctx, templates.RenderLogin(request, pcLogin)) +func Login(request *requests.Request) error { + Render(request.Ctx, templates.RenderLogin(request, pcLogin)) return nil } -func LoginSubmit(ctx *fiber.Ctx) error { - request := requests.NewRequest(ctx, data.UsersStorage) - +func LoginSubmit(request *requests.Request) error { content := templates.LoginFormValidationContent{ Validated: true, - Username: ctx.FormValue("username"), - Password: ctx.FormValue("password"), + Username: request.Ctx.FormValue("username"), + Password: request.Ctx.FormValue("password"), } hasError := false @@ -42,12 +36,12 @@ func LoginSubmit(ctx *fiber.Ctx) error { if !hasError { err := request.LoginUser(content.Username, content.Password) if err == nil { - ctx.Set("HX-Location", "/") + request.Ctx.Set("HX-Location", "/") return nil } content.LoginError = "Invalid username or password" } - Render(ctx, templates.LoginFormContent(content)) + Render(request.Ctx, templates.LoginFormContent(content)) return nil } diff --git a/app/handlers/logout.go b/app/handlers/logout.go index 498cdc0..d64e5ba 100644 --- a/app/handlers/logout.go +++ b/app/handlers/logout.go @@ -1,16 +1,12 @@ package handlers import ( - "fiber-sessions/app/data" "fiber-sessions/app/router/requests" - - "github.com/gofiber/fiber/v2" ) -func Logout(ctx *fiber.Ctx) error { - request := requests.NewRequest(ctx, data.UsersStorage) +func Logout(request *requests.Request) error { request.Logout() - ctx.Redirect("/") + request.Ctx.Redirect("/") return nil } diff --git a/app/handlers/protected_page.go b/app/handlers/protected_page.go index a01276f..793ebbc 100644 --- a/app/handlers/protected_page.go +++ b/app/handlers/protected_page.go @@ -1,20 +1,15 @@ package handlers import ( - "fiber-sessions/app/data" "fiber-sessions/app/router/requests" "fiber-sessions/app/templates" - - "github.com/gofiber/fiber/v2" ) -func ProtectedPage(ctx *fiber.Ctx) error { - request := requests.NewRequest(ctx, data.UsersStorage) - +func ProtectedPage(request *requests.Request) error { pc := templates.PageContext{ Title: "Protected page", ActivePage: "protected-page", } - Render(ctx, templates.ProtectedPage(request, pc)) + Render(request.Ctx, templates.ProtectedPage(request, pc)) return nil } diff --git a/app/handlers/requesthandler.go b/app/handlers/requesthandler.go new file mode 100644 index 0000000..271f17d --- /dev/null +++ b/app/handlers/requesthandler.go @@ -0,0 +1,5 @@ +package handlers + +import "fiber-sessions/app/router/requests" + +type RequestHandler = func(request *requests.Request) error diff --git a/app/router/requests/requests.go b/app/router/requests/requests.go index 6322eff..16570a5 100644 --- a/app/router/requests/requests.go +++ b/app/router/requests/requests.go @@ -23,7 +23,7 @@ type UserGetter interface { } type Request struct { - ctx *fiber.Ctx + Ctx *fiber.Ctx session *session.Session User *types.User userGetter UserGetter @@ -43,7 +43,7 @@ func NewRequest(ctx *fiber.Ctx, userGetter UserGetter) *Request { } return &Request{ - ctx: ctx, + Ctx: ctx, session: session, userGetter: userGetter, User: user, diff --git a/app/router/router.go b/app/router/router.go index 92d5f65..80ee5ad 100644 --- a/app/router/router.go +++ b/app/router/router.go @@ -1,7 +1,9 @@ package router import ( + "fiber-sessions/app/data" "fiber-sessions/app/handlers" + "fiber-sessions/app/router/requests" "fmt" "strings" @@ -52,12 +54,20 @@ func initLogging(app *fiber.App) { ) } +func requestMaker(handler handlers.RequestHandler) fiber.Handler { + // wrap standard fiber handler and create request object + return func(ctx *fiber.Ctx) error { + request := requests.NewRequest(ctx, data.UsersStorage) + return handler(request) + } +} + func initRouter(app *fiber.App) { - app.Get("/", handlers.Home) - app.Get("/login", handlers.Login) - app.Post("/login", handlers.LoginSubmit) - app.Get("/logout", handlers.Logout) - app.Get("/protected-page", handlers.ProtectedPage) + app.Get("/", requestMaker(handlers.Home)) + app.Get("/login", requestMaker(handlers.Login)) + app.Post("/login", requestMaker(handlers.LoginSubmit)) + app.Get("/logout", requestMaker(handlers.Logout)) + app.Get("/protected-page", requestMaker(handlers.ProtectedPage)) app.Static("/static", STATIC_PATH) }