Przeglądaj źródła

refactor: update static file serving middleware to improve functionality

Jacky 3 tygodni temu
rodzic
commit
98a4708a8c
2 zmienionych plików z 24 dodań i 7 usunięć
  1. 23 5
      internal/middleware/embed.go
  2. 1 2
      router/routers_embed.go

+ 23 - 5
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()
+		},
+	}
+}

+ 1 - 2
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()...)
 }