diff --git a/internal/middleware/embed.go b/internal/middleware/embed.go index 1bf1e09a..3f0a1e74 100644 --- a/internal/middleware/embed.go +++ b/internal/middleware/embed.go @@ -9,21 +9,39 @@ import ( "github.com/0xJacky/Nginx-UI/app" "github.com/gin-contrib/static" + "github.com/gin-gonic/gin" "github.com/uozi-tech/cosy/logger" ) -func MustFs(dir string) (serverFileSystem static.ServeFileSystem) { - +func mustFs(dir string) (serverFileSystem static.ServeFileSystem) { sub, err := fs.Sub(app.DistFS, path.Join("dist", dir)) - if err != nil { logger.Error(err) return } - serverFileSystem = ServerFileSystemType{ http.FS(sub), } - return } + +func ServeStatic() []gin.HandlerFunc { + const urlPrefix = "/" + fs := mustFs(urlPrefix) + fileserver := http.FileServer(fs) + if urlPrefix != "" { + fileserver = http.StripPrefix(urlPrefix, fileserver) + } + return []gin.HandlerFunc{ + func(c *gin.Context) { + if fs.Exists(urlPrefix, c.Request.URL.Path) { + c.Next() + } + }, + IPWhiteList(), + func(c *gin.Context) { + fileserver.ServeHTTP(c.Writer, c.Request) + c.Abort() + }, + } +} diff --git a/router/routers_embed.go b/router/routers_embed.go index ca2b77cb..bb52c1fb 100644 --- a/router/routers_embed.go +++ b/router/routers_embed.go @@ -4,12 +4,11 @@ package router import ( "github.com/0xJacky/Nginx-UI/internal/middleware" - "github.com/gin-contrib/static" "github.com/gin-gonic/gin" ) func initEmbedRoute(r *gin.Engine) { r.Use(middleware.CacheJs()) - r.Use(static.Serve("/", middleware.MustFs(""))) + r.Use(middleware.ServeStatic()...) }