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, })) // metric app.Use(otelfiber.Middleware()) // logger app.Use(logger.New(logger.Config{ Next: func(c *fiber.Ctx) bool { return c.Path() == "/favicon.ico" }, })) // 补充 otel span attr app.Use(func(c *fiber.Ctx) error { err := c.Next() span := trace.SpanFromContext(c.UserContext()) if !span.IsRecording() { return err } str := "" if err != nil { str = err.Error() } span.SetAttributes(attribute.String("http.response.error", str)) 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()) }