diff --git a/common/embed-file-system.go b/common/embed-file-system.go index d7bd2d5bd..d1a9af03d 100644 --- a/common/embed-file-system.go +++ b/common/embed-file-system.go @@ -4,6 +4,7 @@ import ( "embed" "io/fs" "net/http" + "os" "github.com/gin-contrib/static" ) @@ -14,7 +15,7 @@ type embedFileSystem struct { http.FileSystem } -func (e embedFileSystem) Exists(prefix string, path string) bool { +func (e *embedFileSystem) Exists(prefix string, path string) bool { _, err := e.Open(path) if err != nil { return false @@ -22,12 +23,22 @@ func (e embedFileSystem) Exists(prefix string, path string) bool { return true } +func (e *embedFileSystem) Open(name string) (http.File, error) { + if name == "/" { + // This will make sure the index page goes to NoRouter handler, + // which will use the replaced index bytes with analytic codes. + return nil, os.ErrNotExist + } + return e.FileSystem.Open(name) +} + +// requested subtree cannot be opened. func EmbedFolder(fsEmbed embed.FS, targetPath string) static.ServeFileSystem { efs, err := fs.Sub(fsEmbed, targetPath) if err != nil { panic(err) } - return embedFileSystem{ + return &embedFileSystem{ FileSystem: http.FS(efs), } -} +} \ No newline at end of file