list.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package config
  2. import (
  3. "github.com/0xJacky/Nginx-UI/api"
  4. "github.com/0xJacky/Nginx-UI/internal/config"
  5. "github.com/0xJacky/Nginx-UI/internal/logger"
  6. "github.com/0xJacky/Nginx-UI/internal/nginx"
  7. "github.com/gin-gonic/gin"
  8. "net/http"
  9. "os"
  10. )
  11. func GetConfigs(c *gin.Context) {
  12. orderBy := c.Query("order_by")
  13. sort := c.DefaultQuery("sort", "desc")
  14. dir := c.DefaultQuery("dir", "/")
  15. configFiles, err := os.ReadDir(nginx.GetConfPath(dir))
  16. if err != nil {
  17. api.ErrHandler(c, err)
  18. return
  19. }
  20. var configs []config.Config
  21. for i := range configFiles {
  22. file := configFiles[i]
  23. fileInfo, _ := file.Info()
  24. switch mode := fileInfo.Mode(); {
  25. case mode.IsRegular(): // regular file, not a hidden file
  26. if "." == file.Name()[0:1] {
  27. continue
  28. }
  29. case mode&os.ModeSymlink != 0: // is a symbol
  30. var targetPath string
  31. targetPath, err = os.Readlink(nginx.GetConfPath(dir, file.Name()))
  32. if err != nil {
  33. logger.Error("Read Symlink Error", targetPath, err)
  34. continue
  35. }
  36. var targetInfo os.FileInfo
  37. targetInfo, err = os.Stat(targetPath)
  38. if err != nil {
  39. logger.Error("Stat Error", targetPath, err)
  40. continue
  41. }
  42. // hide the file if it's target file is a directory
  43. if targetInfo.IsDir() {
  44. continue
  45. }
  46. }
  47. configs = append(configs, config.Config{
  48. Name: file.Name(),
  49. ModifiedAt: fileInfo.ModTime(),
  50. Size: fileInfo.Size(),
  51. IsDir: fileInfo.IsDir(),
  52. })
  53. }
  54. configs = config.Sort(orderBy, sort, configs)
  55. c.JSON(http.StatusOK, gin.H{
  56. "data": configs,
  57. })
  58. }