get.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package config
  2. import (
  3. "net/http"
  4. "os"
  5. "path/filepath"
  6. "github.com/0xJacky/Nginx-UI/internal/config"
  7. "github.com/0xJacky/Nginx-UI/internal/helper"
  8. "github.com/0xJacky/Nginx-UI/internal/nginx"
  9. "github.com/0xJacky/Nginx-UI/query"
  10. "github.com/gin-gonic/gin"
  11. "github.com/uozi-tech/cosy"
  12. )
  13. func GetConfig(c *gin.Context) {
  14. path := helper.UnescapeURL(c.Query("path"))
  15. var absPath string
  16. if filepath.IsAbs(path) {
  17. absPath = path
  18. } else {
  19. absPath = nginx.GetConfPath(path)
  20. }
  21. if !helper.IsUnderDirectory(absPath, nginx.GetConfPath()) {
  22. cosy.ErrHandler(c, cosy.WrapErrorWithParams(config.ErrPathIsNotUnderTheNginxConfDir, absPath, nginx.GetConfPath()))
  23. return
  24. }
  25. stat, err := os.Stat(absPath)
  26. if err != nil {
  27. cosy.ErrHandler(c, err)
  28. return
  29. }
  30. content, err := os.ReadFile(absPath)
  31. if err != nil {
  32. cosy.ErrHandler(c, err)
  33. return
  34. }
  35. q := query.Config
  36. cfg, err := q.Where(q.Filepath.Eq(absPath)).FirstOrInit()
  37. if err != nil {
  38. cosy.ErrHandler(c, err)
  39. return
  40. }
  41. c.JSON(http.StatusOK, config.Config{
  42. Name: stat.Name(),
  43. Content: string(content),
  44. FilePath: absPath,
  45. ModifiedAt: stat.ModTime(),
  46. Dir: filepath.Dir(absPath),
  47. SyncNodeIds: cfg.SyncNodeIds,
  48. SyncOverwrite: cfg.SyncOverwrite,
  49. })
  50. }