From f7facc4bbffc2a3a322f2074fc2dde7246ae1364 Mon Sep 17 00:00:00 2001 From: zijiren233 Date: Mon, 6 Nov 2023 14:12:02 +0800 Subject: [PATCH] Fix: sigle page static router --- public/public.go | 2 +- server/handlers/init.go | 15 ------------- server/handlers/web.go | 12 ----------- server/router.go | 2 ++ server/static/static.go | 48 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 51 insertions(+), 28 deletions(-) delete mode 100644 server/handlers/web.go create mode 100644 server/static/static.go diff --git a/public/public.go b/public/public.go index c0877cf..a6e312d 100644 --- a/public/public.go +++ b/public/public.go @@ -5,7 +5,7 @@ import ( "io/fs" ) -//go:embed dist/* +//go:embed dist var dist embed.FS var Public, _ = fs.Sub(dist, "dist") diff --git a/server/handlers/init.go b/server/handlers/init.go index fe8d1ff..37436ac 100644 --- a/server/handlers/init.go +++ b/server/handlers/init.go @@ -1,28 +1,13 @@ package handlers import ( - "net/http" - "github.com/gin-gonic/gin" - "github.com/synctv-org/synctv/public" Vbilibili "github.com/synctv-org/synctv/server/handlers/vendors/bilibili" "github.com/synctv-org/synctv/server/middlewares" "github.com/synctv-org/synctv/utils" ) func Init(e *gin.Engine) { - { - e.GET("/", func(ctx *gin.Context) { - ctx.Redirect(http.StatusMovedPermanently, "/web/") - }) - - web := e.Group("/web") - - web.Use(middlewares.NewDistCacheControl("/web/")) - - web.StaticFS("", http.FS(public.Public)) - } - { api := e.Group("/api") diff --git a/server/handlers/web.go b/server/handlers/web.go deleted file mode 100644 index d97c56e..0000000 --- a/server/handlers/web.go +++ /dev/null @@ -1,12 +0,0 @@ -package handlers - -import ( - "net/http" - - "github.com/gin-gonic/gin" - "github.com/synctv-org/synctv/public" -) - -func WebServer(e gin.IRoutes) { - e.StaticFS("", http.FS(public.Public)) -} diff --git a/server/router.go b/server/router.go index b9d5904..7e46180 100644 --- a/server/router.go +++ b/server/router.go @@ -5,12 +5,14 @@ import ( "github.com/synctv-org/synctv/server/handlers" "github.com/synctv-org/synctv/server/middlewares" auth "github.com/synctv-org/synctv/server/oauth2" + "github.com/synctv-org/synctv/server/static" ) func Init(e *gin.Engine) { middlewares.Init(e) auth.Init(e) handlers.Init(e) + static.Init(e) } func NewAndInit() (e *gin.Engine) { diff --git a/server/static/static.go b/server/static/static.go new file mode 100644 index 0000000..2764a7a --- /dev/null +++ b/server/static/static.go @@ -0,0 +1,48 @@ +package static + +import ( + "io/fs" + "net/http" + "path/filepath" + + "github.com/gin-gonic/gin" + "github.com/synctv-org/synctv/public" + "github.com/synctv-org/synctv/server/middlewares" +) + +func Init(e *gin.Engine) { + { + e.GET("/", func(ctx *gin.Context) { + ctx.Redirect(http.StatusMovedPermanently, "/web/") + }) + + web := e.Group("/web") + + web.Use(middlewares.NewDistCacheControl("/web/")) + + err := initFSRouter(web, public.Public.(fs.ReadDirFS), ".") + if err != nil { + panic(err) + } + + e.NoRoute(func(ctx *gin.Context) { + ctx.FileFromFS("", http.FS(public.Public)) + }) + + } +} + +func initFSRouter(e *gin.RouterGroup, f fs.ReadDirFS, path string) error { + dirs, err := f.ReadDir(path) + if err != nil { + return err + } + for _, dir := range dirs { + if dir.IsDir() { + return initFSRouter(e, f, filepath.Join(path, dir.Name())) + } else { + e.StaticFileFS(filepath.Join(path, dir.Name()), filepath.Join(path, dir.Name()), http.FS(f)) + } + } + return nil +}