package middleware import ( "net/http" "github.com/gin-gonic/gin" "filestoragesystem/internal/service" "filestoragesystem/internal/utils" ) // SiteStatus 站点状态中间件 // 站点关闭(维护模式)时:放行状态接口/登录接口/管理员请求,其余返回503 func SiteStatus(adminSvc *service.AdminService) gin.HandlerFunc { return func(c *gin.Context) { if adminSvc.IsSiteEnabled() { c.Next() return } // 放行的路径 path := c.Request.URL.Path if path == "/api/v1/status" || path == "/api/v1/auth/login" { c.Next() return } // 已认证的管理员放行(需在Auth之后挂载) if IsAdmin(c) { c.Next() return } msg := "系统维护中,请稍后再访问" if m, ok := adminSvc.SiteStatus()["maintenance_msg"].(string); ok && m != "" { msg = m } c.AbortWithStatusJSON(http.StatusServiceUnavailable, utils.Response{ Code: http.StatusServiceUnavailable, Message: msg, }) } }