package web import ( "platform/web/auth" "github.com/gofiber/contrib/otelfiber/v2" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/cors" "github.com/gofiber/fiber/v2/middleware/logger" "github.com/gofiber/fiber/v2/middleware/recover" "github.com/gofiber/fiber/v2/middleware/requestid" "github.com/google/uuid" "github.com/jxskiss/base62" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/trace" ) func ApplyMiddlewares(app *fiber.App) { // recover app.Use(recover.New(recover.Config{ EnableStackTrace: true, })) // logger app.Use(logger.New(logger.Config{ Next: func(c *fiber.Ctx) bool { return c.Path() == "/favicon.ico" }, })) // metric app.Use(otelfiber.Middleware()) app.Use(func(c *fiber.Ctx) error { err := c.Next() span := trace.SpanFromContext(c.UserContext()) if !span.IsRecording() { return err } status := c.Response().StatusCode() body := []byte{} if status < 200 || status >= 300 { body = c.Response().Body() if len(body) > 1024 { body = body[:1024] } } span.SetAttributes(attribute.String("http.response.error", string(body))) return err }) // cors app.Use(cors.New(cors.Config{ AllowCredentials: true, AllowOriginsFunc: func(origin string) bool { return true }, })) // request id app.Use(requestid.New(requestid.Config{ Generator: func() string { binary, _ := uuid.New().MarshalBinary() return base62.EncodeToString(binary) }, })) // authenticate app.Use(auth.Authenticate()) }