|
|
@@ -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),
|
|
|
}
|
|
|
-}
|
|
|
+}
|