package router import ( "github.com/gin-gonic/gin" "hy2xs-admin/dao" "hy2xs-admin/frontend" "hy2xs-admin/middleware" "hy2xs-admin/model/constant" "os" "strings" ) func Router(router *gin.Engine, huiWebContext *string) { router.GET("/healthz", func(c *gin.Context) { sqliteReady := dao.IsSqliteReady() configReadable := false if stat, err := os.Stat(constant.Hysteria2ConfigPath); err == nil { configReadable = !stat.IsDir() } if !sqliteReady || !configReadable { c.JSON(503, gin.H{ "ok": false, "service": "hy2xs-admin", "sqlite_ready": sqliteReady, "config_readable": configReadable, }) return } c.JSON(200, gin.H{ "ok": true, "service": "hy2xs-admin", "sqlite_ready": true, "config_readable": true, }) }) relativePath := "/" if huiWebContext != nil && strings.HasPrefix(*huiWebContext, "/") { relativePath = *huiWebContext } frontend.InitFrontend(router, relativePath) globalGroup := router.Group(relativePath) machineApi := globalGroup.Group("/hui") machineApi.Use(middleware.LocalOnlyHandler(), middleware.MachineAuthHandler(), middleware.LogHandler()) initHysteria2MachineAuthRouter(machineApi) authApi := globalGroup.Group("/hui") authApi.Use(middleware.FilterHandler(), middleware.LogHandler(), middleware.RateLimiterHandler()) initAuthRouter(authApi) huiAdminApi := globalGroup.Group("/hui") huiAdminApi.Use( middleware.FilterHandler(), middleware.LogHandler(), middleware.RateLimiterHandler(), middleware.JWTHandler(), middleware.AdminHandler(), ) initAdminRouter(huiAdminApi) initDashboardRouter(huiAdminApi) initPeerRouter(huiAdminApi) initConfigRouter(huiAdminApi) initLogRouter(huiAdminApi) }