package controller import ( "encoding/gob" "time" "github.com/flosch/pongo2/v4" "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" "go.uber.org/ratelimit" ) func Init() *gin.Engine { gin.SetMode(gin.DebugMode) app := gin.New() app.Use(gin.Logger()) app.Use(gin.Recovery()) // op-sec stuff rl = ratelimit.New(100) // 100 req/s app.Use(cors.New(cors.Config{AllowOrigins: []string{"http://localhost", "http://127.0.0.1"}})) app.Use(rateLimitMiddleware) // static files app.Static("/public", "./public") // HTML templates app.HTMLRender = templatePath("views") // register gob gob.Register(pongo2.Context{}) gob.Register(time.Time{}) // routes templateDataGroup := app.Group("/", templateDataMiddleware) { templateDataGroup.GET("/", indexHandler) } return app }