2024-03-05 19:15:53 +00:00
|
|
|
package middleware
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"go-humas-be/config/config"
|
|
|
|
|
"go-humas-be/utils"
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
|
|
|
"github.com/gofiber/fiber/v2/middleware/compress"
|
2024-04-03 17:43:16 +00:00
|
|
|
"github.com/gofiber/fiber/v2/middleware/cors"
|
2024-03-05 19:15:53 +00:00
|
|
|
"github.com/gofiber/fiber/v2/middleware/limiter"
|
|
|
|
|
"github.com/gofiber/fiber/v2/middleware/monitor"
|
|
|
|
|
"github.com/gofiber/fiber/v2/middleware/pprof"
|
|
|
|
|
"github.com/gofiber/fiber/v2/middleware/recover"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// Middleware is a struct that contains all the middleware functions
|
|
|
|
|
type Middleware struct {
|
|
|
|
|
App *fiber.App
|
|
|
|
|
Cfg *config.Config
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func NewMiddleware(app *fiber.App, cfg *config.Config) *Middleware {
|
|
|
|
|
return &Middleware{
|
|
|
|
|
App: app,
|
|
|
|
|
Cfg: cfg,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Register registers all the middleware functions
|
|
|
|
|
func (m *Middleware) Register() {
|
|
|
|
|
// Add Extra Middlewares
|
|
|
|
|
m.App.Use(limiter.New(limiter.Config{
|
|
|
|
|
Next: utils.IsEnabled(m.Cfg.Middleware.Limiter.Enable),
|
|
|
|
|
Max: m.Cfg.Middleware.Limiter.Max,
|
|
|
|
|
Expiration: m.Cfg.Middleware.Limiter.Expiration * time.Second,
|
|
|
|
|
}))
|
|
|
|
|
|
|
|
|
|
m.App.Use(compress.New(compress.Config{
|
|
|
|
|
Next: utils.IsEnabled(m.Cfg.Middleware.Compress.Enable),
|
|
|
|
|
Level: m.Cfg.Middleware.Compress.Level,
|
|
|
|
|
}))
|
|
|
|
|
|
|
|
|
|
m.App.Use(recover.New(recover.Config{
|
|
|
|
|
Next: utils.IsEnabled(m.Cfg.Middleware.Recover.Enable),
|
|
|
|
|
}))
|
|
|
|
|
|
|
|
|
|
m.App.Use(pprof.New(pprof.Config{
|
|
|
|
|
Next: utils.IsEnabled(m.Cfg.Middleware.Pprof.Enable),
|
|
|
|
|
}))
|
|
|
|
|
|
2024-04-03 17:43:16 +00:00
|
|
|
m.App.Use(cors.New(cors.Config{
|
2024-04-03 17:48:29 +00:00
|
|
|
Next: utils.IsEnabled(m.Cfg.Middleware.Cors.Enable),
|
|
|
|
|
AllowOrigins: "*",
|
|
|
|
|
AllowMethods: "HEAD, GET, POST, DELETE, OPTION, PATCH",
|
|
|
|
|
AllowHeaders: "Origin, Content-Type, Accept, Accept-Language, Authorization, X-Requested-With, Access-Control-Request-Method, Access-Control-Request-Headers",
|
|
|
|
|
ExposeHeaders: "Content-Length, Content-Type",
|
|
|
|
|
AllowCredentials: false,
|
|
|
|
|
MaxAge: 12,
|
2024-04-03 17:43:16 +00:00
|
|
|
}))
|
|
|
|
|
|
2024-03-05 19:15:53 +00:00
|
|
|
//m.App.Use(filesystem.New(filesystem.Config{
|
|
|
|
|
// Next: utils.IsEnabled(m.Cfg.Middleware.FileSystem.Enable),
|
|
|
|
|
// Root: http.Dir(m.Cfg.Middleware.FileSystem.Root),
|
|
|
|
|
// Browse: m.Cfg.Middleware.FileSystem.Browse,
|
|
|
|
|
// MaxAge: m.Cfg.Middleware.FileSystem.MaxAge,
|
|
|
|
|
//}))
|
|
|
|
|
|
|
|
|
|
m.App.Get(m.Cfg.Middleware.Monitor.Path, monitor.New(monitor.Config{
|
|
|
|
|
Next: utils.IsEnabled(m.Cfg.Middleware.Monitor.Enable),
|
|
|
|
|
}))
|
|
|
|
|
}
|