Files
pansou/api/router.go
www.xueximeng.com 0fca5179ff 增加认证
2025-10-05 20:17:10 +08:00

80 lines
2.0 KiB
Go

package api
import (
"github.com/gin-gonic/gin"
"pansou/config"
"pansou/service"
"pansou/util"
)
// SetupRouter 设置路由
func SetupRouter(searchService *service.SearchService) *gin.Engine {
// 设置搜索服务
SetSearchService(searchService)
// 设置为生产模式
gin.SetMode(gin.ReleaseMode)
// 创建默认路由
r := gin.Default()
// 添加中间件
r.Use(CORSMiddleware())
r.Use(LoggerMiddleware())
r.Use(util.GzipMiddleware()) // 添加压缩中间件
r.Use(AuthMiddleware()) // 添加认证中间件
// 定义API路由组
api := r.Group("/api")
{
// 认证接口(不需要认证,由中间件公开路径处理)
auth := api.Group("/auth")
{
auth.POST("/login", LoginHandler)
auth.POST("/verify", VerifyHandler)
auth.POST("/logout", LogoutHandler)
}
// 搜索接口 - 支持POST和GET两种方式
api.POST("/search", SearchHandler)
api.GET("/search", SearchHandler) // 添加GET方式支持
// 健康检查接口
api.GET("/health", func(c *gin.Context) {
// 根据配置决定是否返回插件信息
pluginCount := 0
pluginNames := []string{}
pluginsEnabled := config.AppConfig.AsyncPluginEnabled
if pluginsEnabled && searchService != nil && searchService.GetPluginManager() != nil {
plugins := searchService.GetPluginManager().GetPlugins()
pluginCount = len(plugins)
for _, p := range plugins {
pluginNames = append(pluginNames, p.Name())
}
}
// 获取频道信息
channels := config.AppConfig.DefaultChannels
channelsCount := len(channels)
response := gin.H{
"status": "ok",
"auth_enabled": config.AppConfig.AuthEnabled, // 添加认证状态
"plugins_enabled": pluginsEnabled,
"channels": channels,
"channels_count": channelsCount,
}
// 只有当插件启用时才返回插件相关信息
if pluginsEnabled {
response["plugin_count"] = pluginCount
response["plugins"] = pluginNames
}
c.JSON(200, response)
})
}
return r
}