get.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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/helper"
  6. "github.com/0xJacky/Nginx-UI/internal/nginx"
  7. "github.com/0xJacky/Nginx-UI/query"
  8. "github.com/gin-gonic/gin"
  9. "github.com/sashabaranov/go-openai"
  10. "net/http"
  11. "os"
  12. )
  13. type APIConfigResp struct {
  14. config.Config
  15. SyncNodeIds []int `json:"sync_node_ids" gorm:"serializer:json"`
  16. SyncOverwrite bool `json:"sync_overwrite"`
  17. }
  18. func GetConfig(c *gin.Context) {
  19. name := c.Param("name")
  20. path := nginx.GetConfPath("/", name)
  21. if !helper.IsUnderDirectory(path, nginx.GetConfPath()) {
  22. c.JSON(http.StatusForbidden, gin.H{
  23. "message": "path is not under the nginx conf path",
  24. })
  25. return
  26. }
  27. stat, err := os.Stat(path)
  28. if err != nil {
  29. api.ErrHandler(c, err)
  30. return
  31. }
  32. content, err := os.ReadFile(path)
  33. if err != nil {
  34. api.ErrHandler(c, err)
  35. return
  36. }
  37. q := query.Config
  38. g := query.ChatGPTLog
  39. chatgpt, err := g.Where(g.Name.Eq(path)).FirstOrCreate()
  40. if err != nil {
  41. api.ErrHandler(c, err)
  42. return
  43. }
  44. if chatgpt.Content == nil {
  45. chatgpt.Content = make([]openai.ChatCompletionMessage, 0)
  46. }
  47. cfg, err := q.Where(q.Filepath.Eq(path)).FirstOrInit()
  48. if err != nil {
  49. api.ErrHandler(c, err)
  50. return
  51. }
  52. c.JSON(http.StatusOK, APIConfigResp{
  53. Config: config.Config{
  54. Name: stat.Name(),
  55. Content: string(content),
  56. ChatGPTMessages: chatgpt.Content,
  57. FilePath: path,
  58. ModifiedAt: stat.ModTime(),
  59. },
  60. SyncNodeIds: cfg.SyncNodeIds,
  61. SyncOverwrite: cfg.SyncOverwrite,
  62. })
  63. }