index.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. package controllers
  2. import (
  3. "github.com/cnlh/nps/lib/file"
  4. "github.com/cnlh/nps/server"
  5. "github.com/cnlh/nps/server/tool"
  6. )
  7. type IndexController struct {
  8. BaseController
  9. }
  10. func (s *IndexController) Index() {
  11. s.Data["data"] = server.GetDashboardData()
  12. s.SetInfo("dashboard")
  13. s.display("index/index")
  14. }
  15. func (s *IndexController) Help() {
  16. s.SetInfo("使用说明")
  17. s.display("index/help")
  18. }
  19. func (s *IndexController) Tcp() {
  20. s.SetInfo("tcp隧道管理")
  21. s.SetType("tcpServer")
  22. s.display("index/list")
  23. }
  24. func (s *IndexController) Udp() {
  25. s.SetInfo("udp隧道管理")
  26. s.SetType("udpServer")
  27. s.display("index/list")
  28. }
  29. func (s *IndexController) Socks5() {
  30. s.SetInfo("socks5管理")
  31. s.SetType("socks5Server")
  32. s.display("index/list")
  33. }
  34. func (s *IndexController) Http() {
  35. s.SetInfo("http代理管理")
  36. s.SetType("httpProxyServer")
  37. s.display("index/list")
  38. }
  39. func (s *IndexController) Host() {
  40. s.SetInfo("host模式管理")
  41. s.SetType("hostServer")
  42. s.display("index/list")
  43. }
  44. func (s *IndexController) All() {
  45. s.Data["menu"] = "client"
  46. clientId := s.GetString("client_id")
  47. s.Data["client_id"] = clientId
  48. s.SetInfo("客户端" + clientId + "的所有隧道")
  49. s.display("index/list")
  50. }
  51. func (s *IndexController) GetTunnel() {
  52. start, length := s.GetAjaxParams()
  53. taskType := s.GetString("type")
  54. clientId := s.GetIntNoErr("client_id")
  55. list, cnt := server.GetTunnel(start, length, taskType, clientId)
  56. s.AjaxTable(list, cnt, cnt)
  57. }
  58. func (s *IndexController) Add() {
  59. if s.Ctx.Request.Method == "GET" {
  60. s.Data["type"] = s.GetString("type")
  61. s.Data["client_id"] = s.GetString("client_id")
  62. s.SetInfo("新增")
  63. s.display()
  64. } else {
  65. t := &file.Tunnel{
  66. Port: s.GetIntNoErr("port"),
  67. Mode: s.GetString("type"),
  68. Target: s.GetString("target"),
  69. Id: file.GetCsvDb().GetTaskId(),
  70. Status: true,
  71. Remark: s.GetString("remark"),
  72. Flow: &file.Flow{},
  73. }
  74. if !tool.TestServerPort(t.Port, t.Mode) {
  75. s.AjaxErr("The port cannot be opened because it may has been occupied or is no longer allowed.")
  76. }
  77. var err error
  78. if t.Client, err = file.GetCsvDb().GetClient(s.GetIntNoErr("client_id")); err != nil {
  79. s.AjaxErr(err.Error())
  80. }
  81. file.GetCsvDb().NewTask(t)
  82. if err := server.AddTask(t); err != nil {
  83. s.AjaxErr(err.Error())
  84. } else {
  85. s.AjaxOk("添加成功")
  86. }
  87. }
  88. }
  89. func (s *IndexController) GetOneTunnel() {
  90. id := s.GetIntNoErr("id")
  91. data := make(map[string]interface{})
  92. if t, err := file.GetCsvDb().GetTask(id); err != nil {
  93. data["code"] = 0
  94. } else {
  95. data["code"] = 1
  96. data["data"] = t
  97. }
  98. s.Data["json"] = data
  99. s.ServeJSON()
  100. }
  101. func (s *IndexController) Edit() {
  102. id := s.GetIntNoErr("id")
  103. if s.Ctx.Request.Method == "GET" {
  104. if t, err := file.GetCsvDb().GetTask(id); err != nil {
  105. s.error()
  106. } else {
  107. s.Data["t"] = t
  108. }
  109. s.SetInfo("修改")
  110. s.display()
  111. } else {
  112. if t, err := file.GetCsvDb().GetTask(id); err != nil {
  113. s.error()
  114. } else {
  115. t.Port = s.GetIntNoErr("port")
  116. t.Mode = s.GetString("type")
  117. t.Target = s.GetString("target")
  118. t.Id = id
  119. t.Client.Id = s.GetIntNoErr("client_id")
  120. t.Remark = s.GetString("remark")
  121. if t.Client, err = file.GetCsvDb().GetClient(s.GetIntNoErr("client_id")); err != nil {
  122. s.AjaxErr("修改失败")
  123. }
  124. file.GetCsvDb().UpdateTask(t)
  125. }
  126. s.AjaxOk("修改成功")
  127. }
  128. }
  129. func (s *IndexController) Stop() {
  130. id := s.GetIntNoErr("id")
  131. if err := server.StopServer(id); err != nil {
  132. s.AjaxErr("停止失败")
  133. }
  134. s.AjaxOk("停止成功")
  135. }
  136. func (s *IndexController) Del() {
  137. id := s.GetIntNoErr("id")
  138. if err := server.DelTask(id); err != nil {
  139. s.AjaxErr("删除失败")
  140. }
  141. s.AjaxOk("删除成功")
  142. }
  143. func (s *IndexController) Start() {
  144. id := s.GetIntNoErr("id")
  145. if err := server.StartTask(id); err != nil {
  146. s.AjaxErr("开启失败")
  147. }
  148. s.AjaxOk("开启成功")
  149. }
  150. func (s *IndexController) HostList() {
  151. if s.Ctx.Request.Method == "GET" {
  152. s.Data["client_id"] = s.GetString("client_id")
  153. s.Data["menu"] = "host"
  154. s.SetInfo("域名列表")
  155. s.display("index/hlist")
  156. } else {
  157. start, length := s.GetAjaxParams()
  158. clientId := s.GetIntNoErr("client_id")
  159. list, cnt := file.GetCsvDb().GetHost(start, length, clientId)
  160. s.AjaxTable(list, cnt, cnt)
  161. }
  162. }
  163. func (s *IndexController) GetHost() {
  164. if s.Ctx.Request.Method == "POST" {
  165. data := make(map[string]interface{})
  166. if h, err := file.GetCsvDb().GetHostById(s.GetIntNoErr("id")); err != nil {
  167. data["code"] = 0
  168. } else {
  169. data["data"] = h
  170. data["code"] = 1
  171. }
  172. s.Data["json"] = data
  173. s.ServeJSON()
  174. }
  175. }
  176. func (s *IndexController) DelHost() {
  177. id := s.GetIntNoErr("id")
  178. if err := file.GetCsvDb().DelHost(id); err != nil {
  179. s.AjaxErr("删除失败")
  180. }
  181. s.AjaxOk("删除成功")
  182. }
  183. func (s *IndexController) AddHost() {
  184. if s.Ctx.Request.Method == "GET" {
  185. s.Data["client_id"] = s.GetString("client_id")
  186. s.Data["menu"] = "host"
  187. s.SetInfo("新增")
  188. s.display("index/hadd")
  189. } else {
  190. h := &file.Host{
  191. Id: file.GetCsvDb().GetHostId(),
  192. Host: s.GetString("host"),
  193. Target: s.GetString("target"),
  194. HeaderChange: s.GetString("header"),
  195. HostChange: s.GetString("hostchange"),
  196. Remark: s.GetString("remark"),
  197. Location: s.GetString("location"),
  198. Flow: &file.Flow{},
  199. }
  200. var err error
  201. if h.Client, err = file.GetCsvDb().GetClient(s.GetIntNoErr("client_id")); err != nil {
  202. s.AjaxErr("添加失败")
  203. }
  204. file.GetCsvDb().NewHost(h)
  205. s.AjaxOk("添加成功")
  206. }
  207. }
  208. func (s *IndexController) EditHost() {
  209. id := s.GetIntNoErr("id")
  210. if s.Ctx.Request.Method == "GET" {
  211. s.Data["menu"] = "host"
  212. if h, err := file.GetCsvDb().GetHostById(id); err != nil {
  213. s.error()
  214. } else {
  215. s.Data["h"] = h
  216. }
  217. s.SetInfo("修改")
  218. s.display("index/hedit")
  219. } else {
  220. if h, err := file.GetCsvDb().GetHostById(id); err != nil {
  221. s.error()
  222. } else {
  223. h.Host = s.GetString("host")
  224. h.Target = s.GetString("target")
  225. h.HeaderChange = s.GetString("header")
  226. h.HostChange = s.GetString("hostchange")
  227. h.Remark = s.GetString("remark")
  228. h.TargetArr = nil
  229. h.Location = s.GetString("location")
  230. file.GetCsvDb().UpdateHost(h)
  231. var err error
  232. if h.Client, err = file.GetCsvDb().GetClient(s.GetIntNoErr("client_id")); err != nil {
  233. s.AjaxErr("修改失败")
  234. }
  235. }
  236. s.AjaxOk("修改成功")
  237. }
  238. }