2025-11-17 18:38:10 +08:00
|
|
|
package web
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"platform/web/auth"
|
|
|
|
|
|
|
|
|
|
"github.com/gofiber/contrib/otelfiber/v2"
|
|
|
|
|
"github.com/gofiber/fiber/v2"
|
2025-12-29 10:18:01 +08:00
|
|
|
"github.com/gofiber/fiber/v2/middleware/cors"
|
2025-11-17 18:38:10 +08:00
|
|
|
"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"
|
2026-05-08 17:30:51 +08:00
|
|
|
"go.opentelemetry.io/otel/attribute"
|
|
|
|
|
"go.opentelemetry.io/otel/trace"
|
2025-11-17 18:38:10 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func ApplyMiddlewares(app *fiber.App) {
|
|
|
|
|
|
|
|
|
|
// recover
|
|
|
|
|
app.Use(recover.New(recover.Config{
|
|
|
|
|
EnableStackTrace: true,
|
|
|
|
|
}))
|
|
|
|
|
|
2026-05-13 18:07:44 +08:00
|
|
|
// metric
|
|
|
|
|
app.Use(otelfiber.Middleware())
|
|
|
|
|
|
2025-11-17 18:38:10 +08:00
|
|
|
// logger
|
|
|
|
|
app.Use(logger.New(logger.Config{
|
|
|
|
|
Next: func(c *fiber.Ctx) bool {
|
|
|
|
|
return c.Path() == "/favicon.ico"
|
|
|
|
|
},
|
|
|
|
|
}))
|
|
|
|
|
|
2026-05-13 18:07:44 +08:00
|
|
|
// 补充 otel span attr
|
2026-05-08 17:30:51 +08:00
|
|
|
app.Use(func(c *fiber.Ctx) error {
|
|
|
|
|
err := c.Next()
|
|
|
|
|
|
|
|
|
|
span := trace.SpanFromContext(c.UserContext())
|
|
|
|
|
if !span.IsRecording() {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-13 18:07:44 +08:00
|
|
|
str := ""
|
|
|
|
|
if err != nil {
|
|
|
|
|
str = err.Error()
|
2026-05-08 17:30:51 +08:00
|
|
|
}
|
|
|
|
|
|
2026-05-13 18:07:44 +08:00
|
|
|
span.SetAttributes(attribute.String("http.response.error", str))
|
2026-05-08 17:30:51 +08:00
|
|
|
return err
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// cors
|
|
|
|
|
app.Use(cors.New(cors.Config{
|
|
|
|
|
AllowCredentials: true,
|
|
|
|
|
AllowOriginsFunc: func(origin string) bool {
|
|
|
|
|
return true
|
|
|
|
|
},
|
|
|
|
|
}))
|
2025-12-04 09:45:35 +08:00
|
|
|
|
2025-11-17 18:38:10 +08:00
|
|
|
// request id
|
|
|
|
|
app.Use(requestid.New(requestid.Config{
|
|
|
|
|
Generator: func() string {
|
|
|
|
|
binary, _ := uuid.New().MarshalBinary()
|
|
|
|
|
return base62.EncodeToString(binary)
|
|
|
|
|
},
|
|
|
|
|
}))
|
|
|
|
|
|
|
|
|
|
// authenticate
|
|
|
|
|
app.Use(auth.Authenticate())
|
|
|
|
|
}
|