Files
fiber-sessions/app/router/router.go
2024-02-08 23:32:58 +01:00

94 lines
1.9 KiB
Go

package router
import (
"fiber-sessions/app/data"
"fiber-sessions/app/handlers"
"fiber-sessions/app/router/requests"
"fmt"
"strings"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cors"
"github.com/gofiber/fiber/v2/middleware/logger"
)
const (
APPHOST string = "127.0.0.1"
APPPORT int = 9000
STATIC_PATH string = "./static"
)
func initApp() *fiber.App {
app := fiber.New(fiber.Config{
CaseSensitive: true,
StrictRouting: true,
})
return app
}
func initCorsMiddleware(app *fiber.App) {
allowHeaders := []string{
"Content-Type",
"Content-Length",
"Accept-Encoding",
"X-CSRF-Token",
"Authorization",
"accept",
"origin",
"Cache-Control",
"X-Requested-With",
"x-timezone",
"Access-Control-Allow-Origin",
"Access-Control-Max-Age",
}
app.Use(cors.New(cors.Config{
AllowOrigins: "*",
AllowHeaders: strings.Join(allowHeaders[:], ", "),
}))
}
func initLogging(app *fiber.App) {
app.Use(
logger.New(), // add Logger middleware
)
}
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)
response := handler(request)
if request.UpdateSession {
if err := request.Session.Save(); err != nil {
panic(err)
}
}
return response
}
}
func initRouter(app *fiber.App) {
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)
}
func Serve() {
serverAddr := fmt.Sprintf("%s:%d", APPHOST, APPPORT)
fmt.Printf("Starting serving on http://%s\n", serverAddr)
app := initApp()
initLogging(app)
initCorsMiddleware(app)
initRouter(app)
app.Listen(serverAddr)
}