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) return handler(request) } } 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) }