list.go 1.6 KB

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