handler.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. package streamproxy
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "strconv"
  6. "strings"
  7. "imuslab.com/zoraxy/mod/utils"
  8. )
  9. /*
  10. Handler.go
  11. Handlers for the tcprox. Remove this file
  12. if your application do not need any http
  13. handler.
  14. */
  15. func (m *Manager) HandleAddProxyConfig(w http.ResponseWriter, r *http.Request) {
  16. name, err := utils.PostPara(r, "name")
  17. if err != nil {
  18. utils.SendErrorResponse(w, "name cannot be empty")
  19. return
  20. }
  21. listenAddr, err := utils.PostPara(r, "listenAddr")
  22. if err != nil {
  23. utils.SendErrorResponse(w, "first address cannot be empty")
  24. return
  25. }
  26. proxyAddr, err := utils.PostPara(r, "proxyAddr")
  27. if err != nil {
  28. utils.SendErrorResponse(w, "second address cannot be empty")
  29. return
  30. }
  31. timeoutStr, _ := utils.PostPara(r, "timeout")
  32. timeout := m.Options.DefaultTimeout
  33. if timeoutStr != "" {
  34. timeout, err = strconv.Atoi(timeoutStr)
  35. if err != nil {
  36. utils.SendErrorResponse(w, "invalid timeout value: "+timeoutStr)
  37. return
  38. }
  39. }
  40. useTCP, _ := utils.PostBool(r, "useTCP")
  41. useUDP, _ := utils.PostBool(r, "useUDP")
  42. //Create the target config
  43. newConfigUUID := m.NewConfig(&ProxyRelayOptions{
  44. Name: name,
  45. ListeningAddr: strings.TrimSpace(listenAddr),
  46. ProxyAddr: strings.TrimSpace(proxyAddr),
  47. Timeout: timeout,
  48. UseTCP: useTCP,
  49. UseUDP: useUDP,
  50. })
  51. js, _ := json.Marshal(newConfigUUID)
  52. utils.SendJSONResponse(w, string(js))
  53. }
  54. func (m *Manager) HandleEditProxyConfigs(w http.ResponseWriter, r *http.Request) {
  55. // Extract POST parameters using utils.PostPara
  56. configUUID, err := utils.PostPara(r, "uuid")
  57. if err != nil {
  58. utils.SendErrorResponse(w, "config UUID cannot be empty")
  59. return
  60. }
  61. newName, _ := utils.PostPara(r, "name")
  62. listenAddr, _ := utils.PostPara(r, "listenAddr")
  63. proxyAddr, _ := utils.PostPara(r, "proxyAddr")
  64. useTCP, _ := utils.PostBool(r, "useTCP")
  65. useUDP, _ := utils.PostBool(r, "useUDP")
  66. newTimeoutStr, _ := utils.PostPara(r, "timeout")
  67. newTimeout := -1
  68. if newTimeoutStr != "" {
  69. newTimeout, err = strconv.Atoi(newTimeoutStr)
  70. if err != nil {
  71. utils.SendErrorResponse(w, "invalid newTimeout value: "+newTimeoutStr)
  72. return
  73. }
  74. }
  75. // Call the EditConfig method to modify the configuration
  76. err = m.EditConfig(configUUID, newName, listenAddr, proxyAddr, useTCP, useUDP, newTimeout)
  77. if err != nil {
  78. utils.SendErrorResponse(w, err.Error())
  79. return
  80. }
  81. utils.SendOK(w)
  82. }
  83. func (m *Manager) HandleListConfigs(w http.ResponseWriter, r *http.Request) {
  84. js, _ := json.Marshal(m.Configs)
  85. utils.SendJSONResponse(w, string(js))
  86. }
  87. func (m *Manager) HandleStartProxy(w http.ResponseWriter, r *http.Request) {
  88. uuid, err := utils.PostPara(r, "uuid")
  89. if err != nil {
  90. utils.SendErrorResponse(w, "invalid uuid given")
  91. return
  92. }
  93. targetProxyConfig, err := m.GetConfigByUUID(uuid)
  94. if err != nil {
  95. utils.SendErrorResponse(w, err.Error())
  96. return
  97. }
  98. err = targetProxyConfig.Start()
  99. if err != nil {
  100. utils.SendErrorResponse(w, err.Error())
  101. return
  102. }
  103. utils.SendOK(w)
  104. }
  105. func (m *Manager) HandleStopProxy(w http.ResponseWriter, r *http.Request) {
  106. uuid, err := utils.PostPara(r, "uuid")
  107. if err != nil {
  108. utils.SendErrorResponse(w, "invalid uuid given")
  109. return
  110. }
  111. targetProxyConfig, err := m.GetConfigByUUID(uuid)
  112. if err != nil {
  113. utils.SendErrorResponse(w, err.Error())
  114. return
  115. }
  116. if !targetProxyConfig.IsRunning() {
  117. targetProxyConfig.Running = false
  118. utils.SendErrorResponse(w, "target proxy service is not running")
  119. return
  120. }
  121. targetProxyConfig.Stop()
  122. utils.SendOK(w)
  123. }
  124. func (m *Manager) HandleRemoveProxy(w http.ResponseWriter, r *http.Request) {
  125. uuid, err := utils.PostPara(r, "uuid")
  126. if err != nil {
  127. utils.SendErrorResponse(w, "invalid uuid given")
  128. return
  129. }
  130. targetProxyConfig, err := m.GetConfigByUUID(uuid)
  131. if err != nil {
  132. utils.SendErrorResponse(w, err.Error())
  133. return
  134. }
  135. if targetProxyConfig.IsRunning() {
  136. targetProxyConfig.Running = false
  137. utils.SendErrorResponse(w, "Service is running")
  138. return
  139. }
  140. err = m.RemoveConfig(targetProxyConfig.UUID)
  141. if err != nil {
  142. utils.SendErrorResponse(w, err.Error())
  143. return
  144. }
  145. utils.SendOK(w)
  146. }
  147. func (m *Manager) HandleGetProxyStatus(w http.ResponseWriter, r *http.Request) {
  148. uuid, err := utils.GetPara(r, "uuid")
  149. if err != nil {
  150. utils.SendErrorResponse(w, "invalid uuid given")
  151. return
  152. }
  153. targetConfig, err := m.GetConfigByUUID(uuid)
  154. if err != nil {
  155. utils.SendErrorResponse(w, err.Error())
  156. return
  157. }
  158. js, _ := json.Marshal(targetConfig)
  159. utils.SendJSONResponse(w, string(js))
  160. }