package router import ( "encoding/json" "net/http" "strings" "github.com/engigu/baihu-panel/internal/constant" "github.com/engigu/baihu-panel/internal/middleware" "github.com/engigu/baihu-panel/internal/models/vo" "github.com/engigu/baihu-panel/internal/services" "github.com/engigu/baihu-panel/openapi_docs" "github.com/gin-gonic/gin" ) func initOpenAPIRoutes(root *gin.RouterGroup, urlPrefix string) { // OpenAPI documentation using Scalar UI (带 Basic Auth 认证) root.GET("/openapi/*any", func(c *gin.Context) { // 禁用整个 OpenAPI 路由的缓存 c.Header("Cache-Control", "no-cache, no-store, max-age=0, must-revalidate") c.Header("Pragma", "no-cache") c.Header("Expires", "0") settingsSvc := services.NewSettingsService() siteConfig := settingsSvc.GetSection(constant.SectionSite) tokenJson := siteConfig[constant.KeyOpenapiToken] enabled := false if tokenJson != "" { var tokenConfig vo.TokenConfig if err := json.Unmarshal([]byte(tokenJson), &tokenConfig); err == nil { enabled = tokenConfig.Enabled } } // 如果未开启文档,直接返回 404 SPA 页面 if !enabled { serveSPA(c, urlPrefix, 404) return } // 执行主站 Cookie 认证 middleware.AuthRequired()(c) if c.IsAborted() { return } // 获取内部路径并标准化(移除前后的所有斜杠) path := strings.Trim(c.Param("any"), "/") // 1. 根路径或空路径 -> 重定向到 index.html if path == "" { c.Redirect(http.StatusMovedPermanently, c.Request.URL.Path+"index.html") return } // 2. 提供 Scalar 渲染的 HTML 页面 if path == "index.html" { scalarHTML := `