environment.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package api
  2. import (
  3. "github.com/0xJacky/Nginx-UI/internal/analytic"
  4. "github.com/0xJacky/Nginx-UI/internal/environment"
  5. "github.com/0xJacky/Nginx-UI/model"
  6. "github.com/0xJacky/Nginx-UI/query"
  7. "github.com/gin-gonic/gin"
  8. "github.com/spf13/cast"
  9. "net/http"
  10. "regexp"
  11. )
  12. func GetEnvironment(c *gin.Context) {
  13. id := cast.ToInt(c.Param("id"))
  14. envQuery := query.Environment
  15. env, err := envQuery.FirstByID(id)
  16. if err != nil {
  17. ErrHandler(c, err)
  18. return
  19. }
  20. c.JSON(http.StatusOK, env)
  21. }
  22. func GetEnvironmentList(c *gin.Context) {
  23. data, err := environment.RetrieveEnvironmentList()
  24. if err != nil {
  25. ErrHandler(c, err)
  26. return
  27. }
  28. c.JSON(http.StatusOK, gin.H{
  29. "data": data,
  30. })
  31. }
  32. type EnvironmentManageJson struct {
  33. Name string `json:"name" binding:"required"`
  34. URL string `json:"url" binding:"required"`
  35. Token string `json:"token" binding:"required"`
  36. OperationSync bool `json:"operation_sync"`
  37. SyncApiRegex string `json:"sync_api_regex"`
  38. }
  39. func validateRegex(data EnvironmentManageJson) error {
  40. if data.OperationSync {
  41. _, err := regexp.Compile(data.SyncApiRegex)
  42. return err
  43. }
  44. return nil
  45. }
  46. func AddEnvironment(c *gin.Context) {
  47. var json EnvironmentManageJson
  48. if !BindAndValid(c, &json) {
  49. return
  50. }
  51. if err := validateRegex(json); err != nil {
  52. ErrHandler(c, err)
  53. return
  54. }
  55. env := model.Environment{
  56. Name: json.Name,
  57. URL: json.URL,
  58. Token: json.Token,
  59. OperationSync: json.OperationSync,
  60. SyncApiRegex: json.SyncApiRegex,
  61. }
  62. envQuery := query.Environment
  63. err := envQuery.Create(&env)
  64. if err != nil {
  65. ErrHandler(c, err)
  66. return
  67. }
  68. go analytic.RestartRetrieveNodesStatus()
  69. c.JSON(http.StatusOK, env)
  70. }
  71. func EditEnvironment(c *gin.Context) {
  72. id := cast.ToInt(c.Param("id"))
  73. var json EnvironmentManageJson
  74. if !BindAndValid(c, &json) {
  75. return
  76. }
  77. if err := validateRegex(json); err != nil {
  78. ErrHandler(c, err)
  79. return
  80. }
  81. envQuery := query.Environment
  82. env, err := envQuery.FirstByID(id)
  83. if err != nil {
  84. ErrHandler(c, err)
  85. return
  86. }
  87. _, err = envQuery.Where(envQuery.ID.Eq(env.ID)).Updates(&model.Environment{
  88. Name: json.Name,
  89. URL: json.URL,
  90. Token: json.Token,
  91. OperationSync: json.OperationSync,
  92. SyncApiRegex: json.SyncApiRegex,
  93. })
  94. if err != nil {
  95. ErrHandler(c, err)
  96. return
  97. }
  98. go analytic.RestartRetrieveNodesStatus()
  99. GetEnvironment(c)
  100. }
  101. func DeleteEnvironment(c *gin.Context) {
  102. id := cast.ToInt(c.Param("id"))
  103. envQuery := query.Environment
  104. env, err := envQuery.FirstByID(id)
  105. if err != nil {
  106. ErrHandler(c, err)
  107. return
  108. }
  109. err = envQuery.DeleteByID(env.ID)
  110. if err != nil {
  111. ErrHandler(c, err)
  112. return
  113. }
  114. go analytic.RestartRetrieveNodesStatus()
  115. c.JSON(http.StatusNoContent, nil)
  116. }