1
0

middleware.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package router
  2. import (
  3. "encoding/base64"
  4. "github.com/0xJacky/Nginx-UI/frontend"
  5. "github.com/0xJacky/Nginx-UI/server/model"
  6. "github.com/gin-contrib/static"
  7. "github.com/gin-gonic/gin"
  8. "io/fs"
  9. "log"
  10. "net/http"
  11. "path"
  12. )
  13. func authRequired() gin.HandlerFunc {
  14. return func(c *gin.Context) {
  15. token := c.GetHeader("Authorization")
  16. if token == "" {
  17. tmp, _ := base64.StdEncoding.DecodeString(c.Query("token"))
  18. token = string(tmp)
  19. if token == "" {
  20. c.JSON(http.StatusForbidden, gin.H{
  21. "message": "auth fail",
  22. })
  23. c.Abort()
  24. return
  25. }
  26. }
  27. n := model.CheckToken(token)
  28. if n < 1 {
  29. c.JSON(http.StatusForbidden, gin.H{
  30. "message": "auth fail",
  31. })
  32. c.Abort()
  33. return
  34. }
  35. c.Next()
  36. }
  37. }
  38. type serverFileSystemType struct {
  39. http.FileSystem
  40. }
  41. func (f serverFileSystemType) Exists(prefix string, _path string) bool {
  42. _, err := f.Open(path.Join(prefix, _path))
  43. return err == nil
  44. }
  45. func mustFS(dir string) (serverFileSystem static.ServeFileSystem) {
  46. sub, err := fs.Sub(frontend.DistFS, path.Join("dist", dir))
  47. if err != nil {
  48. log.Println(err)
  49. return
  50. }
  51. serverFileSystem = serverFileSystemType{
  52. http.FS(sub),
  53. }
  54. return
  55. }