embed.go 896 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. //go:build !unembed
  2. package middleware
  3. import (
  4. "io/fs"
  5. "net/http"
  6. "path"
  7. "github.com/0xJacky/Nginx-UI/app"
  8. "github.com/gin-contrib/static"
  9. "github.com/gin-gonic/gin"
  10. "github.com/uozi-tech/cosy/logger"
  11. )
  12. func mustFs(dir string) (serverFileSystem static.ServeFileSystem) {
  13. sub, err := fs.Sub(app.DistFS, path.Join("dist", dir))
  14. if err != nil {
  15. logger.Error(err)
  16. return
  17. }
  18. serverFileSystem = ServerFileSystemType{
  19. http.FS(sub),
  20. }
  21. return
  22. }
  23. func ServeStatic() []gin.HandlerFunc {
  24. const urlPrefix = "/"
  25. fs := mustFs(urlPrefix)
  26. fileserver := http.FileServer(fs)
  27. if urlPrefix != "" {
  28. fileserver = http.StripPrefix(urlPrefix, fileserver)
  29. }
  30. return []gin.HandlerFunc{
  31. func(c *gin.Context) {
  32. if fs.Exists(urlPrefix, c.Request.URL.Path) {
  33. c.Next()
  34. }
  35. },
  36. IPWhiteList(),
  37. func(c *gin.Context) {
  38. fileserver.ServeHTTP(c.Writer, c.Request)
  39. c.Abort()
  40. },
  41. }
  42. }